diff --git a/README.md b/README.md index 1397b2da..49fce131 100644 --- a/README.md +++ b/README.md @@ -1,301 +1,115 @@ -# πŸ—οΈŽ Scaffold Balancer v3 +# πŸ—οΈŽ Balancer v3 Hooks -A starter kit for building on top of Balancer v3. Accelerate the process of creating custom pools and hooks contracts. Concentrate on mastering the core concepts within a swift and responsive environment augmented by a local fork and a frontend pool operations playground. +## LP Incentivized Hook -[![intro-to-scaffold-balancer](https://github.com/user-attachments/assets/f862091d-2fe9-4b4b-8d70-cb2fdc667384)](https://www.youtube.com/watch?v=m6q5M34ZdXw) +The **LPIncentive Hook** is a smart contract designed to incentivize liquidity providers (LPs) based on both the volume of liquidity they provide and the duration for which they keep their liquidity in the pool. This hook allows protocols to reward LPs with more granular control by using these two factors to calculate rewards, ensuring that long-term and high-volume liquidity providers are appropriately rewarded. -### πŸ” Development Life Cycle +### What the hook does -1. Learn the core concepts for building on top of Balancer v3 -2. Configure and deploy factories, pools, and hooks contracts to a local anvil fork of Sepolia -3. Interact with pools via a frontend that runs at [localhost:3000](http://localhost:3000/) +1. Volume-Based Incentive: -### πŸͺ§ Table Of Contents +**Liquidity Volume:** +The hook tracks the total volume of liquidity an LP adds to the pool. As LPs reach certain predefined volume milestones, they unlock higher tiers of rewards. -- [πŸ§‘β€πŸ’» Environment Setup](#-environment-setup) -- [πŸ‘©β€πŸ« Learn Core Concepts](#-learn-core-concepts) -- [πŸ•΅οΈ Explore the Examples](#-explore-the-examples) -- [🌊 Create a Custom Pool](#-create-a-custom-pool) -- [🏭 Create a Pool Factory](#-create-a-pool-factory) -- [πŸͺ Create a Pool Hook](#-create-a-pool-hook) -- [🚒 Deploy the Contracts](#-deploy-the-contracts) -- [πŸ§ͺ Test the Contracts](#-test-the-contracts) +**Milestone-Based Rewards:** +For example, if an LP provides liquidity exceeding certain thresholds (e.g., 10,000 tokens, 50,000 tokens, etc.), they are entitled to receive higher rewards, such as extra tokens or fee rebates. -## πŸ§‘β€πŸ’» Environment Setup +2. Time-Based Incentive: -### 1. Requirements πŸ“œ +**Holding Duration:** +LPs are incentivized to keep their liquidity in the pool for a longer period. The longer an LP keeps liquidity staked in the pool without withdrawing, the higher their rewards. -- [Node (>= v18.17)](https://nodejs.org/en/download/) -- Yarn ([v1](https://classic.yarnpkg.com/en/docs/install/) or [v2+](https://yarnpkg.com/getting-started/install)) -- [Git](https://git-scm.com/downloads) -- [Foundry](https://book.getfoundry.sh/getting-started/installation) (>= v0.2.0) +**Reward Vesting:** +LP rewards are distributed based on how long the liquidity has been staked. For example, an LP must hold liquidity for at least 30 days to become eligible for certain rewards. If the liquidity is withdrawn before that period, the LP forfeits the time-based reward. -### 2. Quickstart πŸƒ +### Pool Lifecycle Implementation Point(s) -1. Ensure you have the latest version of foundry installed +**onAfterAddLiquidity** +- Update the total liquidity for the user +- Calculate the rewards +- Distribute the rewards -``` -foundryup -``` +**onAfterRemoveLiquidity** +- Update the total liquidity for the user -2. Clone this repo & install dependencies +### Advantages and Applications -```bash -git clone https://github.com/balancer/scaffold-balancer-v3.git -cd scaffold-balancer-v3 -yarn install -``` +**Encourages Long-Term Commitment:** +The time-based rewards ensure that LPs who commit their capital for longer periods are rewarded more generously than short-term participants, promoting pool stability. -3. Set a `SEPOLIA_RPC_URL` in the `packages/foundry/.env` file +**Rewards High-Volume LPs:** +By providing tiered rewards based on volume, the protocol incentivizes LPs to add more liquidity, which improves liquidity depth and enhances the user experience for traders. -``` -SEPOLIA_RPC_URL=... -``` +**Fair and Transparent Reward Distribution:** +With clear volume and time-based milestones, LPs understand exactly how much liquidity and how long they need to stake to maximize their rewards. -4. Start a local anvil fork of the Sepolia testnet +**Prevents Abuse:** +The withdrawal penalty prevents LPs from gaming the system by adding and removing liquidity frequently, ensuring rewards are fairly distributed to committed participants. -```bash -yarn fork -``` -5. Deploy the mock tokens, pool factories, pool hooks, and custom pools contracts - > By default, the anvil account #0 will be the deployer and recieve the mock tokens and BPT from pool initialization +## SwapReferrer Hook -```bash -yarn deploy -``` +The **SwapReferrer Hook** is a specialized smart contract that integrates a referral-based discount mechanism into a token swap operation on a decentralized finance (DeFi) platform. This hook allows both users and referrers to benefit from reduced swap fees. -6. Start the nextjs frontend +### What the hook does -```bash -yarn start -``` +The **SwapReferrer Hook** is designed for DeFi protocols that want to incentivize user acquisition through a referral system. It allows liquidity providers and swappers to benefit from discounted swap fees when they either use a referral code or are referrers themselves. -7. Explore the frontend +The smart contract has the following key features and processes: -- Navigate to http://localhost:3000 to see the home page -- Visit the [Pools Page](http://localhost:3000/pools) to search by address or select using the pool buttons -- Vist the [Debug Page](http://localhost:3000/debug) to see the mock tokens, factory, and hooks contracts +1. Referral Code Generation: -8. Run the Foundry tests +When a user swaps for the first time, a unique referral code is generated for them automatically. This referral code can be used by other users for future swaps, but the user cannot use their own referral code. +The referral code is stored and linked to the user’s address. -``` -yarn test -``` +2. User Benefit (Instant Swap Fee Discount): -### 3. Scaffold ETH 2 Tips πŸ—οΈ +When a user performs a token swap and provides a referral code, they instantly receive a discount on the swap fee. This discount is a percentage of the predefined swap fee (e.g., 50% off the original fee). +The predefined swap fee is passed as a percentage by the calling contract (e.g., 0.01e18 for 1%). The discount is calculated as a percentage reduction on this predefined fee. +For example, if the predefined swap fee is 1% (0.01e18), and the user is eligible for a 50% discount, the user only pays a 0.5% fee. -SE-2 offers a variety of configuration options for connecting an account, choosing networks, and deploying contracts +3. Referrer Benefit (Redeemable Swap Fee Discount): -
πŸ”₯ Burner Wallet +For each new user who swaps using a referral code, the referrer accumulates a redeemable swap fee discount (e.g., 30% discount for each referral). +When the referrer performs their next swap, they can use the accumulated discount to reduce their swap fee. +If the accumulated discount exceeds 100% of the swap fee, only up to 100% is applied, and any leftover discount is carried over to future swaps. +For example: +If 5 users swap using the same referral code, the referrer accumulates a 150% discount (30% per user Γ— 5 users). +When the referrer swaps next, they can only use up to 100% of the discount to perform the swap for free, and the remaining 50% will be carried forward to future swaps. -If you do not have an active wallet extension connected to your web browser, then scaffold eth will automatically connect to a "burner wallet" that is randomly generated on the frontend and saved to the browser's local storage. When using the burner wallet, transactions will be instantly signed, which is convenient for quick iterative development. +4. Discount Limits and Controls: -To force the use of burner wallet, disable your browsers wallet extensions and refresh the page. Note that the burner wallet comes with 0 ETH to pay for gas so you will need to click the faucet button in top right corner. Also the mock tokens for the pool are minted to your deployer account set in `.env` so you will want to navigate to the "Debug Contracts" page to mint your burner wallet some mock tokens to use with the pool. +The smart contract ensures that: +A user can only use a referral code once when performing their first swap. +The final swap fee for a user can never go below 0%. +The referrer’s discount is applied with a cap of 100%, ensuring that the referrer cannot receive more than a full swap fee reduction on a single swap. -![Burner Wallet](https://github.com/Dev-Rel-as-a-Service/scaffold-balancer-v3/assets/73561520/0a1f3456-f22a-46b5-9e05-0ef5cd17cce7) +5. Swap Fee Output in Percentage: -![Debug Tab Mint](https://github.com/Dev-Rel-as-a-Service/scaffold-balancer-v3/assets/73561520/fbb53772-8f6d-454d-a153-0e7a2925ef9f) +The swap fee after applying discounts (both user and referrer) is calculated and returned as a percentage. +This makes the hook compatible with other contracts that calculate swap fees based on percentages, ensuring that it integrates seamlessly into a broader DeFi protocol. -
+### Pool Lifecycle Implementation Point(s) -
πŸ‘› Browser Extension Wallet - -- To use your preferred browser extension wallet, ensure that the account you are using matches the PK you previously provided in the `foundry/.env` file -- You may need to add a local development network with rpc url `http://127.0.0.1:8545/` and chain id `31337`. Also, you may need to reset the nonce data for your wallet exension if it gets out of sync. +**onBeforeSwap** +- Calculate the user discount +- Generate the Referral code for a new user +- Calculate the referrer discount +- Store the final discount in variable -
+**onComputeDynamicSwapFeePercentage** +- Update the swap fee based on final discount -
πŸ› Debug Contracts Page +**onAfterSwap** +- Update the final swap fee to zero for a new swap -The [Debug Contracts Page](http://localhost:3000/debug) can be useful for viewing and interacting with all of the externally avaiable read and write functions of a contract. The page will automatically hot reload with contracts that are deployed via the `01_DeployConstantSumFactory.s.sol` script. We use this handy setup to mint `mockERC20` tokens to any connected wallet +### Advantages and Applications -
+**User Incentive:** +Users are motivated to share their referral code because they receive an immediate discount on swap fees. This reduces the friction of high fees for new users entering the DeFi ecosystem. -
🌐 Changing The Frontend Network Connection +**Referrer Incentive:** +Referrers benefit from long-term rewards as their discounts accumulate over time. This encourages liquidity providers and active participants to invite more users to the platform. -- The network the frontend points at is set via `targetNetworks` in the `scaffold.config.ts` file using `chains` from viem. -- By default, the frontend runs on a local node at `http://127.0.0.1:8545` - -```typescript -const scaffoldConfig = { - targetNetworks: [chains.foundry], -``` - -
- -
🍴 Changing The Forked Network - -- By default, the `yarn fork` command points at sepolia, but any of the network aliases from the `[rpc_endpoints]` of `foundry.toml` can be used to modify the `"fork"` alias in the `packages/foundry/package.json` file - -```json - "fork": "anvil --fork-url ${0:-sepolia} --chain-id 31337 --config-out localhost.json", -``` - -- To point the frontend at a different forked network, change the `targetFork` in `scaffold.config.ts` - -```typescript -const scaffoldConfig = { - // The networks the frontend can connect to - targetNetworks: [chains.foundry], - - // If using chains.foundry as your targetNetwork, you must specify a network to fork - targetFork: chains.sepolia, -``` - -
- -## πŸ‘©β€πŸ« Learn Core Concepts - -- [Contract Architecture](https://docs-v3.balancer.fi/concepts/core-concepts/architecture.html) -- [Balancer Pool Tokens](https://docs-v3.balancer.fi/concepts/core-concepts/balancer-pool-tokens.html) -- [Balancer Pool Types](https://docs-v3.balancer.fi/concepts/explore-available-balancer-pools/) -- [Building Custom AMMs](https://docs-v3.balancer.fi/build-a-custom-amm/) -- [Exploring Hooks and Custom Routers](https://pitchandrolls.com/2024/08/30/unlocking-the-power-of-balancer-v3-exploring-hooks-and-custom-routers/) -- [Hook Development Tips](https://medium.com/@johngrant/unlocking-the-power-of-balancer-v3-hook-development-made-simple-831391a68296) - -![v3-components](https://github.com/user-attachments/assets/ccda9323-790f-4276-b092-c867fd80bf9e) - -## πŸ•΅οΈ Explore the Examples - -Each of the following examples have turn key deploy scripts that can be found in the [foundry/script/](https://github.com/balancer/scaffold-balancer-v3/tree/main/packages/foundry/script) directory - -### 1. Constant Sum Pool with Dynamic Swap Fee Hook - -The swap fee percentage is altered by the hook contract before the pool calculates the amount for the swap - -![dynamic-fee-hook](https://github.com/user-attachments/assets/5ba69ea3-6894-4eeb-befa-ed87cfeb6b13) - -### 2. Constant Product Pool with Lottery Hook - -An after swap hook makes a request to an oracle contract for a random number - -![after-swap-hook](https://github.com/user-attachments/assets/594ce1ac-2edc-4d16-9631-14feb2d085f8) - -### 3. Weighted Pool with Exit Fee Hook - -An after remove liquidity hook adjusts the amounts before the vault transfers tokens to the user - -![after-remove-liquidity-hook](https://github.com/user-attachments/assets/2e8f4a5c-f168-4021-b316-28a79472c8d1) - -## 🌊 Create a Custom Pool - -[![custom-amm-video](https://github.com/user-attachments/assets/e6069a51-f1b5-4f98-a2a9-3a2098696f96)](https://www.youtube.com/watch?v=kXynS3jAu0M) - -### 1. Review the Docs πŸ“– - -- [Create a custom AMM with a novel invariant](https://docs-v3.balancer.fi/build-a-custom-amm/build-an-amm/create-custom-amm-with-novel-invariant.html) - -### 2. Recall the Key Requirements πŸ”‘ - -- Must inherit from `IBasePool` and `BalancerPoolToken` -- Must implement `onSwap`, `computeInvariant`, and `computeBalance` -- Must implement `getMaximumSwapFeePercentage` and `getMinimumSwapFeePercentage` - -### 3. Write a Custom Pool Contract πŸ“ - -- To get started, edit the`ConstantSumPool.sol` contract directly or make a copy - -## 🏭 Create a Pool Factory - -After designing a pool contract, the next step is to prepare a factory contract because Balancer's off-chain infrastructure uses the factory address as a means to identify the type of pool, which is important for integration into the UI, SDK, and external aggregators - -### 1. Review the Docs πŸ“– - -- [Deploy a Custom AMM Using a Factory](https://docs-v3.balancer.fi/build-a-custom-amm/build-an-amm/deploy-custom-amm-using-factory.html) - -### 2. Recall the Key Requirements πŸ”‘ - -- A pool factory contract must inherit from [BasePoolFactory](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/vault/contracts/factories/BasePoolFactory.sol) -- Use the internal `_create` function to deploy a new pool -- Use the internal `_registerPoolWithVault` fuction to register a pool immediately after creation - -### 3. Write a Factory Contract πŸ“ - -- To get started, edit the`ConstantSumFactory.sol` contract directly or make a copy - -## πŸͺ Create a Pool Hook - -[![hook-video](https://github.com/user-attachments/assets/96e12c29-53c2-4a52-9437-e477f6d992d1)](https://www.youtube.com/watch?v=kaz6duliRPA) - -### 1. Review the Docs πŸ“– - -- [Extend an Existing Pool Type Using Hooks](https://docs-v3.balancer.fi/build-a-custom-amm/build-an-amm/extend-existing-pool-type-using-hooks.html) - -### 2. Recall the Key Requirements πŸ”‘ - -- A hooks contract must inherit from [BasePoolHooks.sol](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/vault/contracts/BaseHooks.sol) -- A hooks contract should also inherit from [VaultGuard.sol](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/vault/contracts/VaultGuard.sol) -- Must implement `onRegister` to determine if a pool is allowed to use the hook contract -- Must implement `getHookFlags` to define which hooks are supported -- The `onlyVault` modifier should be applied to all hooks functions (i.e. `onRegister`, `onBeforeSwap`, `onAfterSwap` ect.) - -### 3. Write a Hook Contract πŸ“ - -- To get started, edit the `VeBALFeeDiscountHook.sol` contract directly or make a copy - -## 🚒 Deploy the Contracts - -The deploy scripts are located in the [foundry/script/](https://github.com/balancer/scaffold-balancer-v3/tree/main/packages/foundry/script) directory. To better understand the lifecycle of deploying a pool that uses a hooks contract, see the diagram below - -![pool-deploy-scripts](https://github.com/user-attachments/assets/bb906080-8f42-46c0-af90-ba01ba1754fc) - -### 1. Modifying the Deploy Scripts πŸ› οΈ - -For all the scaffold integrations to work properly, each deploy script must be imported into `Deploy.s.sol` and inherited by the `DeployScript` contract in `Deploy.s.sol` - -### 2. Broadcast the Transactions πŸ“‘ - -#### Deploy to local fork - -1. Run the following command - -```bash -yarn deploy -``` - -#### Deploy to a live network - -1. Add a `DEPLOYER_PRIVATE_KEY` to the `packages/foundry/.env` file - -``` -DEPLOYER_PRIVATE_KEY=0x... -SEPOLIA_RPC_URL=... -``` - -> The `DEPLOYER_PRIVATE_KEY` must start with `0x` and must hold enough Sepolia ETH to deploy the contracts. This account will receive the BPT from pool initialization - -2. Run the following command - -``` -yarn deploy --network sepolia -``` - -## πŸ§ͺ Test the Contracts - -The [balancer-v3-monorepo](https://github.com/balancer/balancer-v3-monorepo) provides testing utility contracts like [BasePoolTest](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/vault/test/foundry/utils/BasePoolTest.sol) and [BaseVaultTest](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/vault/test/foundry/utils/BaseVaultTest.sol). Therefore, the best way to begin writing tests for custom factories, pools, and hooks contracts is to leverage the examples established by the source code. - -### 1. Testing Factories πŸ‘¨β€πŸ”¬ - -The `ConstantSumFactoryTest` roughly mirrors the [WeightedPool8020FactoryTest -](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/pool-weighted/test/foundry/WeightedPool8020Factory.t.sol) - -``` -yarn test --match-contract ConstantSumFactoryTest -``` - -### 2. Testing Pools 🏊 - -The `ConstantSumPoolTest` roughly mirrors the [WeightedPoolTest](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/pool-weighted/test/foundry/WeightedPool.t.sol) - -``` -yarn test --match-contract ConstantSumPoolTest -``` - -### 3. Testing Hooks 🎣 - -The `VeBALFeeDiscountHookExampleTest` mirrors the [VeBALFeeDiscountHookExampleTest](https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/pool-hooks/test/foundry/VeBALFeeDiscountHookExample.t.sol) - -``` -yarn test --match-contract VeBALFeeDiscountHookExampleTest -``` +**Controlled Fee System:** +The hook ensures that swap fees remain within predefined limits (i.e., no negative fees, and referrers can only get 100% discount at most per swap). It prevents abuse while still providing a generous incentive structure. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..f2dc5223 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10951 @@ +{ + "name": "se-2", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "se-2", + "version": "0.0.1", + "hasInstallScript": true, + "devDependencies": { + "husky": "^8.0.1", + "lint-staged": "^13.0.3" + }, + "workspaces": { + "packages": [ + "packages/nextjs", + "packages/foundry" + ] + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@se-2/foundry": { + "resolved": "packages/foundry", + "link": true + }, + "node_modules/@se-2/nextjs": { + "resolved": "packages/nextjs", + "link": true + }, + "node_modules/@types/node": { + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forge-gas-snapshot": { + "name": "ylv-io/forge-gas-snapshot", + "version": "0.1.4", + "resolved": "git+ssh://git@github.com/ylv-io/forge-gas-snapshot.git#ee8e1f02009785ab81a5058a18c75d5d3b7a894d", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "6.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/log-update": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true, + "peer": true + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-fest": { + "version": "1.4.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yaml": { + "version": "2.3.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/foundry": { + "name": "@se-2/foundry", + "version": "0.0.1", + "dependencies": { + "dotenv": "~16.3.1", + "envfile": "~6.18.0", + "ethers": "~5.7.1", + "qrcode": "~1.5.3", + "toml": "~3.0.0" + }, + "devDependencies": { + "@types/prettier": "2", + "@types/qrcode": "1", + "forge-gas-snapshot": "https://github.com/ylv-io/forge-gas-snapshot", + "prettier": "~2.8.8", + "prettier-plugin-solidity": "^1.3.1" + } + }, + "packages/foundry/node_modules/@ethersproject/basex": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "packages/foundry/node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/providers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "packages/foundry/node_modules/@ethersproject/random": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "packages/foundry/node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/units": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "packages/foundry/node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "packages/foundry/node_modules/@solidity-parser/parser": { + "version": "0.17.0", + "dev": true, + "license": "MIT" + }, + "packages/foundry/node_modules/@types/prettier": { + "version": "2.7.3", + "dev": true, + "license": "MIT" + }, + "packages/foundry/node_modules/@types/qrcode": { + "version": "1.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "packages/foundry/node_modules/aes-js": { + "version": "3.0.0", + "license": "MIT" + }, + "packages/foundry/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/foundry/node_modules/bech32": { + "version": "1.1.4", + "license": "MIT" + }, + "packages/foundry/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/foundry/node_modules/cliui": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "packages/foundry/node_modules/decamelize": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/foundry/node_modules/dijkstrajs": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/foundry/node_modules/dotenv": { + "version": "16.3.2", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "packages/foundry/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "packages/foundry/node_modules/encode-utf8": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/foundry/node_modules/envfile": { + "version": "6.18.0", + "license": "MIT", + "bin": { + "envfile": "bin.cjs" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "packages/foundry/node_modules/ethers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "packages/foundry/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/foundry/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/foundry/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/pngjs": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "packages/foundry/node_modules/prettier": { + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "packages/foundry/node_modules/prettier-plugin-solidity": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.17.0", + "semver": "^7.5.4", + "solidity-comments-extractor": "^0.0.8" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" + } + }, + "packages/foundry/node_modules/qrcode": { + "version": "1.5.3", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/foundry/node_modules/require-main-filename": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/foundry/node_modules/semver": { + "version": "7.6.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/foundry/node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/foundry/node_modules/solidity-comments-extractor": { + "version": "0.0.8", + "dev": true, + "license": "MIT" + }, + "packages/foundry/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/toml": { + "version": "3.0.0", + "license": "MIT" + }, + "packages/foundry/node_modules/which-module": { + "version": "2.0.1", + "license": "ISC" + }, + "packages/foundry/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/foundry/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "packages/foundry/node_modules/yargs": { + "version": "15.4.1", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "packages/foundry/node_modules/yargs-parser": { + "version": "18.1.3", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/nextjs": { + "name": "@se-2/nextjs", + "version": "0.1.0", + "dependencies": { + "@balancer/sdk": "^0.26.0", + "@ethersproject/providers": "^5.7.2", + "@heroicons/react": "^2.0.11", + "@rainbow-me/rainbowkit": "1.3.5", + "@tanstack/react-query": "^5.28.6", + "@uniswap/sdk-core": "^4.0.1", + "@uniswap/v2-sdk": "^3.0.1", + "blo": "^1.0.1", + "daisyui": "4.5.0", + "graphql": "^16.8.1", + "lodash.debounce": "^4.0.8", + "next": "^14.0.4", + "next-themes": "^0.2.1", + "nprogress": "^0.2.0", + "qrcode.react": "^3.1.0", + "react": "^18.2.0", + "react-copy-to-clipboard": "^5.1.0", + "react-dom": "^18.2.0", + "react-hot-toast": "^2.4.0", + "use-debounce": "^8.0.4", + "usehooks-ts": "^2.13.0", + "viem": "1.19.9", + "wagmi": "1.4.12", + "zustand": "^4.1.2" + }, + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.1.1", + "@types/lodash.debounce": "^4", + "@types/node": "^17.0.35", + "@types/nprogress": "^0", + "@types/react": "^18.0.9", + "@types/react-copy-to-clipboard": "^5.0.4", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "autoprefixer": "^10.4.12", + "eslint": "^8.15.0", + "eslint-config-next": "^14.0.4", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "postcss": "^8.4.16", + "prettier": "^2.8.4", + "tailwindcss": "^3.3.3", + "type-fest": "^4.6.0", + "typescript": "^5.1.6" + } + }, + "packages/nextjs/node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/@babel/code-frame": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/generator": { + "version": "7.17.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/highlight": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/@babel/parser": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/@babel/runtime": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/template": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/traverse": { + "version": "7.23.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/@babel/types": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@balancer/sdk": { + "version": "0.26.0", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.5.1", + "lodash.clonedeep": "^4.5.0", + "viem": "^2.12.1" + }, + "engines": { + "node": ">=18.x" + } + }, + "packages/nextjs/node_modules/@balancer/sdk/node_modules/@noble/curves": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@balancer/sdk/node_modules/abitype": { + "version": "1.0.5", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@balancer/sdk/node_modules/isows": { + "version": "1.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "packages/nextjs/node_modules/@balancer/sdk/node_modules/viem": { + "version": "2.17.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.4.0", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0", + "abitype": "1.0.5", + "isows": "1.0.4", + "ws": "8.17.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@balancer/sdk/node_modules/ws": { + "version": "8.17.1", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@coinbase/wallet-sdk": { + "version": "3.9.3", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "clsx": "^1.2.1", + "eth-block-tracker": "^7.1.0", + "eth-json-rpc-filters": "^6.0.0", + "eventemitter3": "^5.0.1", + "keccak": "^3.0.3", + "preact": "^10.16.0", + "sha.js": "^2.4.11" + } + }, + "packages/nextjs/node_modules/@coinbase/wallet-sdk/node_modules/clsx": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/@coinbase/wallet-sdk/node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@emotion/hash": { + "version": "0.9.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "packages/nextjs/node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "packages/nextjs/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/nextjs/node_modules/@eslint/js": { + "version": "8.57.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "packages/nextjs/node_modules/@ethereumjs/common": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "packages/nextjs/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "packages/nextjs/node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "packages/nextjs/node_modules/@ethereumjs/util": { + "version": "8.1.0", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "packages/nextjs/node_modules/@ethersproject/basex": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "packages/nextjs/node_modules/@ethersproject/providers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "packages/nextjs/node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@ethersproject/random": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "packages/nextjs/node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "packages/nextjs/node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "packages/nextjs/node_modules/@heroicons/react": { + "version": "2.1.4", + "license": "MIT", + "peerDependencies": { + "react": ">= 16" + } + }, + "packages/nextjs/node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "packages/nextjs/node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "packages/nextjs/node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "packages/nextjs/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "packages/nextjs/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/nextjs/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/nextjs/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "packages/nextjs/node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "packages/nextjs/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/eth-json-rpc-provider": { + "version": "1.0.1", + "dependencies": { + "@metamask/json-rpc-engine": "^7.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/json-rpc-engine": { + "version": "7.3.3", + "license": "ISC", + "dependencies": { + "@metamask/rpc-errors": "^6.2.1", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^8.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/json-rpc-engine/node_modules/@metamask/utils": { + "version": "8.5.0", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.0.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/rpc-errors": { + "version": "6.3.1", + "license": "MIT", + "dependencies": { + "@metamask/utils": "^9.0.0", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/rpc-errors/node_modules/@metamask/utils": { + "version": "9.0.0", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.2.0", + "@metamask/superstruct": "^3.1.0", + "@noble/hashes": "^1.3.1", + "@scure/base": "^1.1.3", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "pony-cause": "^2.1.10", + "semver": "^7.5.4", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/safe-event-emitter": { + "version": "3.1.1", + "license": "ISC", + "engines": { + "node": ">=12.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/superstruct": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "packages/nextjs/node_modules/@metamask/utils": { + "version": "5.0.2", + "license": "ISC", + "dependencies": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/@motionone/animation": { + "version": "10.18.0", + "license": "MIT", + "dependencies": { + "@motionone/easing": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/animation/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/dom": { + "version": "10.18.0", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.18.0", + "@motionone/generators": "^10.18.0", + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/dom/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/easing": { + "version": "10.18.0", + "license": "MIT", + "dependencies": { + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/easing/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/generators": { + "version": "10.18.0", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "@motionone/utils": "^10.18.0", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/generators/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/svelte": { + "version": "10.16.4", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/svelte/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/types": { + "version": "10.17.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@motionone/utils": { + "version": "10.18.0", + "license": "MIT", + "dependencies": { + "@motionone/types": "^10.17.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/utils/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@motionone/vue": { + "version": "10.16.4", + "license": "MIT", + "dependencies": { + "@motionone/dom": "^10.16.4", + "tslib": "^2.3.1" + } + }, + "packages/nextjs/node_modules/@motionone/vue/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@next/env": { + "version": "14.2.4", + "license": "MIT" + }, + "packages/nextjs/node_modules/@next/eslint-plugin-next": { + "version": "14.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "packages/nextjs/node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/@next/eslint-plugin-next/node_modules/jackspeak": { + "version": "2.3.6", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "packages/nextjs/node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.4", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@noble/hashes": { + "version": "1.4.0", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/@parcel/watcher": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "packages/nextjs/node_modules/@parcel/watcher-wasm": { + "version": "2.4.1", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "packages/nextjs/node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "packages/nextjs/node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.0", + "license": "MIT", + "engines": { + "node": "^16 || ^18 || >= 20" + } + }, + "packages/nextjs/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "packages/nextjs/node_modules/@rainbow-me/rainbowkit": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "@vanilla-extract/css": "1.14.0", + "@vanilla-extract/dynamic": "2.1.0", + "@vanilla-extract/sprinkles": "1.6.1", + "clsx": "2.1.0", + "qrcode": "1.5.3", + "react-remove-scroll": "2.5.7", + "ua-parser-js": "^1.0.37" + }, + "engines": { + "node": ">=12.4" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17", + "viem": "~0.3.19 || ^1.0.0", + "wagmi": "~1.0.1 || ~1.1.0 || ~1.2.0 || ~1.3.0 || ~1.4.0" + } + }, + "packages/nextjs/node_modules/@rushstack/eslint-patch": { + "version": "1.10.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-provider": { + "version": "0.18.3", + "license": "MIT", + "dependencies": { + "@safe-global/safe-apps-sdk": "^9.1.0", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", + "viem": "^2.1.1" + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk/node_modules/@noble/curves": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk/node_modules/abitype": { + "version": "1.0.5", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk/node_modules/isows": { + "version": "1.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk/node_modules/viem": { + "version": "2.17.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.4.0", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0", + "abitype": "1.0.5", + "isows": "1.0.4", + "ws": "8.17.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@safe-global/safe-apps-sdk/node_modules/ws": { + "version": "8.17.1", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@safe-global/safe-gateway-typescript-sdk": { + "version": "3.21.8", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "packages/nextjs/node_modules/@scure/bip32": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@scure/bip39": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@stablelib/aead": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/binary": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/bytes": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/chacha": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/chacha20poly1305": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/hash": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/hkdf": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/hmac": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/int": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/random": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/sha256": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/sha512": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@stablelib/wipe": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/@stablelib/x25519": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "packages/nextjs/node_modules/@swc/counter": { + "version": "0.1.3", + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/@swc/helpers": { + "version": "0.5.5", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "packages/nextjs/node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/@tanstack/query-core": { + "version": "4.36.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "packages/nextjs/node_modules/@tanstack/query-persist-client-core": { + "version": "4.36.1", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "4.36.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "packages/nextjs/node_modules/@tanstack/query-sync-storage-persister": { + "version": "4.36.1", + "license": "MIT", + "dependencies": { + "@tanstack/query-persist-client-core": "4.36.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "packages/nextjs/node_modules/@tanstack/react-query": { + "version": "5.53.2", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.53.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "packages/nextjs/node_modules/@tanstack/react-query/node_modules/@tanstack/query-core": { + "version": "5.53.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "packages/nextjs/node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.23.2", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { + "version": "7.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "packages/nextjs/node_modules/@types/debug": { + "version": "4.1.12", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "packages/nextjs/node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/lodash": { + "version": "4.17.7", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/lodash.debounce": { + "version": "4.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "packages/nextjs/node_modules/@types/ms": { + "version": "0.7.34", + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/node": { + "version": "17.0.45", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/nprogress": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/prop-types": { + "version": "15.7.12", + "devOptional": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/react": { + "version": "18.3.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "packages/nextjs/node_modules/@types/react-copy-to-clipboard": { + "version": "5.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "packages/nextjs/node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/@types/trusted-types": { + "version": "2.0.7", + "license": "MIT" + }, + "packages/nextjs/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/nextjs/node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "packages/nextjs/node_modules/@uniswap/sdk-core": { + "version": "4.2.1", + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.0.2", + "big.js": "^5.2.2", + "decimal.js-light": "^2.5.0", + "jsbi": "^3.1.4", + "tiny-invariant": "^1.1.0", + "toformat": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/nextjs/node_modules/@uniswap/v2-sdk": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.0.0", + "@ethersproject/solidity": "^5.0.0", + "@uniswap/sdk-core": "^4.0.7", + "tiny-invariant": "^1.1.0", + "tiny-warning": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "packages/nextjs/node_modules/@vanilla-extract/css": { + "version": "1.14.0", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@vanilla-extract/private": "^1.0.3", + "chalk": "^4.1.1", + "css-what": "^6.1.0", + "cssesc": "^3.0.0", + "csstype": "^3.0.7", + "deep-object-diff": "^1.1.9", + "deepmerge": "^4.2.2", + "media-query-parser": "^2.0.2", + "modern-ahocorasick": "^1.0.0", + "outdent": "^0.8.0" + } + }, + "packages/nextjs/node_modules/@vanilla-extract/dynamic": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@vanilla-extract/private": "^1.0.3" + } + }, + "packages/nextjs/node_modules/@vanilla-extract/private": { + "version": "1.0.5", + "license": "MIT" + }, + "packages/nextjs/node_modules/@vanilla-extract/sprinkles": { + "version": "1.6.1", + "license": "MIT", + "peerDependencies": { + "@vanilla-extract/css": "^1.0.0" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors": { + "version": "3.1.10", + "funding": [ + { + "type": "gitcoin", + "url": "https://wagmi.sh/gitcoin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "dependencies": { + "@coinbase/wallet-sdk": "^3.6.6", + "@safe-global/safe-apps-provider": "^0.18.1", + "@safe-global/safe-apps-sdk": "^8.1.0", + "@walletconnect/ethereum-provider": "2.10.6", + "@walletconnect/legacy-provider": "^2.0.0", + "@walletconnect/modal": "2.6.2", + "@walletconnect/utils": "2.10.2", + "abitype": "0.8.7", + "eventemitter3": "^4.0.7" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "viem": ">=0.3.35" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@noble/hashes": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@safe-global/safe-apps-sdk": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", + "viem": "^1.0.0" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@safe-global/safe-apps-sdk/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@safe-global/safe-apps-sdk/node_modules/abitype": { + "version": "0.9.8", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@safe-global/safe-apps-sdk/node_modules/viem": { + "version": "1.21.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@scure/bip32": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@scure/bip39": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@walletconnect/types": { + "version": "2.10.2", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/keyvaluestorage": "^1.0.2", + "@walletconnect/logger": "^2.0.1", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@wagmi/connectors/node_modules/@walletconnect/utils": { + "version": "2.10.2", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "^1.0.3", + "@walletconnect/relay-api": "^1.0.9", + "@walletconnect/safe-json": "^1.0.2", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.10.2", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "5.3.0", + "query-string": "7.1.3", + "uint8arrays": "^3.1.0" + } + }, + "packages/nextjs/node_modules/@wagmi/core": { + "version": "1.4.12", + "funding": [ + { + "type": "gitcoin", + "url": "https://wagmi.sh/gitcoin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "dependencies": { + "@wagmi/connectors": "3.1.10", + "abitype": "0.8.7", + "eventemitter3": "^4.0.7", + "zustand": "^4.3.1" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "viem": ">=0.3.35" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@walletconnect/core": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-provider": "1.0.13", + "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "1.0.14", + "@walletconnect/keyvaluestorage": "^1.1.1", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/relay-api": "^1.0.9", + "@walletconnect/relay-auth": "^1.0.4", + "@walletconnect/safe-json": "^1.0.2", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.10.6", + "@walletconnect/utils": "2.10.6", + "events": "^3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "^3.1.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/core/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.13", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/core/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/crypto": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/environment": "^1.0.1", + "@walletconnect/randombytes": "^1.0.3", + "aes-js": "^3.1.2", + "hash.js": "^1.1.7", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/encoding": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-typedarray": "1.0.0", + "tslib": "1.14.1", + "typedarray-to-buffer": "3.1.5" + } + }, + "packages/nextjs/node_modules/@walletconnect/environment": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/ethereum-provider": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "^1.0.7", + "@walletconnect/jsonrpc-provider": "^1.0.13", + "@walletconnect/jsonrpc-types": "^1.0.3", + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/modal": "^2.4.3", + "@walletconnect/sign-client": "2.10.6", + "@walletconnect/types": "2.10.6", + "@walletconnect/universal-provider": "2.10.6", + "@walletconnect/utils": "2.10.6", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/events": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/heartbeat": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-http-connection": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.1", + "cross-fetch": "^3.1.4", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.14", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-utils": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "@walletconnect/environment": "^1.0.1", + "@walletconnect/jsonrpc-types": "^1.0.3", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-ws-connection": { + "version": "1.0.14", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0", + "ws": "^7.5.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { + "version": "7.5.10", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-client": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/crypto": "^1.0.3", + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/jsonrpc-utils": "^1.0.4", + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/legacy-utils": "^2.0.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "^5.3.0", + "query-string": "^6.13.5" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-client/node_modules/query-string": { + "version": "6.14.1", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-modal": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/legacy-utils": "^2.0.0", + "copy-to-clipboard": "^3.3.3", + "preact": "^10.12.0", + "qrcode": "^1.5.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-provider": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "^1.0.4", + "@walletconnect/jsonrpc-provider": "^1.0.6", + "@walletconnect/legacy-client": "^2.0.0", + "@walletconnect/legacy-modal": "^2.0.0", + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/legacy-utils": "^2.0.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-types": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-utils": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/jsonrpc-utils": "^1.0.4", + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "^5.3.0", + "query-string": "^6.13.5" + } + }, + "packages/nextjs/node_modules/@walletconnect/legacy-utils/node_modules/query-string": { + "version": "6.14.1", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/@walletconnect/logger": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/modal": { + "version": "2.6.2", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.6.2", + "@walletconnect/modal-ui": "2.6.2" + } + }, + "packages/nextjs/node_modules/@walletconnect/modal-core": { + "version": "2.6.2", + "license": "Apache-2.0", + "dependencies": { + "valtio": "1.11.2" + } + }, + "packages/nextjs/node_modules/@walletconnect/modal-ui": { + "version": "2.6.2", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/modal-core": "2.6.2", + "lit": "2.8.0", + "motion": "10.16.2", + "qrcode": "1.5.3" + } + }, + "packages/nextjs/node_modules/@walletconnect/randombytes": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/environment": "^1.0.1", + "randombytes": "^2.1.0", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/relay-api": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "packages/nextjs/node_modules/@walletconnect/relay-auth": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "@stablelib/ed25519": "^1.0.2", + "@stablelib/random": "^1.0.1", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1", + "uint8arrays": "^3.0.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/sign-client": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/core": "2.10.6", + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.10.6", + "@walletconnect/utils": "2.10.6", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/time": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/types": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/keyvaluestorage": "^1.1.1", + "@walletconnect/logger": "^2.0.1", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/types/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/universal-provider": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@walletconnect/jsonrpc-http-connection": "^1.0.7", + "@walletconnect/jsonrpc-provider": "1.0.13", + "@walletconnect/jsonrpc-types": "^1.0.2", + "@walletconnect/jsonrpc-utils": "^1.0.7", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/sign-client": "2.10.6", + "@walletconnect/types": "2.10.6", + "@walletconnect/utils": "2.10.6", + "events": "^3.3.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/universal-provider/node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.13", + "license": "MIT", + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/utils": { + "version": "2.10.6", + "license": "Apache-2.0", + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "^1.0.3", + "@walletconnect/relay-api": "^1.0.9", + "@walletconnect/safe-json": "^1.0.2", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.10.6", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "5.3.0", + "query-string": "7.1.3", + "uint8arrays": "^3.1.0" + } + }, + "packages/nextjs/node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "packages/nextjs/node_modules/abitype": { + "version": "0.8.7", + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/acorn": { + "version": "8.12.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "packages/nextjs/node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "packages/nextjs/node_modules/aes-js": { + "version": "3.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "packages/nextjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/nextjs/node_modules/any-promise": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/arg": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/aria-query": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "packages/nextjs/node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array-includes": { + "version": "3.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/array.prototype.findlast": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array.prototype.flat": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "packages/nextjs/node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/ast-types-flow": { + "version": "0.0.8", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/async-mutex": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "packages/nextjs/node_modules/async-mutex/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/atomic-sleep": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "packages/nextjs/node_modules/autoprefixer": { + "version": "10.4.19", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "packages/nextjs/node_modules/available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/axe-core": { + "version": "4.9.1", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/axobject-query": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "packages/nextjs/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/nextjs/node_modules/bech32": { + "version": "1.1.4", + "license": "MIT" + }, + "packages/nextjs/node_modules/big.js": { + "version": "5.2.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/nextjs/node_modules/blo": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "packages/nextjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/nextjs/node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/browserslist": { + "version": "4.23.1", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "packages/nextjs/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "packages/nextjs/node_modules/busboy": { + "version": "1.6.0", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "packages/nextjs/node_modules/call-bind": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/camelcase-css": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/caniuse-lite": { + "version": "1.0.30001640", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "packages/nextjs/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/nextjs/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "packages/nextjs/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/citty": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "packages/nextjs/node_modules/client-only": { + "version": "0.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/clipboardy": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/cliui": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "packages/nextjs/node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/clsx": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/confbox": { + "version": "0.1.7", + "license": "MIT" + }, + "packages/nextjs/node_modules/consola": { + "version": "3.2.3", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "packages/nextjs/node_modules/cookie-es": { + "version": "1.1.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/copy-to-clipboard": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "packages/nextjs/node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/nextjs/node_modules/cross-fetch": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "packages/nextjs/node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/crossws": { + "version": "0.2.4", + "license": "MIT", + "peerDependencies": { + "uWebSockets.js": "*" + }, + "peerDependenciesMeta": { + "uWebSockets.js": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "packages/nextjs/node_modules/css-what": { + "version": "6.1.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "packages/nextjs/node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/culori": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "packages/nextjs/node_modules/daisyui": { + "version": "4.5.0", + "license": "MIT", + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "packages/nextjs/node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "packages/nextjs/node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/data-view-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/data-view-byte-offset": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/debug": { + "version": "4.3.5", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/decamelize": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/decimal.js-light": { + "version": "2.5.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/decode-uri-component": { + "version": "0.2.2", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "packages/nextjs/node_modules/deep-equal": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/deep-object-diff": { + "version": "1.1.9", + "license": "MIT" + }, + "packages/nextjs/node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/define-data-property": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/defu": { + "version": "6.1.4", + "license": "MIT" + }, + "packages/nextjs/node_modules/destr": { + "version": "2.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/detect-browser": { + "version": "5.3.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/detect-libc": { + "version": "1.0.3", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/nextjs/node_modules/detect-node-es": { + "version": "1.1.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/dijkstrajs": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/dlv": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/duplexify": { + "version": "4.1.3", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "packages/nextjs/node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/electron-to-chromium": { + "version": "1.4.818", + "dev": true, + "license": "ISC" + }, + "packages/nextjs/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/encode-utf8": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "packages/nextjs/node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "packages/nextjs/node_modules/enhanced-resolve": { + "version": "5.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/nextjs/node_modules/es-abstract": { + "version": "1.23.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/es-define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/es-errors": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/es-get-iterator": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/es-iterator-helpers": { + "version": "1.0.19", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/es-set-tostringtag": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "packages/nextjs/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/eslint": { + "version": "8.57.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/nextjs/node_modules/eslint-config-next": { + "version": "14.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "14.2.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/eslint-config-prettier": { + "version": "8.10.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "packages/nextjs/node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "packages/nextjs/node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/nextjs/node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "packages/nextjs/node_modules/eslint-module-utils": { + "version": "2.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/nextjs/node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/eslint-plugin-import": { + "version": "2.29.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "packages/nextjs/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "packages/nextjs/node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/nextjs/node_modules/eslint-plugin-jsx-a11y": { + "version": "6.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "packages/nextjs/node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/eslint-plugin-react": { + "version": "7.34.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "packages/nextjs/node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "packages/nextjs/node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/nextjs/node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/nextjs/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/nextjs/node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "packages/nextjs/node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/nextjs/node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "packages/nextjs/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "packages/nextjs/node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/eth-block-tracker": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "@metamask/eth-json-rpc-provider": "^1.0.0", + "@metamask/safe-event-emitter": "^3.0.0", + "@metamask/utils": "^5.0.1", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/eth-block-tracker/node_modules/pify": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/eth-json-rpc-filters": { + "version": "6.0.1", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^3.0.0", + "async-mutex": "^0.2.6", + "eth-query": "^2.1.2", + "json-rpc-engine": "^6.1.0", + "pify": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/eth-json-rpc-filters/node_modules/pify": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/eth-query": { + "version": "2.1.2", + "license": "ISC", + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "packages/nextjs/node_modules/eth-rpc-errors": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "packages/nextjs/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "packages/nextjs/node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "packages/nextjs/node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "packages/nextjs/node_modules/execa": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "packages/nextjs/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/fast-glob": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "packages/nextjs/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/fast-redact": { + "version": "3.5.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/fastparse": { + "version": "1.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "packages/nextjs/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/nextjs/node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/filter-obj": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "packages/nextjs/node_modules/flatted": { + "version": "3.3.1", + "dev": true, + "license": "ISC" + }, + "packages/nextjs/node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "packages/nextjs/node_modules/foreground-child": { + "version": "3.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/fraction.js": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "packages/nextjs/node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/function.prototype.name": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/get-intrinsic": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/get-nonce": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/get-port-please": { + "version": "3.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/get-stream": { + "version": "8.0.1", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/get-symbol-description": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/get-tsconfig": { + "version": "4.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "packages/nextjs/node_modules/glob": { + "version": "10.4.3", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/nextjs/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/globalthis": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/goober": { + "version": "2.1.14", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "packages/nextjs/node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/graphql": { + "version": "16.9.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "packages/nextjs/node_modules/h3": { + "version": "1.12.0", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.1.0", + "crossws": "^0.2.4", + "defu": "^6.1.4", + "destr": "^2.0.3", + "iron-webcrypto": "^1.1.1", + "ohash": "^1.1.3", + "radix3": "^1.1.2", + "ufo": "^1.5.3", + "uncrypto": "^0.1.3", + "unenv": "^1.9.0" + } + }, + "packages/nextjs/node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/has-property-descriptors": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/has-proto": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/hey-listen": { + "version": "1.0.8", + "license": "MIT" + }, + "packages/nextjs/node_modules/http-shutdown": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "packages/nextjs/node_modules/human-signals": { + "version": "5.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "packages/nextjs/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/idb-keyval": { + "version": "6.2.1", + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "packages/nextjs/node_modules/ignore": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "packages/nextjs/node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "packages/nextjs/node_modules/internal-slot": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/invariant": { + "version": "2.2.4", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "packages/nextjs/node_modules/iron-webcrypto": { + "version": "1.2.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "packages/nextjs/node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-array-buffer": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-async-function": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-core-module": { + "version": "2.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-data-view": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-docker": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/is-finalizationregistry": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-inside-container": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/is-map": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-negative-zero": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "packages/nextjs/node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-set": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-stream": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-typed-array": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/is-weakmap": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-weakset": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/is-wsl": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/is64bit": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/nextjs/node_modules/isows": { + "version": "1.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "packages/nextjs/node_modules/iterator.prototype": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "packages/nextjs/node_modules/jackspeak": { + "version": "3.4.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "packages/nextjs/node_modules/javascript-natural-sort": { + "version": "0.7.1", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/jiti": { + "version": "1.21.6", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "packages/nextjs/node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/jsbi": { + "version": "3.2.5", + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/json-rpc-engine": { + "version": "6.1.0", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/nextjs/node_modules/json-rpc-engine/node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/nextjs/node_modules/json-rpc-random-id": { + "version": "1.0.1", + "license": "ISC" + }, + "packages/nextjs/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "packages/nextjs/node_modules/jsx-ast-utils": { + "version": "3.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "packages/nextjs/node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "packages/nextjs/node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/language-subtag-registry": { + "version": "0.3.23", + "dev": true, + "license": "CC0-1.0" + }, + "packages/nextjs/node_modules/language-tags": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "packages/nextjs/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/nextjs/node_modules/lilconfig": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "packages/nextjs/node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/listhen": { + "version": "1.7.2", + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": "^0.2.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.10.2", + "http-shutdown": "^1.2.2", + "jiti": "^1.21.0", + "mlly": "^1.6.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.4.0", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "packages/nextjs/node_modules/lit": { + "version": "2.8.0", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "packages/nextjs/node_modules/lit-element": { + "version": "3.3.3", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "packages/nextjs/node_modules/lit-html": { + "version": "2.8.0", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "packages/nextjs/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/lodash.clonedeep": { + "version": "4.5.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "packages/nextjs/node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "packages/nextjs/node_modules/lru-cache": { + "version": "10.3.1", + "license": "ISC", + "engines": { + "node": ">=18" + } + }, + "packages/nextjs/node_modules/media-query-parser": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "packages/nextjs/node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/micro-ftch": { + "version": "0.3.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/micromatch": { + "version": "4.0.7", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "packages/nextjs/node_modules/mime": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/nextjs/node_modules/mimic-fn": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/minipass": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "packages/nextjs/node_modules/mlly": { + "version": "1.7.1", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "packages/nextjs/node_modules/modern-ahocorasick": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/motion": { + "version": "10.16.2", + "license": "MIT", + "dependencies": { + "@motionone/animation": "^10.15.1", + "@motionone/dom": "^10.16.2", + "@motionone/svelte": "^10.16.2", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "@motionone/vue": "^10.16.2" + } + }, + "packages/nextjs/node_modules/mri": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/multiformats": { + "version": "9.9.0", + "license": "(Apache-2.0 AND MIT)" + }, + "packages/nextjs/node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "packages/nextjs/node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "packages/nextjs/node_modules/napi-wasm": { + "version": "1.1.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/natural-compare-lite": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/next": { + "version": "14.2.4", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.4", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.4", + "@next/swc-darwin-x64": "14.2.4", + "@next/swc-linux-arm64-gnu": "14.2.4", + "@next/swc-linux-arm64-musl": "14.2.4", + "@next/swc-linux-x64-gnu": "14.2.4", + "@next/swc-linux-x64-musl": "14.2.4", + "@next/swc-win32-arm64-msvc": "14.2.4", + "@next/swc-win32-ia32-msvc": "14.2.4", + "@next/swc-win32-x64-msvc": "14.2.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/next-themes": { + "version": "0.2.1", + "license": "MIT", + "peerDependencies": { + "next": "*", + "react": "*", + "react-dom": "*" + } + }, + "packages/nextjs/node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "packages/nextjs/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/node-fetch-native": { + "version": "1.6.4", + "license": "MIT" + }, + "packages/nextjs/node_modules/node-forge": { + "version": "1.3.1", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "packages/nextjs/node_modules/node-releases": { + "version": "2.0.14", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/normalize-range": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/npm-run-path": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/nprogress": { + "version": "0.2.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/object-hash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/object-inspect": { + "version": "1.13.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/object-is": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/object.assign": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/object.entries": { + "version": "1.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/object.fromentries": { + "version": "2.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/object.groupby": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/object.hasown": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/object.values": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/ofetch": { + "version": "1.3.4", + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.3", + "ufo": "^1.5.3" + } + }, + "packages/nextjs/node_modules/ohash": { + "version": "1.1.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/on-exit-leak-free": { + "version": "0.2.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/onetime": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/nextjs/node_modules/outdent": { + "version": "0.8.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/package-json-from-dist": { + "version": "1.0.0", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "packages/nextjs/node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/pathe": { + "version": "1.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/picocolors": { + "version": "1.0.1", + "license": "ISC" + }, + "packages/nextjs/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "packages/nextjs/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/pino": { + "version": "7.11.0", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "packages/nextjs/node_modules/pino-abstract-transport": { + "version": "0.5.0", + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "packages/nextjs/node_modules/pino-std-serializers": { + "version": "4.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/pirates": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "packages/nextjs/node_modules/pkg-types": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "packages/nextjs/node_modules/pngjs": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "packages/nextjs/node_modules/pony-cause": { + "version": "2.1.11", + "license": "0BSD", + "engines": { + "node": ">=12.0.0" + } + }, + "packages/nextjs/node_modules/possible-typed-array-names": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/postcss": { + "version": "8.4.39", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "packages/nextjs/node_modules/postcss-import": { + "version": "15.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "packages/nextjs/node_modules/postcss-js": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "packages/nextjs/node_modules/postcss-load-config": { + "version": "4.0.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "packages/nextjs/node_modules/postcss-nested": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "packages/nextjs/node_modules/postcss-selector-parser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/preact": { + "version": "10.22.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "packages/nextjs/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/nextjs/node_modules/prettier": { + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "packages/nextjs/node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "packages/nextjs/node_modules/process-warning": { + "version": "1.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "packages/nextjs/node_modules/proxy-compare": { + "version": "2.5.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/qrcode": { + "version": "1.5.3", + "license": "MIT", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "packages/nextjs/node_modules/qrcode.react": { + "version": "3.1.0", + "license": "ISC", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "packages/nextjs/node_modules/query-string": { + "version": "7.1.3", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "packages/nextjs/node_modules/quick-format-unescaped": { + "version": "4.0.4", + "license": "MIT" + }, + "packages/nextjs/node_modules/radix3": { + "version": "1.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/react": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/react-copy-to-clipboard": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "copy-to-clipboard": "^3.3.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": "^15.3.0 || 16 || 17 || 18" + } + }, + "packages/nextjs/node_modules/react-dom": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "packages/nextjs/node_modules/react-hot-toast": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "goober": "^2.1.10" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "packages/nextjs/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/react-remove-scroll": { + "version": "2.5.7", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/react-remove-scroll-bar/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/react-remove-scroll/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/react-style-singleton": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/react-style-singleton/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/read-cache": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "packages/nextjs/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "packages/nextjs/node_modules/real-require": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "packages/nextjs/node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/regenerator-runtime": { + "version": "0.14.1", + "license": "MIT" + }, + "packages/nextjs/node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/require-main-filename": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/nextjs/node_modules/resolve": { + "version": "1.22.8", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "packages/nextjs/node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "packages/nextjs/node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/safe-regex-test": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/safe-stable-stringify": { + "version": "2.4.3", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "packages/nextjs/node_modules/scheduler": { + "version": "0.23.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "packages/nextjs/node_modules/semver": { + "version": "7.6.2", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/nextjs/node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "packages/nextjs/node_modules/set-function-length": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/set-function-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/side-channel": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/nextjs/node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/sonic-boom": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "packages/nextjs/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/source-map-js": { + "version": "1.2.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/split-on-first": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/split2": { + "version": "4.2.0", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "packages/nextjs/node_modules/std-env": { + "version": "3.7.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/stream-shift": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/streamsearch": { + "version": "1.1.0", + "engines": { + "node": ">=10.0.0" + } + }, + "packages/nextjs/node_modules/strict-uri-encode": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "packages/nextjs/node_modules/string.prototype.includes": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "packages/nextjs/node_modules/string.prototype.matchall": { + "version": "4.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/string.prototype.trim": { + "version": "1.2.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/string.prototype.trimend": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/strip-final-newline": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/styled-jsx": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/sucrase": { + "version": "3.35.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "packages/nextjs/node_modules/superstruct": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/system-architecture": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/tailwindcss": { + "version": "3.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/nextjs/node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "packages/nextjs/node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "packages/nextjs/node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "packages/nextjs/node_modules/thread-stream": { + "version": "0.15.2", + "license": "MIT", + "dependencies": { + "real-require": "^0.1.0" + } + }, + "packages/nextjs/node_modules/tiny-invariant": { + "version": "1.3.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/tiny-warning": { + "version": "1.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "packages/nextjs/node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "packages/nextjs/node_modules/toformat": { + "version": "2.0.0", + "license": "MIT" + }, + "packages/nextjs/node_modules/toggle-selection": { + "version": "1.0.6", + "license": "MIT" + }, + "packages/nextjs/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/ts-api-utils": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "packages/nextjs/node_modules/ts-interface-checker": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0" + }, + "packages/nextjs/node_modules/tsconfig-paths": { + "version": "3.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "packages/nextjs/node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "packages/nextjs/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "packages/nextjs/node_modules/type-fest": { + "version": "4.21.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/typed-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "packages/nextjs/node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/typed-array-length": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "packages/nextjs/node_modules/typescript": { + "version": "5.5.3", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "packages/nextjs/node_modules/ua-parser-js": { + "version": "1.0.38", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } + }, + "packages/nextjs/node_modules/ufo": { + "version": "1.5.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/uint8arrays": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "packages/nextjs/node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/uncrypto": { + "version": "0.1.3", + "license": "MIT" + }, + "packages/nextjs/node_modules/unenv": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.3", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.1", + "pathe": "^1.1.1" + } + }, + "packages/nextjs/node_modules/unstorage": { + "version": "1.10.2", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^3.6.0", + "destr": "^2.0.3", + "h3": "^1.11.1", + "listhen": "^1.7.2", + "lru-cache": "^10.2.0", + "mri": "^1.2.0", + "node-fetch-native": "^1.6.2", + "ofetch": "^1.3.3", + "ufo": "^1.4.0" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.5.0", + "@azure/cosmos": "^4.0.0", + "@azure/data-tables": "^13.2.2", + "@azure/identity": "^4.0.1", + "@azure/keyvault-secrets": "^4.8.0", + "@azure/storage-blob": "^12.17.0", + "@capacitor/preferences": "^5.0.7", + "@netlify/blobs": "^6.5.0 || ^7.0.0", + "@planetscale/database": "^1.16.0", + "@upstash/redis": "^1.28.4", + "@vercel/kv": "^1.0.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.3.2" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/untun": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "packages/nextjs/node_modules/update-browserslist-db": { + "version": "1.1.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "packages/nextjs/node_modules/uqr": { + "version": "0.1.2", + "license": "MIT" + }, + "packages/nextjs/node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "packages/nextjs/node_modules/use-callback-ref": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/use-callback-ref/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/use-debounce": { + "version": "8.0.4", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "packages/nextjs/node_modules/use-sidecar": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/use-sidecar/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "packages/nextjs/node_modules/use-sync-external-store": { + "version": "1.2.2", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "packages/nextjs/node_modules/usehooks-ts": { + "version": "2.16.0", + "license": "MIT", + "dependencies": { + "lodash.debounce": "^4.0.8" + }, + "engines": { + "node": ">=16.15.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "packages/nextjs/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "packages/nextjs/node_modules/valtio": { + "version": "1.11.2", + "license": "MIT", + "dependencies": { + "proxy-compare": "2.5.1", + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/valtio/node_modules/use-sync-external-store": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "packages/nextjs/node_modules/viem": { + "version": "1.19.9", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/viem/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/viem/node_modules/@scure/bip32": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/viem/node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/viem/node_modules/@scure/bip39": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/viem/node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/nextjs/node_modules/viem/node_modules/abitype": { + "version": "0.9.8", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/wagmi": { + "version": "1.4.12", + "funding": [ + { + "type": "gitcoin", + "url": "https://wagmi.sh/gitcoin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "dependencies": { + "@tanstack/query-sync-storage-persister": "^4.27.1", + "@tanstack/react-query": "^4.28.0", + "@tanstack/react-query-persist-client": "^4.28.0", + "@wagmi/core": "1.4.12", + "abitype": "0.8.7", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "typescript": ">=5.0.4", + "viem": ">=0.3.35" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/wagmi/node_modules/@tanstack/react-query": { + "version": "4.36.1", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "4.36.1", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/wagmi/node_modules/@tanstack/react-query-persist-client": { + "version": "4.36.1", + "license": "MIT", + "dependencies": { + "@tanstack/query-persist-client-core": "4.36.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^4.36.1" + } + }, + "packages/nextjs/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "packages/nextjs/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "packages/nextjs/node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "packages/nextjs/node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/which-builtin-type": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/which-collection": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/which-module": { + "version": "2.0.1", + "license": "ISC" + }, + "packages/nextjs/node_modules/which-typed-array": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "packages/nextjs/node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "packages/nextjs/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/nextjs/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/nextjs/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/nextjs/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/nextjs/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/nextjs/node_modules/ws": { + "version": "8.13.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "packages/nextjs/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "packages/nextjs/node_modules/yaml": { + "version": "2.4.5", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "packages/nextjs/node_modules/yargs": { + "version": "15.4.1", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/yargs-parser": { + "version": "18.1.3", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "packages/nextjs/node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/nextjs/node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "packages/nextjs/node_modules/zustand": { + "version": "4.5.4", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "packages/nextjs/node_modules/zustand/node_modules/use-sync-external-store": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "packages/nextjs/node_modules/@next/swc-darwin-arm64": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz", + "integrity": "sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-darwin-x64": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz", + "integrity": "sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz", + "integrity": "sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz", + "integrity": "sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz", + "integrity": "sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz", + "integrity": "sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz", + "integrity": "sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "packages/nextjs/node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz", + "integrity": "sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/packages/foundry/bin/contracts/hooks/LPIncentivizedHook-solc-output.json b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook-solc-output.json new file mode 100644 index 00000000..9db3d167 --- /dev/null +++ b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook-solc-output.json @@ -0,0 +1,61836 @@ +{ + "contracts": { + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol": { + "LPIncentivizedHook": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "allowedFactory", + "type": "address" + }, + { + "internalType": "address", + "name": "lpRWD", + "type": "address" + }, + { + "internalType": "address", + "name": "trustedRouter", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "amountBaseLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "timeBaseLiquidity", + "type": "bool" + } + ], + "internalType": "struct LPIncentivizedHook.LPIncentiveFactor", + "name": "_lpIncentiveFactor", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderIsNotVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hooksContract", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "LPIncentivizedHookRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "LPAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "RewardDistributed", + "type": "event" + }, + { + "inputs": [], + "name": "activeAmountBaseLiquidityParameters", + "outputs": [ + { + "internalType": "uint256", + "name": "mediumLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityAmountRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountRewardFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeIncentiveFactor", + "outputs": [ + { + "internalType": "bool", + "name": "amountBaseLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "timeBaseLiquidity", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeTimeBaseLiquidityParameters", + "outputs": [ + { + "internalType": "uint256", + "name": "mediumLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityTimeRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeRewardFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getHookFlags", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + } + ], + "internalType": "struct HookFlags", + "name": "hookFlags", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "name": "lpInfos", + "outputs": [ + { + "internalType": "uint256", + "name": "totalLiquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidityStartTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "amountsInScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsInRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onAfterAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "hookAdjustedAmountsInRaw", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOutRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountInScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenInBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenOutBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AfterSwapParams", + "name": "", + "type": "tuple" + } + ], + "name": "onAfterSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "onBeforeSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "onComputeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "", + "type": "tuple" + } + ], + "name": "onRegister", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "mediumLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityAmountRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountRewardFee", + "type": "uint256" + } + ], + "internalType": "struct LPIncentivizedHook.AmountBaseLiquidityParameters", + "name": "_amountBaseLiquidityParameters", + "type": "tuple" + } + ], + "name": "setAmountBaseLiquidityParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "mediumLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityTimeRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeRewardFee", + "type": "uint256" + } + ], + "internalType": "struct LPIncentivizedHook.TimeBaseLiquidityParameters", + "name": "_timeBaseLiquidityParameters", + "type": "tuple" + } + ], + "name": "setTimeBaseLiquidityParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Uses to reward Liquidity Providers (LPs) based on multiple factors", + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ], + "SenderIsNotVault(address)": [ + { + "params": { + "sender": "The account attempting to call a permissioned function" + } + } + ] + }, + "events": { + "LPIncentivizedHookRegistered(address,address,address)": { + "details": "If the registration fails the call will revert, so there will be no event.", + "params": { + "factory": "The factory (must be the allowed factory, or the call will revert)", + "hooksContract": "This contract", + "pool": "The pool on which the hook was registered" + } + }, + "RewardDistributed(address,uint256)": { + "details": "Event if rewards distributed successfully.", + "params": { + "LPAddress": "Liquidity provider address", + "reward": "Earn rewards" + } + } + }, + "kind": "dev", + "methods": { + "getHookFlags()": { + "details": "The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \"mandatory\" hook.", + "returns": { + "hookFlags": "Flags indicating which hooks the contract supports" + } + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsInRaw": "Actual amounts of tokens added, sorted in token registration order", + "amountsInScaled18": "Actual amounts of tokens added, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountOut": "Amount of pool tokens minted", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "hookAdjustedAmountsInRaw": "New amountsInRaw, potentially modified by the hook", + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "details": "Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "bptAmountOut": "Amount of pool tokens minted during initialization", + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool accepts the initialization results" + } + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsOutRaw": "Actual amount of tokens to receive, sorted in token registration order", + "amountsOutScaled18": "Scaled amount of tokens to receive, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountIn": "Amount of pool tokens to burn", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "New amountsOutRaw, potentially modified by the hook" + } + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "details": "Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see above for struct definition)" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "New amount calculated, potentially modified by the hook" + } + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "maxAmountsInScaled18": "Maximum amounts of input tokens", + "minBptAmountOut": "Minimum amount of output pool tokens", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeInitialize(uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool wishes to proceed with initialization" + } + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "maxBptAmountIn": "Maximum amount of input pool tokens", + "minAmountsOutScaled18": "Minimum output amounts, sorted in token registration order", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "details": "Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "details": "Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)", + "staticSwapFeePercentage": "18-decimal FP value of the static swap fee percentage, for reference" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "Value of the swap fee percentage, as an 18-decimal FP value" + } + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "details": "Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.", + "params": { + "factory": "Address of the pool factory (contract deploying the pool)", + "liquidityManagement": "Liquidity management flags indicating which functions are enabled", + "pool": "Address of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + }, + "returns": { + "_0": "success True if the hook allowed the registration, false otherwise" + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))": { + "details": "Sets the Amount based liquidity rewards parameters for the hook This function must be permissioned.", + "params": { + "_amountBaseLiquidityParameters": "The amount base liquidity parameters" + } + }, + "setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))": { + "details": "Sets the Time based liquidity rewards parameters for the hook This function must be permissioned.", + "params": { + "_timeBaseLiquidityParameters": "The time base liquidity parameters" + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": { + "abi_decode_address_fromMemory": { + "entryPoint": 428, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_bool_fromMemory": { + "entryPoint": 448, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [], + "linkReferences": {}, + "object": "610100604052346101a85760405161128c38819003601f8101601f191683016001600160401b03811184821017610194578392829160405283398101039060c082126101a8578051906001600160a01b03821682036101a857610064602082016101ac565b92610071604083016101ac565b906040610080606085016101ac565b91607f1901126101a85760408051939084016001600160401b03811185821017610194576100c29160a0916040526100ba608082016101c0565b8652016101c0565b93602084019485526080523315610181575f8054336001600160a01b0319821681178355604051979290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360a05260c05260018060a01b031660e0525115159060ff61ff006001549251151560081b1692169061ffff191617176001556110be90816101ce8239608051818181610dcd0152610f8f015260a05181610a28015260c05181610d57015260e051815050f35b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b03821682036101a857565b519081151582036101a85756fe6080806040526004361015610012575f80fd5b5f3560e01c90816308a13d6a14610b5e575080630b89f1821461095a57806318b6eb55146109195780631c149e28146108c95780632754888d146107d157806338be241d1461078157806345421ec7146107345780635211fa77146106fb5780636683635f1461064d5780636c55c7471461061f578063715018a6146105c85780638da5cb5b146105a1578063976907cc14610495578063a0e8f5ac1461044c578063b389771d146103e3578063ba5f9f401461034b578063c9e6e6ca14610312578063d77153a71461022e578063ec93c2d2146101815763f2fde38b146100f8575f80fd5b3461017d57602036600319011261017d57610111610b94565b610119610fd2565b6001600160a01b0316801561016a575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b3461017d57608036600319011261017d5761019b36610cc5565b6101a3610fd2565b60ff60015416156101cc5780516002556020810151600355604081015160045560600151600555005b60405162461bcd60e51b815260206004820152603460248201527f416d6f756e7420426173652052657761726473206973206e6f7420636f6e666960448201527333bab932b2103337b9103a3434b9902437b7b59760611b6064820152608490fd5b3461017d575f36600319011261017d576040516101408101908082106001600160401b038311176102fe57610140916040525f815260208101905f825260408101905f8252606081015f8152608082015f815260a083015f815260c08401915f835260e08501936101206101008701965f885201966001865260018852604051985f8a5251151560208a015251151560408901525115156060880152511515608087015251151560a086015251151560c085015251151560e0840152511515610100830152511515610120820152f35b634e487b7160e01b5f52604160045260245ffd5b3461017d575f36600319011261017d57600254600354600454600554604080519485526020850193909352918301526060820152608090f35b3461017d5760e036600319011261017d57610364610b94565b5061036d610baa565b506004604435101561017d576084356001600160401b03811161017d57610398903690600401610c13565b5060a4356001600160401b03811161017d576103b8903690600401610c13565b5060c4356001600160401b03811161017d576103d8903690600401610c70565b5060206040515f8152f35b3461017d57604036600319011261017d576103fc610b94565b610404610baa565b9060018060a01b03165f52600a60205260405f209060018060a01b03165f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b3461017d57606036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d57610485610baa565b50604080515f8082526020820152f35b3461017d5761010036600319011261017d576104af610b94565b6104b7610baa565b6005604435101561017d576064356001600160401b03811161017d576104e1903690600401610c13565b506084356001600160401b03811161017d57610501903690600401610c13565b9060c4356001600160401b03811161017d57610521903690600401610c13565b5060e435926001600160401b03841161017d57610545610553943690600401610c70565b5061054e610f8d565b610d46565b906040519182916040830190151583526040602084015281518091526020606084019201905f5b818110610588575050500390f35b825184528594506020938401939092019160010161057a565b3461017d575f36600319011261017d575f546040516001600160a01b039091168152602090f35b3461017d575f36600319011261017d576105e0610fd2565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017d575f36600319011261017d57604060015460ff8251918181161515835260081c1615156020820152f35b3461017d57608036600319011261017d5761066736610cc5565b61066f610fd2565b60ff60015460081c161561069b5780516006556020810151600755604081015160085560600151600955005b60405162461bcd60e51b815260206004820152603260248201527f54696d6520426173652052657761726473206973206e6f7420636f6e666967756044820152713932b2103337b9103a3434b9902437b7b59760711b6064820152608490fd5b3461017d57604036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d576103d8610baa565b3461017d5760e036600319011261017d5761074d610b94565b50610756610baa565b506005604435101561017d576064356001600160401b03811161017d57610398903690600401610c13565b3461017d57606036600319011261017d576004356001600160401b03811161017d576107b1903690600401610c13565b506044356001600160401b03811161017d576103d8903690600401610c70565b3461017d5761010036600319011261017d576107eb610b94565b506107f4610baa565b506004604435101561017d576084356001600160401b03811161017d5761081f903690600401610c13565b5060a4356001600160401b03811161017d5761083f903690600401610c13565b60c4356001600160401b03811161017d5761085e903690600401610c13565b5060e4356001600160401b03811161017d5761087e903690600401610c70565b506040518091604082015f83526040602084015281518091526020606084019201905f5b8181106108b0575050500390f35b82518452859450602093840193909201916001016108a2565b3461017d57604036600319011261017d576004356001600160401b03811161017d576108f9903690600401610c13565b506024356001600160401b03811161017d576103d8903690600401610c70565b3461017d57602036600319011261017d576004356001600160401b03811161017d5761018090600319903603011261017d57604080515f8082526020820152f35b3461017d5760e036600319011261017d57610973610b94565b61097b610baa565b906044356001600160401b03811161017d573660238201121561017d57806004013590602460206109ab84610bfc565b6109b86040519182610bdb565b848152019260071b8201019036821161017d57602401915b818310610ae157505050608060631936011261017d576109ee610f8d565b604051916001600160a01b0390811691168181307fcbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b45f80a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681149182610a66575b6020836040519015158152f35b636634b75360e01b8452600484015260209150829060249082905afa8015610ad6575f90610a9a575b602091508280610a59565b506020813d602011610ace575b81610ab460209383610bdb565b8101031261017d5751801515810361017d57602090610a8f565b3d9150610aa7565b6040513d5f823e3d90fd5b60808336031261017d5760405190610af882610bc0565b83356001600160a01b038116810361017d5782526020840135600281101561017d57602083015260408401356001600160a01b038116810361017d576040830152606084013590811515820361017d5782602092606060809501528152019201916109d0565b3461017d575f36600319011261017d57600654600754600854600954928452602084019190915260408301526060820152608090f35b600435906001600160a01b038216820361017d57565b602435906001600160a01b038216820361017d57565b608081019081106001600160401b038211176102fe57604052565b90601f801991011681019081106001600160401b038211176102fe57604052565b6001600160401b0381116102fe5760051b60200190565b9080601f8301121561017d578135610c2a81610bfc565b92610c386040519485610bdb565b81845260208085019260051b82010192831161017d57602001905b828210610c605750505090565b8135815260209182019101610c53565b81601f8201121561017d578035906001600160401b0382116102fe5760405192610ca4601f8401601f191660200185610bdb565b8284526020838301011161017d57815f926020809301838601378301015290565b608090600319011261017d5760405190610cde82610bc0565b6004358252602435602083015260443560408301526064356060830152565b8051821015610d115760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211610d3257565b634e487b7160e01b5f52601160045260245ffd5b9192916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168103610f8657602060049160405192838092632f00f5ad60e11b82525afa908115610ad6575f91610f44575b5060405163ca4f280360e01b81526001600160a01b039283166004820152915f90839060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610ad6575f92610ea1575b505f91825b8551841015610e9757610e85600191610e1b8689610cfd565b51838060a01b0386165f52600a60205260405f20848060a01b03610e3f8988610cfd565b5116858060a01b03165f52602052610e6260405f209182548015610e8d57610d25565b9055610e7f838060a01b03610e778887610cfd565b511686610ff8565b90610d25565b930192610e02565b4287850155610d25565b5050505060019190565b9091503d805f833e610eb38183610bdb565b81019060208183031261017d578051906001600160401b03821161017d57019080601f8301121561017d57815190610eea82610bfc565b92610ef86040519485610bdb565b82845260208085019360051b82010191821161017d57602001915b818310610f2457505050905f610dfd565b82516001600160a01b038116810361017d57815260209283019201610f13565b90506020813d602011610f7e575b81610f5f60209383610bdb565b8101031261017d57516001600160a01b038116810361017d575f610da3565b3d9150610f52565b50505f9190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610fbf57565b63089676d560e01b5f523360045260245ffd5b5f546001600160a01b03163303610fe557565b63118cdaa760e01b5f523360045260245ffd5b60ff60015416156110825760018060a01b03165f52600a60205260405f209060018060a01b03165f5260205260405f20604051606081018181106001600160401b038211176102fe576040526040600283549384845260018101546020850152015491015260035481115f1461106f575060055490565b600254101561107e5760045490565b5f90565b50505f9056fea2646970667358221220d1a194580747f948aa68dfadb2d073ae9d6c58ba71129ac634f6fba9daee73ba64736f6c634300081b0033", + "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1A8 JUMPI PUSH1 0x40 MLOAD PUSH2 0x128C CODESIZE DUP2 SWAP1 SUB PUSH1 0x1F DUP2 ADD PUSH1 0x1F NOT AND DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0x194 JUMPI DUP4 SWAP3 DUP3 SWAP2 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SWAP1 PUSH1 0xC0 DUP3 SLT PUSH2 0x1A8 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1A8 JUMPI PUSH2 0x64 PUSH1 0x20 DUP3 ADD PUSH2 0x1AC JUMP JUMPDEST SWAP3 PUSH2 0x71 PUSH1 0x40 DUP4 ADD PUSH2 0x1AC JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH2 0x80 PUSH1 0x60 DUP6 ADD PUSH2 0x1AC JUMP JUMPDEST SWAP2 PUSH1 0x7F NOT ADD SLT PUSH2 0x1A8 JUMPI PUSH1 0x40 DUP1 MLOAD SWAP4 SWAP1 DUP5 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP6 DUP3 LT OR PUSH2 0x194 JUMPI PUSH2 0xC2 SWAP2 PUSH1 0xA0 SWAP2 PUSH1 0x40 MSTORE PUSH2 0xBA PUSH1 0x80 DUP3 ADD PUSH2 0x1C0 JUMP JUMPDEST DUP7 MSTORE ADD PUSH2 0x1C0 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP5 ADD SWAP5 DUP6 MSTORE PUSH1 0x80 MSTORE CALLER ISZERO PUSH2 0x181 JUMPI PUSH0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP3 AND DUP2 OR DUP4 SSTORE PUSH1 0x40 MLOAD SWAP8 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE MLOAD ISZERO ISZERO SWAP1 PUSH1 0xFF PUSH2 0xFF00 PUSH1 0x1 SLOAD SWAP3 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP3 AND SWAP1 PUSH2 0xFFFF NOT AND OR OR PUSH1 0x1 SSTORE PUSH2 0x10BE SWAP1 DUP2 PUSH2 0x1CE DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0xDCD ADD MSTORE PUSH2 0xF8F ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0xA28 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0xD57 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1A8 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1A8 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x8A13D6A EQ PUSH2 0xB5E JUMPI POP DUP1 PUSH4 0xB89F182 EQ PUSH2 0x95A JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x919 JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x8C9 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x7D1 JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x6FB JUMPI DUP1 PUSH4 0x6683635F EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x6C55C747 EQ PUSH2 0x61F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5A1 JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0xB389771D EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0x34B JUMPI DUP1 PUSH4 0xC9E6E6CA EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xEC93C2D2 EQ PUSH2 0x181 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x111 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x119 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x16A JUMPI PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP4 OR DUP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 STOP JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x19B CALLDATASIZE PUSH2 0xCC5 JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND ISZERO PUSH2 0x1CC JUMPI DUP1 MLOAD PUSH1 0x2 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x3 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x5 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x34 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416D6F756E7420426173652052657761726473206973206E6F7420636F6E6669 PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x33BAB932B2103337B9103A3434B9902437B7B597 PUSH1 0x61 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD PUSH2 0x140 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT OR PUSH2 0x2FE JUMPI PUSH2 0x140 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x40 DUP2 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x60 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0xA0 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP5 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xE0 DUP6 ADD SWAP4 PUSH2 0x120 PUSH2 0x100 DUP8 ADD SWAP7 PUSH0 DUP9 MSTORE ADD SWAP7 PUSH1 0x1 DUP7 MSTORE PUSH1 0x1 DUP9 MSTORE PUSH1 0x40 MLOAD SWAP9 PUSH0 DUP11 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE MLOAD ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE MLOAD ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x364 PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x36D PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x398 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3B8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x3FC PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xBAA JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x60 PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x1 DUP3 ADD SLOAD SWAP2 ADD SLOAD SWAP1 PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH1 0xE0 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH2 0x485 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x4AF PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x4B7 PUSH2 0xBAA JUMP JUMPDEST PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x4E1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x501 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x521 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT PUSH2 0x17D JUMPI PUSH2 0x545 PUSH2 0x553 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH2 0x54E PUSH2 0xF8D JUMP JUMPDEST PUSH2 0xD46 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x40 DUP4 ADD SWAP1 ISZERO ISZERO DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x60 DUP5 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x588 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP6 SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x57A JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x5E0 PUSH2 0xFD2 JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 PUSH1 0x1 SLOAD PUSH1 0xFF DUP3 MLOAD SWAP2 DUP2 DUP2 AND ISZERO ISZERO DUP4 MSTORE PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x667 CALLDATASIZE PUSH2 0xCC5 JUMP JUMPDEST PUSH2 0x66F PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD PUSH1 0x8 SHR AND ISZERO PUSH2 0x69B JUMPI DUP1 MLOAD PUSH1 0x6 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x7 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x8 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x9 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54696D6520426173652052657761726473206973206E6F7420636F6E66696775 PUSH1 0x44 DUP3 ADD MSTORE PUSH18 0x3932B2103337B9103A3434B9902437B7B597 PUSH1 0x71 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH1 0xE0 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH2 0x3D8 PUSH2 0xBAA JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x74D PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x756 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x398 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x7B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x7EB PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x7F4 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x81F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x83F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x85E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x87E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x40 DUP3 ADD PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x60 DUP5 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x8B0 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP6 SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x8A2 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x8F9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x180 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x973 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x97B PUSH2 0xBAA JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x9AB DUP5 PUSH2 0xBFC JUMP JUMPDEST PUSH2 0x9B8 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xBDB JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x17D JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xAE1 JUMPI POP POP POP PUSH1 0x80 PUSH1 0x63 NOT CALLDATASIZE ADD SLT PUSH2 0x17D JUMPI PUSH2 0x9EE PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND DUP2 DUP2 ADDRESS PUSH32 0xCBD5D637D0DD0263537EF5C2432253BD1A309FC20240914E09AABAF6325231B4 PUSH0 DUP1 LOG4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ SWAP2 DUP3 PUSH2 0xA66 JUMPI JUMPDEST PUSH1 0x20 DUP4 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH4 0x6634B753 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 SWAP2 POP DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL DUP1 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP1 PUSH2 0xA9A JUMPI JUMPDEST PUSH1 0x20 SWAP2 POP DUP3 DUP1 PUSH2 0xA59 JUMP JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xACE JUMPI JUMPDEST DUP2 PUSH2 0xAB4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x17D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x17D JUMPI PUSH1 0x20 SWAP1 PUSH2 0xA8F JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAA7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xAF8 DUP3 PUSH2 0xBC0 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x17D JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x60 PUSH1 0x80 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x9D0 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x9 SLOAD SWAP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x17D JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x17D JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2FE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP2 CALLDATALOAD PUSH2 0xC2A DUP2 PUSH2 0xBFC JUMP JUMPDEST SWAP3 PUSH2 0xC38 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x17D JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC60 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC53 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x2FE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xCA4 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x17D JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xCDE DUP3 PUSH2 0xBC0 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD DUP3 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xD11 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xD32 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP2 SUB PUSH2 0xF86 JUMPI PUSH1 0x20 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x2F00F5AD PUSH1 0xE1 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP2 PUSH2 0xF44 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP3 PUSH2 0xEA1 JUMPI JUMPDEST POP PUSH0 SWAP2 DUP3 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xE97 JUMPI PUSH2 0xE85 PUSH1 0x1 SWAP2 PUSH2 0xE1B DUP7 DUP10 PUSH2 0xCFD JUMP JUMPDEST MLOAD DUP4 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP5 DUP1 PUSH1 0xA0 SHL SUB PUSH2 0xE3F DUP10 DUP9 PUSH2 0xCFD JUMP JUMPDEST MLOAD AND DUP6 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xE62 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD DUP1 ISZERO PUSH2 0xE8D JUMPI PUSH2 0xD25 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xE7F DUP4 DUP1 PUSH1 0xA0 SHL SUB PUSH2 0xE77 DUP9 DUP8 PUSH2 0xCFD JUMP JUMPDEST MLOAD AND DUP7 PUSH2 0xFF8 JUMP JUMPDEST SWAP1 PUSH2 0xD25 JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xE02 JUMP JUMPDEST TIMESTAMP DUP8 DUP6 ADD SSTORE PUSH2 0xD25 JUMP JUMPDEST POP POP POP POP PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xEB3 DUP2 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x17D JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x17D JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP2 MLOAD SWAP1 PUSH2 0xEEA DUP3 PUSH2 0xBFC JUMP JUMPDEST SWAP3 PUSH2 0xEF8 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x17D JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xF24 JUMPI POP POP POP SWAP1 PUSH0 PUSH2 0xDFD JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xF13 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF7E JUMPI JUMPDEST DUP2 PUSH2 0xF5F PUSH1 0x20 SWAP4 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x17D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI PUSH0 PUSH2 0xDA3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF52 JUMP JUMPDEST POP POP PUSH0 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xFBF JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xFE5 JUMPI JUMP JUMPDEST PUSH4 0x118CDAA7 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND ISZERO PUSH2 0x1082 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE PUSH1 0x40 PUSH1 0x2 DUP4 SLOAD SWAP4 DUP5 DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD SWAP2 ADD MSTORE PUSH1 0x3 SLOAD DUP2 GT PUSH0 EQ PUSH2 0x106F JUMPI POP PUSH1 0x5 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD LT ISZERO PUSH2 0x107E JUMPI PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 LOG1 SWAP5 PC SMOD SELFBALANCE 0xF9 BASEFEE 0xAA PUSH9 0xDFADB2D073AE9D6C58 0xBA PUSH18 0x129AC634F6FBA9DAEE73BA64736F6C634300 ADDMOD SHL STOP CALLER ", + "sourceMap": "1684:8575:0:-:0;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;-1:-1:-1;;1684:8575:0;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;547:14:16;4554:10:0;1311:26:17;1307:97;;-1:-1:-1;1684:8575:0;;4554:10;-1:-1:-1;;;;;;1684:8575:0;;;;;;;;;;4554:10;;-1:-1:-1;;;;;1684:8575:0;;3149:40:17;;-1:-1:-1;3149:40:17;1684:8575:0;4577:32;1684:8575;4620:30;1684:8575;;;;;;4661:22;;1684:8575;;;;;;4694:42;1684:8575;;;;;;;;;;;;;;;;4694:42;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4661:22;1684:8575;;;;;1307:97:17;1361:31;;;-1:-1:-1;1361:31:17;-1:-1:-1;1361:31:17;1684:8575:0;;-1:-1:-1;1361:31:17;1684:8575:0;;;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;1684:8575:0;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;;;;;;;:::o" + }, + "deployedBytecode": { + "functionDebugData": { + "abi_decode_address": { + "entryPoint": 2986, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "abi_decode_address_9269": { + "entryPoint": 2964, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "abi_decode_array_uint256_dyn": { + "entryPoint": 3091, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_bytes": { + "entryPoint": 3184, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_struct_TimeBaseLiquidityParameters": { + "entryPoint": 3269, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_uint256_uint256_uint256_uint256": { + "entryPoint": null, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "array_allocation_size_array_struct_TokenConfig_dyn": { + "entryPoint": 3068, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "checked_add_uint256": { + "entryPoint": 3365, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "finalize_allocation": { + "entryPoint": 3035, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "finalize_allocation_9271": { + "entryPoint": 3008, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "fun_calculateAmountBaseRewards": { + "entryPoint": 4088, + "id": 427, + "parameterSlots": 2, + "returnSlots": 1 + }, + "fun_checkOwner": { + "entryPoint": 4050, + "id": 3195, + "parameterSlots": 0, + "returnSlots": 0 + }, + "fun_ensureOnlyVault": { + "entryPoint": 3981, + "id": 3109, + "parameterSlots": 0, + "returnSlots": 0 + }, + "fun_onAfterAddLiquidity_inner": { + "entryPoint": 3398, + "id": null, + "parameterSlots": 3, + "returnSlots": 2 + }, + "memory_array_index_access_uint256_dyn": { + "entryPoint": 3325, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + } + }, + "generatedSources": [], + "immutableReferences": { + "33": [ + { + "length": 32, + "start": 2600 + } + ], + "35": [ + { + "length": 32, + "start": 3415 + } + ], + "3071": [ + { + "length": 32, + "start": 3533 + }, + { + "length": 32, + "start": 3983 + } + ] + }, + "linkReferences": {}, + "object": "6080806040526004361015610012575f80fd5b5f3560e01c90816308a13d6a14610b5e575080630b89f1821461095a57806318b6eb55146109195780631c149e28146108c95780632754888d146107d157806338be241d1461078157806345421ec7146107345780635211fa77146106fb5780636683635f1461064d5780636c55c7471461061f578063715018a6146105c85780638da5cb5b146105a1578063976907cc14610495578063a0e8f5ac1461044c578063b389771d146103e3578063ba5f9f401461034b578063c9e6e6ca14610312578063d77153a71461022e578063ec93c2d2146101815763f2fde38b146100f8575f80fd5b3461017d57602036600319011261017d57610111610b94565b610119610fd2565b6001600160a01b0316801561016a575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b3461017d57608036600319011261017d5761019b36610cc5565b6101a3610fd2565b60ff60015416156101cc5780516002556020810151600355604081015160045560600151600555005b60405162461bcd60e51b815260206004820152603460248201527f416d6f756e7420426173652052657761726473206973206e6f7420636f6e666960448201527333bab932b2103337b9103a3434b9902437b7b59760611b6064820152608490fd5b3461017d575f36600319011261017d576040516101408101908082106001600160401b038311176102fe57610140916040525f815260208101905f825260408101905f8252606081015f8152608082015f815260a083015f815260c08401915f835260e08501936101206101008701965f885201966001865260018852604051985f8a5251151560208a015251151560408901525115156060880152511515608087015251151560a086015251151560c085015251151560e0840152511515610100830152511515610120820152f35b634e487b7160e01b5f52604160045260245ffd5b3461017d575f36600319011261017d57600254600354600454600554604080519485526020850193909352918301526060820152608090f35b3461017d5760e036600319011261017d57610364610b94565b5061036d610baa565b506004604435101561017d576084356001600160401b03811161017d57610398903690600401610c13565b5060a4356001600160401b03811161017d576103b8903690600401610c13565b5060c4356001600160401b03811161017d576103d8903690600401610c70565b5060206040515f8152f35b3461017d57604036600319011261017d576103fc610b94565b610404610baa565b9060018060a01b03165f52600a60205260405f209060018060a01b03165f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b3461017d57606036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d57610485610baa565b50604080515f8082526020820152f35b3461017d5761010036600319011261017d576104af610b94565b6104b7610baa565b6005604435101561017d576064356001600160401b03811161017d576104e1903690600401610c13565b506084356001600160401b03811161017d57610501903690600401610c13565b9060c4356001600160401b03811161017d57610521903690600401610c13565b5060e435926001600160401b03841161017d57610545610553943690600401610c70565b5061054e610f8d565b610d46565b906040519182916040830190151583526040602084015281518091526020606084019201905f5b818110610588575050500390f35b825184528594506020938401939092019160010161057a565b3461017d575f36600319011261017d575f546040516001600160a01b039091168152602090f35b3461017d575f36600319011261017d576105e0610fd2565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017d575f36600319011261017d57604060015460ff8251918181161515835260081c1615156020820152f35b3461017d57608036600319011261017d5761066736610cc5565b61066f610fd2565b60ff60015460081c161561069b5780516006556020810151600755604081015160085560600151600955005b60405162461bcd60e51b815260206004820152603260248201527f54696d6520426173652052657761726473206973206e6f7420636f6e666967756044820152713932b2103337b9103a3434b9902437b7b59760711b6064820152608490fd5b3461017d57604036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d576103d8610baa565b3461017d5760e036600319011261017d5761074d610b94565b50610756610baa565b506005604435101561017d576064356001600160401b03811161017d57610398903690600401610c13565b3461017d57606036600319011261017d576004356001600160401b03811161017d576107b1903690600401610c13565b506044356001600160401b03811161017d576103d8903690600401610c70565b3461017d5761010036600319011261017d576107eb610b94565b506107f4610baa565b506004604435101561017d576084356001600160401b03811161017d5761081f903690600401610c13565b5060a4356001600160401b03811161017d5761083f903690600401610c13565b60c4356001600160401b03811161017d5761085e903690600401610c13565b5060e4356001600160401b03811161017d5761087e903690600401610c70565b506040518091604082015f83526040602084015281518091526020606084019201905f5b8181106108b0575050500390f35b82518452859450602093840193909201916001016108a2565b3461017d57604036600319011261017d576004356001600160401b03811161017d576108f9903690600401610c13565b506024356001600160401b03811161017d576103d8903690600401610c70565b3461017d57602036600319011261017d576004356001600160401b03811161017d5761018090600319903603011261017d57604080515f8082526020820152f35b3461017d5760e036600319011261017d57610973610b94565b61097b610baa565b906044356001600160401b03811161017d573660238201121561017d57806004013590602460206109ab84610bfc565b6109b86040519182610bdb565b848152019260071b8201019036821161017d57602401915b818310610ae157505050608060631936011261017d576109ee610f8d565b604051916001600160a01b0390811691168181307fcbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b45f80a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681149182610a66575b6020836040519015158152f35b636634b75360e01b8452600484015260209150829060249082905afa8015610ad6575f90610a9a575b602091508280610a59565b506020813d602011610ace575b81610ab460209383610bdb565b8101031261017d5751801515810361017d57602090610a8f565b3d9150610aa7565b6040513d5f823e3d90fd5b60808336031261017d5760405190610af882610bc0565b83356001600160a01b038116810361017d5782526020840135600281101561017d57602083015260408401356001600160a01b038116810361017d576040830152606084013590811515820361017d5782602092606060809501528152019201916109d0565b3461017d575f36600319011261017d57600654600754600854600954928452602084019190915260408301526060820152608090f35b600435906001600160a01b038216820361017d57565b602435906001600160a01b038216820361017d57565b608081019081106001600160401b038211176102fe57604052565b90601f801991011681019081106001600160401b038211176102fe57604052565b6001600160401b0381116102fe5760051b60200190565b9080601f8301121561017d578135610c2a81610bfc565b92610c386040519485610bdb565b81845260208085019260051b82010192831161017d57602001905b828210610c605750505090565b8135815260209182019101610c53565b81601f8201121561017d578035906001600160401b0382116102fe5760405192610ca4601f8401601f191660200185610bdb565b8284526020838301011161017d57815f926020809301838601378301015290565b608090600319011261017d5760405190610cde82610bc0565b6004358252602435602083015260443560408301526064356060830152565b8051821015610d115760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211610d3257565b634e487b7160e01b5f52601160045260245ffd5b9192916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168103610f8657602060049160405192838092632f00f5ad60e11b82525afa908115610ad6575f91610f44575b5060405163ca4f280360e01b81526001600160a01b039283166004820152915f90839060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610ad6575f92610ea1575b505f91825b8551841015610e9757610e85600191610e1b8689610cfd565b51838060a01b0386165f52600a60205260405f20848060a01b03610e3f8988610cfd565b5116858060a01b03165f52602052610e6260405f209182548015610e8d57610d25565b9055610e7f838060a01b03610e778887610cfd565b511686610ff8565b90610d25565b930192610e02565b4287850155610d25565b5050505060019190565b9091503d805f833e610eb38183610bdb565b81019060208183031261017d578051906001600160401b03821161017d57019080601f8301121561017d57815190610eea82610bfc565b92610ef86040519485610bdb565b82845260208085019360051b82010191821161017d57602001915b818310610f2457505050905f610dfd565b82516001600160a01b038116810361017d57815260209283019201610f13565b90506020813d602011610f7e575b81610f5f60209383610bdb565b8101031261017d57516001600160a01b038116810361017d575f610da3565b3d9150610f52565b50505f9190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610fbf57565b63089676d560e01b5f523360045260245ffd5b5f546001600160a01b03163303610fe557565b63118cdaa760e01b5f523360045260245ffd5b60ff60015416156110825760018060a01b03165f52600a60205260405f209060018060a01b03165f5260205260405f20604051606081018181106001600160401b038211176102fe576040526040600283549384845260018101546020850152015491015260035481115f1461106f575060055490565b600254101561107e5760045490565b5f90565b50505f9056fea2646970667358221220d1a194580747f948aa68dfadb2d073ae9d6c58ba71129ac634f6fba9daee73ba64736f6c634300081b0033", + "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x8A13D6A EQ PUSH2 0xB5E JUMPI POP DUP1 PUSH4 0xB89F182 EQ PUSH2 0x95A JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x919 JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x8C9 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x7D1 JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x734 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x6FB JUMPI DUP1 PUSH4 0x6683635F EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0x6C55C747 EQ PUSH2 0x61F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x5C8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5A1 JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x495 JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0xB389771D EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0x34B JUMPI DUP1 PUSH4 0xC9E6E6CA EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xEC93C2D2 EQ PUSH2 0x181 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x111 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x119 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x16A JUMPI PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP4 OR DUP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 STOP JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x19B CALLDATASIZE PUSH2 0xCC5 JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND ISZERO PUSH2 0x1CC JUMPI DUP1 MLOAD PUSH1 0x2 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x3 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x4 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x5 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x34 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416D6F756E7420426173652052657761726473206973206E6F7420636F6E6669 PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x33BAB932B2103337B9103A3434B9902437B7B597 PUSH1 0x61 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD PUSH2 0x140 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT OR PUSH2 0x2FE JUMPI PUSH2 0x140 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x40 DUP2 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x60 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0xA0 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP5 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xE0 DUP6 ADD SWAP4 PUSH2 0x120 PUSH2 0x100 DUP8 ADD SWAP7 PUSH0 DUP9 MSTORE ADD SWAP7 PUSH1 0x1 DUP7 MSTORE PUSH1 0x1 DUP9 MSTORE PUSH1 0x40 MLOAD SWAP9 PUSH0 DUP11 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE MLOAD ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE MLOAD ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD PUSH1 0x5 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x364 PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x36D PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x398 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3B8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x3FC PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x404 PUSH2 0xBAA JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x60 PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x1 DUP3 ADD SLOAD SWAP2 ADD SLOAD SWAP1 PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH1 0xE0 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH2 0x485 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x4AF PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x4B7 PUSH2 0xBAA JUMP JUMPDEST PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x4E1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x501 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x521 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 GT PUSH2 0x17D JUMPI PUSH2 0x545 PUSH2 0x553 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH2 0x54E PUSH2 0xF8D JUMP JUMPDEST PUSH2 0xD46 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x40 DUP4 ADD SWAP1 ISZERO ISZERO DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x60 DUP5 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x588 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP6 SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x57A JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH0 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x5E0 PUSH2 0xFD2 JUMP JUMPDEST PUSH0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND DUP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 PUSH1 0x1 SLOAD PUSH1 0xFF DUP3 MLOAD SWAP2 DUP2 DUP2 AND ISZERO ISZERO DUP4 MSTORE PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x80 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x667 CALLDATASIZE PUSH2 0xCC5 JUMP JUMPDEST PUSH2 0x66F PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD PUSH1 0x8 SHR AND ISZERO PUSH2 0x69B JUMPI DUP1 MLOAD PUSH1 0x6 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x7 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x8 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x9 SSTORE STOP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x54696D6520426173652052657761726473206973206E6F7420636F6E66696775 PUSH1 0x44 DUP3 ADD MSTORE PUSH18 0x3932B2103337B9103A3434B9902437B7B597 PUSH1 0x71 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH1 0xE0 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH2 0x3D8 PUSH2 0xBAA JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x74D PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x756 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x398 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x7B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x7EB PUSH2 0xB94 JUMP JUMPDEST POP PUSH2 0x7F4 PUSH2 0xBAA JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x84 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x81F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x83F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x85E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x87E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x40 DUP3 ADD PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x60 DUP5 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x8B0 JUMPI POP POP POP SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP6 SWAP5 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x8A2 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x8F9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC13 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x3D8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC70 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI PUSH2 0x180 SWAP1 PUSH1 0x3 NOT SWAP1 CALLDATASIZE SUB ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH2 0x973 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x97B PUSH2 0xBAA JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x17D JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x9AB DUP5 PUSH2 0xBFC JUMP JUMPDEST PUSH2 0x9B8 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xBDB JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x17D JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xAE1 JUMPI POP POP POP PUSH1 0x80 PUSH1 0x63 NOT CALLDATASIZE ADD SLT PUSH2 0x17D JUMPI PUSH2 0x9EE PUSH2 0xF8D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND DUP2 DUP2 ADDRESS PUSH32 0xCBD5D637D0DD0263537EF5C2432253BD1A309FC20240914E09AABAF6325231B4 PUSH0 DUP1 LOG4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 EQ SWAP2 DUP3 PUSH2 0xA66 JUMPI JUMPDEST PUSH1 0x20 DUP4 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH4 0x6634B753 PUSH1 0xE0 SHL DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 SWAP2 POP DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL DUP1 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP1 PUSH2 0xA9A JUMPI JUMPDEST PUSH1 0x20 SWAP2 POP DUP3 DUP1 PUSH2 0xA59 JUMP JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xACE JUMPI JUMPDEST DUP2 PUSH2 0xAB4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x17D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x17D JUMPI PUSH1 0x20 SWAP1 PUSH2 0xA8F JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAA7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xAF8 DUP3 PUSH2 0xBC0 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI DUP3 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x17D JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x17D JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x60 PUSH1 0x80 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x9D0 JUMP JUMPDEST CALLVALUE PUSH2 0x17D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x6 SLOAD PUSH1 0x7 SLOAD PUSH1 0x8 SLOAD PUSH1 0x9 SLOAD SWAP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 SWAP1 RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x17D JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x17D JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2FE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP2 CALLDATALOAD PUSH2 0xC2A DUP2 PUSH2 0xBFC JUMP JUMPDEST SWAP3 PUSH2 0xC38 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x17D JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC60 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xC53 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x2FE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xCA4 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x17D JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xCDE DUP3 PUSH2 0xBC0 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD DUP3 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xD11 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xD32 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 PUSH32 0x0 AND DUP2 SUB PUSH2 0xF86 JUMPI PUSH1 0x20 PUSH1 0x4 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x2F00F5AD PUSH1 0xE1 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP2 PUSH2 0xF44 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAD6 JUMPI PUSH0 SWAP3 PUSH2 0xEA1 JUMPI JUMPDEST POP PUSH0 SWAP2 DUP3 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xE97 JUMPI PUSH2 0xE85 PUSH1 0x1 SWAP2 PUSH2 0xE1B DUP7 DUP10 PUSH2 0xCFD JUMP JUMPDEST MLOAD DUP4 DUP1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP5 DUP1 PUSH1 0xA0 SHL SUB PUSH2 0xE3F DUP10 DUP9 PUSH2 0xCFD JUMP JUMPDEST MLOAD AND DUP6 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xE62 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD DUP1 ISZERO PUSH2 0xE8D JUMPI PUSH2 0xD25 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xE7F DUP4 DUP1 PUSH1 0xA0 SHL SUB PUSH2 0xE77 DUP9 DUP8 PUSH2 0xCFD JUMP JUMPDEST MLOAD AND DUP7 PUSH2 0xFF8 JUMP JUMPDEST SWAP1 PUSH2 0xD25 JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xE02 JUMP JUMPDEST TIMESTAMP DUP8 DUP6 ADD SSTORE PUSH2 0xD25 JUMP JUMPDEST POP POP POP POP PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xEB3 DUP2 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x17D JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x17D JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17D JUMPI DUP2 MLOAD SWAP1 PUSH2 0xEEA DUP3 PUSH2 0xBFC JUMP JUMPDEST SWAP3 PUSH2 0xEF8 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xBDB JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x17D JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xF24 JUMPI POP POP POP SWAP1 PUSH0 PUSH2 0xDFD JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xF13 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF7E JUMPI JUMPDEST DUP2 PUSH2 0xF5F PUSH1 0x20 SWAP4 DUP4 PUSH2 0xBDB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x17D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x17D JUMPI PUSH0 PUSH2 0xDA3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF52 JUMP JUMPDEST POP POP PUSH0 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xFBF JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER SUB PUSH2 0xFE5 JUMPI JUMP JUMPDEST PUSH4 0x118CDAA7 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND ISZERO PUSH2 0x1082 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x2FE JUMPI PUSH1 0x40 MSTORE PUSH1 0x40 PUSH1 0x2 DUP4 SLOAD SWAP4 DUP5 DUP5 MSTORE PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD SWAP2 ADD MSTORE PUSH1 0x3 SLOAD DUP2 GT PUSH0 EQ PUSH2 0x106F JUMPI POP PUSH1 0x5 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD LT ISZERO PUSH2 0x107E JUMPI PUSH1 0x4 SLOAD SWAP1 JUMP JUMPDEST PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 LOG1 SWAP5 PC SMOD SELFBALANCE 0xF9 BASEFEE 0xAA PUSH9 0xDFADB2D073AE9D6C58 0xBA PUSH18 0x129AC634F6FBA9DAEE73BA64736F6C634300 ADDMOD SHL STOP CALLER ", + "sourceMap": "1684:8575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;-1:-1:-1;;;;;1684:8575:0;2711:22:17;;2707:93;;1684:8575:0;;;-1:-1:-1;;;;;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;3149:40:17;;1684:8575:0;3149:40:17;1684:8575:0;2707:93:17;2757:31;;;1684:8575:0;2757:31:17;1684:8575:0;;;;;2757:31:17;1684:8575:0;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;1684:8575:0;8068:21;1684:8575;;;;;;;8176:68;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4913:4;1684:8575;;4913:4;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;3281:72;1684:8575;3281:72;1684:8575;;;3281:72;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;3524:59;1684:8575;;;;;3524:59;1684:8575;;;;;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;1684:8575:0;;;3524:59;;;;;1684:8575;3524:59;;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;5793:1424;1684:8575;;;;;;:::i;:::-;;577:70:16;;:::i;:::-;5793:1424:0;:::i;:::-;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;1547:65:17;;:::i;:::-;1684:8575:0;;;-1:-1:-1;;;;;;1684:8575:0;;;;-1:-1:-1;;;;;1684:8575:0;3149:40:17;1684:8575:0;;3149:40:17;1684:8575:0;;;;;;;-1:-1:-1;;1684:8575:0;;;;;3181:46;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;1684:8575:0;8627:21;1684:8575;;;;;;;;;8731:64;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;577:70:16;;:::i;:::-;1684:8575:0;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;5629:4;5592:58;1684:8575;;5592:58;5681:15;-1:-1:-1;;;;;1684:8575:0;5670:26;;;;:79;;1684:8575;;;;;;;;;;;5670:79;-1:-1:-1;;;5700:49:0;;1684:8575;5700:49;;1684:8575;;;-1:-1:-1;1684:8575:0;;;;;;5700:49;;;;;;1684:8575;5700:49;;;5670:79;1684:8575;5670:79;;;;;;5700:49;;1684:8575;5700:49;;1684:8575;5700:49;;;;;;1684:8575;5700:49;;;:::i;:::-;;;1684:8575;;;;;;;;;;;;;5700:49;;;;;;-1:-1:-1;5700:49:0;;;1684:8575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;3405:68;1684:8575;3405:68;1684:8575;3405:68;1684:8575;3405:68;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;:::o;:::-;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;5793:1424;;;;-1:-1:-1;;;;;1684:8575:0;;;;6219:14;1684:8575;6209:24;;6205:191;;6425:33;;1684:8575;;;;;;;;;;6425:33;;;;;;;;;-1:-1:-1;6425:33:0;;;5793:1424;-1:-1:-1;1684:8575:0;;-1:-1:-1;;;6532:26:0;;-1:-1:-1;;;;;1684:8575:0;;;6425:33;6532:26;;1684:8575;;-1:-1:-1;;1684:8575:0;;6532:26;;1684:8575;;6532:6;1684:8575;6532:26;;;;;;;-1:-1:-1;6532:26:0;;;5793:1424;-1:-1:-1;;;;6656:3:0;1684:8575;;6631:23;;;;;7084:66;1684:8575;6698:15;;;;;:::i;:::-;1684:8575;;;;;;;;-1:-1:-1;1684:8575:0;6754:7;6425:33;1684:8575;;-1:-1:-1;1684:8575:0;;;;;;6770:9;;;;:::i;:::-;1684:8575;;;;;;;;-1:-1:-1;1684:8575:0;;;7016:47;1684:8575;-1:-1:-1;1684:8575:0;;;;6886:24;;6882:114;;7016:47;:::i;:::-;1684:8575;;7105:45;1684:8575;;;;;7140:9;;;;:::i;:::-;1684:8575;;7105:45;;:::i;:::-;7084:66;;:::i;:::-;6656:3;1684:8575;6616:13;;;6882:114;6961:15;6935:23;;;1684:8575;7016:47;:::i;6631:23::-;;;;;1684:8575;7182:27;5793:1424;:::o;6532:26::-;;;;;;-1:-1:-1;6532:26:0;;;;;;:::i;:::-;;;1684:8575;6425:33;1684:8575;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;6425:33;1684:8575;;;;;;;;;;;;;;6425:33;1684:8575;;;;;;;;6532:26;;;;;;;1684:8575;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;6425:33;1684:8575;;;;;;;6425:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1684:8575;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;6425:33;;;;;;-1:-1:-1;6425:33:0;;6205:191;6356:28;;6364:5;6356:28;;:::o;655:169:16:-;733:6;-1:-1:-1;;;;;1684:8575:0;711:10:16;:29;707:110;;655:169::o;707:110::-;764:41;;;;;711:10;764:41;1684:8575:0;;764:41:16;;1858:166:17;1766:6;1684:8575:0;-1:-1:-1;;;;;1684:8575:0;752:10:21;1918:23:17;1914:103;;1858:166::o;1914:103::-;1965:40;;;1766:6;1965:40;752:10:21;1965:40:17;1684:8575:0;;1766:6:17;1965:40;8811:703:0;1684:8575;8917:21;1684:8575;;8916:42;8913:81;;1684:8575;;;;;;;;9027:7;1684:8575;;;;;9027:22;1684:8575;;;;;;-1:-1:-1;1684:8575:0;;;;-1:-1:-1;1684:8575:0;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;8917:21;1684:8575;;;;;;;;;;;;9095:64;1684:8575;9073:86;;9070:437;9095:64;;;1684:8575;9184:66;1684:8575;9177:73;:::o;9070:437::-;1684:8575;;-1:-1:-1;1684:8575:0;;;9384:66;1684:8575;9377:73;:::o;9270:237::-;1684:8575;9487:8;:::o;8913:81::-;8974:8;;1684:8575;8974:8;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "857200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "activeAmountBaseLiquidityParameters()": "8977", + "activeIncentiveFactor()": "2502", + "activeTimeBaseLiquidityParameters()": "8614", + "getHookFlags()": "1027", + "lpInfos(address,address)": "7126", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "infinite", + "onAfterInitialize(uint256[],uint256,bytes)": "infinite", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "infinite", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "294", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "infinite", + "onBeforeInitialize(uint256[],bytes)": "infinite", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "infinite", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "461", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "611", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "infinite", + "owner()": "2521", + "renounceOwnership()": "28270", + "setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "93499", + "setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "93285", + "transferOwnership(address)": "28585" + }, + "internal": { + "_calculateAmountBaseRewards(address,contract IERC20)": "infinite", + "_calculateTimeBaseRewards(address,contract IERC20)": "infinite" + } + }, + "methodIdentifiers": { + "activeAmountBaseLiquidityParameters()": "c9e6e6ca", + "activeIncentiveFactor()": "6c55c747", + "activeTimeBaseLiquidityParameters()": "08a13d6a", + "getHookFlags()": "d77153a7", + "lpInfos(address,address)": "b389771d", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "976907cc", + "onAfterInitialize(uint256[],uint256,bytes)": "38be241d", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "2754888d", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "18b6eb55", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "45421ec7", + "onBeforeInitialize(uint256[],bytes)": "1c149e28", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "ba5f9f40", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "5211fa77", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "a0e8f5ac", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "0b89f182", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "ec93c2d2", + "setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "6683635f", + "transferOwnership(address)": "f2fde38b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lpRWD\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedRouter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"amountBaseLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"timeBaseLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct LPIncentivizedHook.LPIncentiveFactor\",\"name\":\"_lpIncentiveFactor\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"LPIncentivizedHookRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"LPAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"RewardDistributed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeAmountBaseLiquidityParameters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountRewardFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeIncentiveFactor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"amountBaseLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"timeBaseLiquidity\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeTimeBaseLiquidityParameters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeRewardFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lpInfos\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountRewardFee\",\"type\":\"uint256\"}],\"internalType\":\"struct LPIncentivizedHook.AmountBaseLiquidityParameters\",\"name\":\"_amountBaseLiquidityParameters\",\"type\":\"tuple\"}],\"name\":\"setAmountBaseLiquidityParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeRewardFee\",\"type\":\"uint256\"}],\"internalType\":\"struct LPIncentivizedHook.TimeBaseLiquidityParameters\",\"name\":\"_timeBaseLiquidityParameters\",\"type\":\"tuple\"}],\"name\":\"setTimeBaseLiquidityParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Uses to reward Liquidity Providers (LPs) based on multiple factors\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"LPIncentivizedHookRegistered(address,address,address)\":{\"details\":\"If the registration fails the call will revert, so there will be no event.\",\"params\":{\"factory\":\"The factory (must be the allowed factory, or the call will revert)\",\"hooksContract\":\"This contract\",\"pool\":\"The pool on which the hook was registered\"}},\"RewardDistributed(address,uint256)\":{\"details\":\"Event if rewards distributed successfully.\",\"params\":{\"LPAddress\":\"Liquidity provider address\",\"reward\":\"Earn rewards\"}}},\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"success True if the hook allowed the registration, false otherwise\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))\":{\"details\":\"Sets the Amount based liquidity rewards parameters for the hook This function must be permissioned.\",\"params\":{\"_amountBaseLiquidityParameters\":\"The amount base liquidity parameters\"}},\"setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))\":{\"details\":\"Sets the Time based liquidity rewards parameters for the hook This function must be permissioned.\",\"params\":{\"_timeBaseLiquidityParameters\":\"The time base liquidity parameters\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}]},\"events\":{\"LPIncentivizedHookRegistered(address,address,address)\":{\"notice\":\"A new `LPIncentivizedHook` contract has been registered successfully.\"}},\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Hook that gives a swap fee discount to lpRWD holders.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol\":\"LPIncentivizedHook\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol\":{\"keccak256\":\"0x39c966b2eb8a0842a73895b1f60da2286cb43c3f9e38e2616f8372b96ef6e829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://49dfe918e98768a8a6f123e36bfc5933bf5b29ade67ccf65621455d68036e6b3\",\"dweb:/ipfs/QmZyAd5seZA3Dwo1YvZeVAzaHHFjrN4yucGfS45wgjPbjB\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0xe21b1175ef7852ffa523256f332eea07c0df9a7523ecad9055d3995601d8eb9a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://850d318622138965338981ee5de357ba4f3ad6bbda89c7cf7c83ac438796eab4\",\"dweb:/ipfs/QmRvdXGJVgLtectd3N2uSBCDa7kkXrRgfptkmz51Gjcsh4\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x9ea0802f7ed57459bec19372217cc8dca3dbe3e634b0efba5f3bffce0576e221\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecfd2f7af8d0eab220cdf69651986b348826a8bf6421c8b35f49fd749847912f\",\"dweb:/ipfs/QmYFJqqRVB98NPcCXofhY2o3HX8xiCvuFeu1fJWoeYQWTz\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0x88037c44e04e0f23b63e64d5128c2f3898feab51439db807ab91f3e1805315dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21de8416c9391642ad88d1453aea42eb0d71c97a77f9e7f0a3fd37d4ee4591c8\",\"dweb:/ipfs/QmTPCXbnBYp8JydU2Y665Bs3BWms8kZydWYzmLiNmRhJkR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x09305dcf7ae512906248a3696137422d3d36e72465660e372cd4fd64d13117ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21d564eee4c8e31216cf6542ac925daac7659fbf8a33129e13d33f277c5efc8e\",\"dweb:/ipfs/QmRqXAqYeygYbT2qXUjZdUF8bzvmCrmqECRGcUzrUMBRf6\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xe889e9f6b8469155c967f403ad7508eaa66af8cad1cb9a003536a8e4f281d348\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6e32c81c8d84199eda0de40d33bb77c7acbb482e3f545d5cfba8195af0a88e0\",\"dweb:/ipfs/Qmaf1WAinzjYWGNxRzCTmn2QABFWS912HwC8eiD7cyTgis\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x3dcd533a3f709bda89bb8e649eb97aed96578e606f3796609544b1dcff975a0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83fa9b15077fd2f33f6c175d694e2f7ae9c9a289c7feaca40aa7d6feb8d87c26\",\"dweb:/ipfs/QmQLfKCJ7mjiEeCGN1sHgWT8wjAMbAmBqcBVoQQyUZa5ws\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0xeb7200ec49f3ea7e11b33794136c20ef2d891ccadaa71076f88e260c3598c018\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41577fbfd33a0aeef565f8d15ce93096eacd45c139cc492dbe2b178e6623b820\",\"dweb:/ipfs/QmQJqhQXyNKxYXozYn57LLcXvcPkkb1ZF8qiZFfkZ93EdL\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0x4e636cd794e7d55aa94f4f41799ced22734f29a1299c77679dabe01fcdb9729b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a72d61d25dcaed4a41f18733186fb498e04d178a9da7948a07c1888c44edbac9\",\"dweb:/ipfs/QmTDm4CFGZVNsp2Lweh3hnBj6kaU8hRxeZaVbH96ov4Aqg\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3119, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 71, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "activeIncentiveFactor", + "offset": 0, + "slot": "1", + "type": "t_struct(LPIncentiveFactor)50_storage" + }, + { + "astId": 74, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "activeAmountBaseLiquidityParameters", + "offset": 0, + "slot": "2", + "type": "t_struct(AmountBaseLiquidityParameters)59_storage" + }, + { + "astId": 77, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "activeTimeBaseLiquidityParameters", + "offset": 0, + "slot": "6", + "type": "t_struct(TimeBaseLiquidityParameters)68_storage" + }, + { + "astId": 85, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "lpInfos", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_contract(IERC20)3506,t_struct(LPInfo)45_storage))" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20)3506": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_contract(IERC20)3506,t_struct(LPInfo)45_storage))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo))", + "numberOfBytes": "32", + "value": "t_mapping(t_contract(IERC20)3506,t_struct(LPInfo)45_storage)" + }, + "t_mapping(t_contract(IERC20)3506,t_struct(LPInfo)45_storage)": { + "encoding": "mapping", + "key": "t_contract(IERC20)3506", + "label": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo)", + "numberOfBytes": "32", + "value": "t_struct(LPInfo)45_storage" + }, + "t_struct(AmountBaseLiquidityParameters)59_storage": { + "encoding": "inplace", + "label": "struct LPIncentivizedHook.AmountBaseLiquidityParameters", + "members": [ + { + "astId": 52, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "mediumLiquidityAmountTrigger", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 54, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "higherLiquidityAmountTrigger", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 56, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "mediumLiquidityAmountRewardFee", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 58, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "higherLiquidityAmountRewardFee", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(LPIncentiveFactor)50_storage": { + "encoding": "inplace", + "label": "struct LPIncentivizedHook.LPIncentiveFactor", + "members": [ + { + "astId": 47, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "amountBaseLiquidity", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 49, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "timeBaseLiquidity", + "offset": 1, + "slot": "0", + "type": "t_bool" + } + ], + "numberOfBytes": "32" + }, + "t_struct(LPInfo)45_storage": { + "encoding": "inplace", + "label": "struct LPIncentivizedHook.LPInfo", + "members": [ + { + "astId": 40, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "totalLiquidity", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 42, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "liquidityStartTime", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 44, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "rewards", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "numberOfBytes": "96" + }, + "t_struct(TimeBaseLiquidityParameters)68_storage": { + "encoding": "inplace", + "label": "struct LPIncentivizedHook.TimeBaseLiquidityParameters", + "members": [ + { + "astId": 61, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "mediumLiquidityTimeTrigger", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 63, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "higherLiquidityTimeTrigger", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 65, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "mediumLiquidityTimeRewardFee", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 67, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:LPIncentivizedHook", + "label": "higherLiquidityTimeRewardFee", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { + "errors": { + "SenderIsNotVault(address)": [ + { + "notice": "Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function)." + } + ] + }, + "events": { + "LPIncentivizedHookRegistered(address,address,address)": { + "notice": "A new `LPIncentivizedHook` contract has been registered successfully." + } + }, + "kind": "user", + "methods": { + "getHookFlags()": { + "notice": "Return the set of hooks implemented by the contract." + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed after adding liquidity." + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "notice": "Hook to be executed after pool initialization." + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "notice": "Hook to be executed after removing liquidity." + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "notice": "Called after a swap to perform further actions once the balances have been updated by the swap." + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed before adding liquidity." + }, + "onBeforeInitialize(uint256[],bytes)": { + "notice": "Hook executed before pool initialization." + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "notice": "Hook to be executed before removing liquidity." + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "notice": "Called before a swap to give the Pool an opportunity to perform actions." + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "notice": "Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees." + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "notice": "Hook executed when a pool is registered with a non-zero hooks contract." + } + }, + "notice": "Hook that gives a swap fee discount to lpRWD holders.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "IAuthentication": { + "abi": [ + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getActionId(bytes4)": { + "params": { + "selector": "The 4-byte selector of the permissioned function" + }, + "returns": { + "_0": "actionId The computed actionId" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"actionId The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "SenderNotAllowed()": [ + { + "notice": "The sender does not have permission to call a function." + } + ] + }, + "kind": "user", + "methods": { + "getActionId(bytes4)": { + "notice": "Returns the action identifier associated with the external function described by `selector`." + } + }, + "notice": "Simple interface for permissioned calling of external functions.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol": { + "IRateProvider": { + "abi": [ + { + "inputs": [], + "name": "getRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getRate()": { + "details": "Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying token. The meaning of this rate depends on the context." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "getRate()": "679aefce" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying token. The meaning of this rate depends on the context.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "notice": "General interface for token exchange rates.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol": { + "IAuthorizer": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "where", + "type": "address" + } + ], + "name": "canPerform", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "canPerform(bytes32,address,address)": { + "params": { + "account": "Account trying to perform the action", + "actionId": "Identifier for the action to be performed", + "where": "Target contract for the action" + }, + "returns": { + "_0": "success True if the action is permitted" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "canPerform(bytes32,address,address)": "9be2a884" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"_0\":\"success True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "canPerform(bytes32,address,address)": { + "notice": "Returns true if `account` can perform the action described by `actionId` in the contract `where`." + } + }, + "notice": "Interface to the Vault's permission system.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol": { + "IBasePoolFactory": { + "abi": [ + { + "inputs": [], + "name": "Disabled", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "getDeploymentAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "details": "All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).", + "events": { + "PoolCreated(address)": { + "params": { + "pool": "The address of the new pool" + } + } + }, + "kind": "dev", + "methods": { + "disable()": { + "details": "Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled." + }, + "getActionId(bytes4)": { + "params": { + "selector": "The 4-byte selector of the permissioned function" + }, + "returns": { + "_0": "actionId The computed actionId" + } + }, + "getDeploymentAddress(bytes32)": { + "params": { + "salt": "The salt used to deploy the pool" + }, + "returns": { + "_0": "deploymentAddress The predicted address of the pool, given the salt" + } + }, + "isDisabled()": { + "returns": { + "_0": "success True if this factory was disabled" + } + }, + "isPoolFromFactory(address)": { + "params": { + "pool": "The pool to check" + }, + "returns": { + "_0": "success True if `pool` was created by this factory" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "disable()": "2f2770db", + "getActionId(bytes4)": "851c1bb3", + "getDeploymentAddress(bytes32)": "337d4010", + "isDisabled()": "6c57f5a9", + "isPoolFromFactory(address)": "6634b753" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"actionId The computed actionId\"}},\"getDeploymentAddress(bytes32)\":{\"params\":{\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"deploymentAddress The predicted address of the pool, given the salt\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"success True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"success True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0xe21b1175ef7852ffa523256f332eea07c0df9a7523ecad9055d3995601d8eb9a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://850d318622138965338981ee5de357ba4f3ad6bbda89c7cf7c83ac438796eab4\",\"dweb:/ipfs/QmRvdXGJVgLtectd3N2uSBCDa7kkXrRgfptkmz51Gjcsh4\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "Disabled()": [ + { + "notice": "Attempted pool creation after the factory was disabled." + } + ], + "SenderNotAllowed()": [ + { + "notice": "The sender does not have permission to call a function." + } + ] + }, + "events": { + "FactoryDisabled()": { + "notice": "The factory was disabled by governance." + }, + "PoolCreated(address)": { + "notice": "A pool was deployed." + } + }, + "kind": "user", + "methods": { + "disable()": { + "notice": "Disable the factory, preventing the creation of more pools." + }, + "getActionId(bytes4)": { + "notice": "Returns the action identifier associated with the external function described by `selector`." + }, + "getDeploymentAddress(bytes32)": { + "notice": "Return the address where a new pool will be deployed, based on the factory address and salt." + }, + "isDisabled()": { + "notice": "Check whether this factory has been disabled by governance." + }, + "isPoolFromFactory(address)": { + "notice": "Check whether a pool was deployed by this factory." + } + }, + "notice": "Base interface for a Balancer Pool Factory.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol": { + "IHooks": { + "abi": [ + { + "inputs": [], + "name": "getHookFlags", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + } + ], + "internalType": "struct HookFlags", + "name": "hookFlags", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "amountsInScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsInRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onAfterAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "hookAdjustedAmountsInRaw", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "exactAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onAfterInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "bptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOutScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOutRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onAfterRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "hookAdjustedAmountsOutRaw", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountInScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenInBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenOutBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AfterSwapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "onAfterSwap", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "hookAdjustedAmountCalculatedRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsInScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minBptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onBeforeAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "exactAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onBeforeInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "maxBptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOutScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onBeforeRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "onBeforeSwap", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "staticSwapFeePercentage", + "type": "uint256" + } + ], + "name": "onComputeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "dynamicSwapFeePercentage", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "onRegister", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)", + "kind": "dev", + "methods": { + "getHookFlags()": { + "details": "The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \"mandatory\" hook.", + "returns": { + "hookFlags": "Flags indicating which hooks the contract supports" + } + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsInRaw": "Actual amounts of tokens added, sorted in token registration order", + "amountsInScaled18": "Actual amounts of tokens added, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountOut": "Amount of pool tokens minted", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "hookAdjustedAmountsInRaw": "New amountsInRaw, potentially modified by the hook", + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "details": "Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "bptAmountOut": "Amount of pool tokens minted during initialization", + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool accepts the initialization results" + } + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsOutRaw": "Actual amount of tokens to receive, sorted in token registration order", + "amountsOutScaled18": "Scaled amount of tokens to receive, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountIn": "Amount of pool tokens to burn", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "hookAdjustedAmountsOutRaw": "New amountsOutRaw, potentially modified by the hook", + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "details": "Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see above for struct definition)" + }, + "returns": { + "hookAdjustedAmountCalculatedRaw": "New amount calculated, potentially modified by the hook", + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "maxAmountsInScaled18": "Maximum amounts of input tokens", + "minBptAmountOut": "Minimum amount of output pool tokens", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeInitialize(uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool wishes to proceed with initialization" + } + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "maxBptAmountIn": "Maximum amount of input pool tokens", + "minAmountsOutScaled18": "Minimum output amounts, sorted in token registration order", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "details": "Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)" + }, + "returns": { + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "details": "Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)", + "staticSwapFeePercentage": "18-decimal FP value of the static swap fee percentage, for reference" + }, + "returns": { + "dynamicSwapFeePercentage": "Value of the swap fee percentage, as an 18-decimal FP value", + "success": "True if the pool wishes to proceed with settlement" + } + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "details": "Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.", + "params": { + "factory": "Address of the pool factory (contract deploying the pool)", + "liquidityManagement": "Liquidity management flags indicating which functions are enabled", + "pool": "Address of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + }, + "returns": { + "_0": "success True if the hook allowed the registration, false otherwise" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "getHookFlags()": "d77153a7", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "976907cc", + "onAfterInitialize(uint256[],uint256,bytes)": "38be241d", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "2754888d", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "18b6eb55", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "45421ec7", + "onBeforeInitialize(uint256[],bytes)": "1c149e28", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "ba5f9f40", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "5211fa77", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "a0e8f5ac", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "0b89f182" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"success True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "getHookFlags()": { + "notice": "Return the set of hooks implemented by the contract." + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed after adding liquidity." + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "notice": "Hook to be executed after pool initialization." + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "notice": "Hook to be executed after removing liquidity." + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "notice": "Called after a swap to perform further actions once the balances have been updated by the swap." + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed before adding liquidity." + }, + "onBeforeInitialize(uint256[],bytes)": { + "notice": "Hook executed before pool initialization." + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "notice": "Hook to be executed before removing liquidity." + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "notice": "Called before a swap to give the Pool an opportunity to perform actions." + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "notice": "Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees." + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "notice": "Hook executed when a pool is registered with a non-zero hooks contract." + } + }, + "notice": "Interface for pool hooks.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol": { + "IProtocolFeeController": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "CallerIsNotPoolCreator", + "type": "error" + }, + { + "inputs": [], + "name": "PoolCreatorFeePercentageTooHigh", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreatorNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "ProtocolSwapFeePercentageTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "ProtocolYieldFeePercentageTooHigh", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "GlobalProtocolSwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "yieldFeePercentage", + "type": "uint256" + } + ], + "name": "GlobalProtocolYieldFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "PoolCreatorFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "poolCreatorSwapFeePercentage", + "type": "uint256" + } + ], + "name": "PoolCreatorSwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "poolCreatorYieldFeePercentage", + "type": "uint256" + } + ], + "name": "PoolCreatorYieldFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ProtocolFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ProtocolSwapFeeCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolSwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ProtocolYieldFeeCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "yieldFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolYieldFeePercentageChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "collectAggregateFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolCreatorFeePercentage", + "type": "uint256" + } + ], + "name": "computeAggregateFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "aggregateFeePercentage", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getGlobalProtocolSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGlobalProtocolYieldFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolCreatorFeeAmounts", + "outputs": [ + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolProtocolSwapFeeInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolProtocolYieldFeeInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getProtocolFeeAmounts", + "outputs": [ + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + }, + { + "internalType": "bool", + "name": "protocolFeeExempt", + "type": "bool" + } + ], + "name": "registerPool", + "outputs": [ + { + "internalType": "uint256", + "name": "aggregateSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateYieldFeePercentage", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newProtocolSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setGlobalProtocolSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newProtocolYieldFeePercentage", + "type": "uint256" + } + ], + "name": "setGlobalProtocolYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolCreatorSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setPoolCreatorSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolCreatorYieldFeePercentage", + "type": "uint256" + } + ], + "name": "setPoolCreatorYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setProtocolSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolYieldFeePercentage", + "type": "uint256" + } + ], + "name": "setProtocolYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "updateProtocolSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "updateProtocolYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "withdrawPoolCreatorFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdrawPoolCreatorFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdrawProtocolFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "errors": { + "CallerIsNotPoolCreator(address,address)": [ + { + "params": { + "caller": "The account attempting to withdraw pool creator fees", + "pool": "The pool the caller tried to withdraw from" + } + } + ], + "PoolCreatorNotRegistered(address)": [ + { + "params": { + "pool": "The pool with no creator" + } + } + ], + "ProtocolSwapFeePercentageTooHigh()": [ + { + "details": "Note that this is checked for both the global and pool-specific protocol swap fee percentages." + } + ], + "ProtocolYieldFeePercentageTooHigh()": [ + { + "details": "Note that this is checked for both the global and pool-specific protocol swap fee percentages." + } + ] + }, + "events": { + "GlobalProtocolSwapFeePercentageChanged(uint256)": { + "params": { + "swapFeePercentage": "The updated protocol swap fee percentage" + } + }, + "GlobalProtocolYieldFeePercentageChanged(uint256)": { + "params": { + "yieldFeePercentage": "The updated protocol yield fee percentage" + } + }, + "PoolCreatorFeesWithdrawn(address,address,address,uint256)": { + "params": { + "amount": "The amount of the fee token that was withdrawn", + "pool": "The pool from which pool creator fees are being withdrawn", + "recipient": "The recipient of the funds (the pool creator if permissionless, or another account)", + "token": "The token being withdrawn" + } + }, + "PoolCreatorSwapFeePercentageChanged(address,uint256)": { + "params": { + "poolCreatorSwapFeePercentage": "The new pool creator swap fee percentage for the pool" + } + }, + "PoolCreatorYieldFeePercentageChanged(address,uint256)": { + "params": { + "poolCreatorYieldFeePercentage": "The new pool creator yield fee percentage for the pool" + } + }, + "ProtocolFeesWithdrawn(address,address,address,uint256)": { + "params": { + "amount": "The amount of the fee token that was withdrawn", + "pool": "The pool from which protocol fees are being withdrawn", + "recipient": "The recipient of the funds", + "token": "The token being withdrawn" + } + }, + "ProtocolSwapFeeCollected(address,address,uint256)": { + "details": "Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.", + "params": { + "amount": "The amount of the token collected in fees", + "pool": "The pool on which the swap fee was charged", + "token": "The token in which the swap fee was charged" + } + }, + "ProtocolSwapFeePercentageChanged(address,uint256)": { + "params": { + "pool": "The pool whose protocol swap fee will be changed", + "swapFeePercentage": "The updated protocol swap fee percentage" + } + }, + "ProtocolYieldFeeCollected(address,address,uint256)": { + "details": "Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.", + "params": { + "amount": "The amount of the token collected in fees", + "pool": "The pool on which the yield fee was charged", + "token": "The token in which the yield fee was charged" + } + }, + "ProtocolYieldFeePercentageChanged(address,uint256)": { + "params": { + "pool": "The pool whose protocol yield fee will be changed", + "yieldFeePercentage": "The updated protocol yield fee percentage" + } + } + }, + "kind": "dev", + "methods": { + "collectAggregateFees(address)": { + "params": { + "pool": "The pool with aggregate fees" + } + }, + "computeAggregateFeePercentage(uint256,uint256)": { + "details": "Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will revert if greater precision would be required. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240", + "params": { + "poolCreatorFeePercentage": "The pool creator portion of the aggregate fee percentage", + "protocolFeePercentage": "The protocol portion of the aggregate fee percentage" + }, + "returns": { + "aggregateFeePercentage": "The computed aggregate percentage" + } + }, + "getGlobalProtocolSwapFeePercentage()": { + "returns": { + "_0": "protocolSwapFeePercentage The global protocol swap fee percentage" + } + }, + "getGlobalProtocolYieldFeePercentage()": { + "returns": { + "_0": "protocolYieldFeePercentage The global protocol yield fee percentage" + } + }, + "getPoolCreatorFeeAmounts(address)": { + "details": "Includes both swap and yield fees.", + "params": { + "pool": "The address of the pool on which fees were collected" + }, + "returns": { + "feeAmounts": "The total amounts of each token available for withdrawal, sorted in token registration order" + } + }, + "getPoolProtocolSwapFeeInfo(address)": { + "params": { + "pool": "The address of the pool" + }, + "returns": { + "_0": "protocolSwapFeePercentage The global protocol swap fee percentage", + "_1": "isOverride True if the protocol fee has been overridden" + } + }, + "getPoolProtocolYieldFeeInfo(address)": { + "params": { + "pool": "The address of the pool" + }, + "returns": { + "_0": "protocolYieldFeePercentage The global protocol yield fee percentage", + "_1": "isOverride True if the protocol fee has been overridden" + } + }, + "getProtocolFeeAmounts(address)": { + "details": "Includes both swap and yield fees.", + "params": { + "pool": "The address of the pool on which fees were collected" + }, + "returns": { + "feeAmounts": "The total amounts of each token available for withdrawal, sorted in token registration order" + } + }, + "registerPool(address,address,bool)": { + "details": "This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.", + "params": { + "pool": "The address of the pool being registered", + "poolCreator": "The address of the pool creator (or 0 if there won't be a pool creator fee)", + "protocolFeeExempt": "If true, the pool is initially exempt from protocol fees" + }, + "returns": { + "aggregateSwapFeePercentage": "The initial aggregate swap fee percentage", + "aggregateYieldFeePercentage": "The initial aggregate yield fee percentage" + } + }, + "setGlobalProtocolSwapFeePercentage(uint256)": { + "params": { + "newProtocolSwapFeePercentage": "The new protocol swap fee percentage" + } + }, + "setGlobalProtocolYieldFeePercentage(uint256)": { + "params": { + "newProtocolYieldFeePercentage": "The new protocol yield fee percentage" + } + }, + "setPoolCreatorSwapFeePercentage(address,uint256)": { + "params": { + "pool": "The address of the pool for which the pool creator fee will be changed", + "poolCreatorSwapFeePercentage": "The new pool creator swap fee percentage to apply to the pool" + } + }, + "setPoolCreatorYieldFeePercentage(address,uint256)": { + "params": { + "pool": "The address of the pool for which the pool creator fee will be changed", + "poolCreatorYieldFeePercentage": "The new pool creator yield fee percentage to apply to the pool" + } + }, + "setProtocolSwapFeePercentage(address,uint256)": { + "params": { + "newProtocolSwapFeePercentage": "The new protocol swap fee percentage for the pool", + "pool": "The address of the pool for which we are setting the protocol swap fee" + } + }, + "setProtocolYieldFeePercentage(address,uint256)": { + "params": { + "newProtocolYieldFeePercentage": "The new protocol yield fee percentage for the pool", + "pool": "The address of the pool for which we are setting the protocol yield fee" + } + }, + "updateProtocolSwapFeePercentage(address)": { + "details": "This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).", + "params": { + "pool": "The pool for which we are setting the protocol swap fee" + } + }, + "updateProtocolYieldFeePercentage(address)": { + "details": "This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).", + "params": { + "pool": "The pool for which we are setting the protocol yield fee" + } + }, + "vault()": { + "returns": { + "_0": "vault The Vault address" + } + }, + "withdrawPoolCreatorFees(address)": { + "details": "Sends swap and yield pool creator fees to the registered poolCreator.", + "params": { + "pool": "The pool on which fees were collected" + } + }, + "withdrawPoolCreatorFees(address,address)": { + "details": "Sends swap and yield pool creator fees to the recipient.", + "params": { + "pool": "The pool on which fees were collected", + "recipient": "Address to send the tokens" + } + }, + "withdrawProtocolFees(address,address)": { + "details": "Sends swap and yield protocol fees to the recipient.", + "params": { + "pool": "The pool on which fees were collected", + "recipient": "Address to send the tokens" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "collectAggregateFees(address)": "8f4ab9ca", + "computeAggregateFeePercentage(uint256,uint256)": "0ddd60c6", + "getGlobalProtocolSwapFeePercentage()": "7869ee18", + "getGlobalProtocolYieldFeePercentage()": "55fb76af", + "getPoolCreatorFeeAmounts(address)": "9e95f3fd", + "getPoolProtocolSwapFeeInfo(address)": "5c15a0b4", + "getPoolProtocolYieldFeeInfo(address)": "7a2b97dc", + "getProtocolFeeAmounts(address)": "8df44c54", + "registerPool(address,address,bool)": "77ff76e7", + "setGlobalProtocolSwapFeePercentage(uint256)": "8a3c5c69", + "setGlobalProtocolYieldFeePercentage(uint256)": "a93df2a4", + "setPoolCreatorSwapFeePercentage(address,uint256)": "1377c16c", + "setPoolCreatorYieldFeePercentage(address,uint256)": "3af52712", + "setProtocolSwapFeePercentage(address,uint256)": "fd267f39", + "setProtocolYieldFeePercentage(address,uint256)": "abaa3356", + "updateProtocolSwapFeePercentage(address)": "71ecc8fb", + "updateProtocolYieldFeePercentage(address)": "71447ea8", + "vault()": "fbfa77cf", + "withdrawPoolCreatorFees(address)": "52f125f0", + "withdrawPoolCreatorFees(address,address)": "f7061445", + "withdrawProtocolFees(address,address)": "cf7b287f" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will revert if greater precision would be required. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"protocolSwapFeePercentage The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"protocolYieldFeePercentage The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"protocolSwapFeePercentage The global protocol swap fee percentage\",\"_1\":\"isOverride True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"protocolYieldFeePercentage The global protocol yield fee percentage\",\"_1\":\"isOverride True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "CallerIsNotPoolCreator(address,address)": [ + { + "notice": "Error raised if the wrong account attempts to withdraw pool creator fees." + } + ], + "PoolCreatorFeePercentageTooHigh()": [ + { + "notice": "Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value." + } + ], + "PoolCreatorNotRegistered(address)": [ + { + "notice": "Error raised if there is no pool creator on a withdrawal attempt from the given pool." + } + ], + "ProtocolSwapFeePercentageTooHigh()": [ + { + "notice": "Error raised when the protocol swap fee percentage exceeds the maximum allowed value." + } + ], + "ProtocolYieldFeePercentageTooHigh()": [ + { + "notice": "Error raised when the protocol yield fee percentage exceeds the maximum allowed value." + } + ] + }, + "events": { + "GlobalProtocolSwapFeePercentageChanged(uint256)": { + "notice": "Emitted when the protocol swap fee percentage is updated." + }, + "GlobalProtocolYieldFeePercentageChanged(uint256)": { + "notice": "Emitted when the protocol yield fee percentage is updated." + }, + "PoolCreatorFeesWithdrawn(address,address,address,uint256)": { + "notice": "Logs the withdrawal of pool creator fees in a specific token and amount." + }, + "PoolCreatorSwapFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the pool creator swap fee percentage of a pool is updated." + }, + "PoolCreatorYieldFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the pool creator yield fee percentage of a pool is updated." + }, + "ProtocolFeesWithdrawn(address,address,address,uint256)": { + "notice": "Logs the withdrawal of protocol fees in a specific token and amount." + }, + "ProtocolSwapFeeCollected(address,address,uint256)": { + "notice": "Logs the collection of protocol swap fees in a specific token and amount." + }, + "ProtocolSwapFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the protocol swap fee percentage is updated for a specific pool." + }, + "ProtocolYieldFeeCollected(address,address,uint256)": { + "notice": "Logs the collection of protocol yield fees in a specific token and amount." + }, + "ProtocolYieldFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the protocol yield fee percentage is updated for a specific pool." + } + }, + "kind": "user", + "methods": { + "collectAggregateFees(address)": { + "notice": "Collects aggregate fees from the Vault for a given pool." + }, + "computeAggregateFeePercentage(uint256,uint256)": { + "notice": "Returns a calculated aggregate percentage from protocol and pool creator fee percentages." + }, + "getGlobalProtocolSwapFeePercentage()": { + "notice": "Getter for the current global protocol swap fee." + }, + "getGlobalProtocolYieldFeePercentage()": { + "notice": "Getter for the current global protocol yield fee." + }, + "getPoolCreatorFeeAmounts(address)": { + "notice": "Returns the amount of each pool token allocated to the pool creator for withdrawal." + }, + "getPoolProtocolSwapFeeInfo(address)": { + "notice": "Getter for the current protocol swap fee for a given pool." + }, + "getPoolProtocolYieldFeeInfo(address)": { + "notice": "Getter for the current protocol yield fee for a given pool." + }, + "getProtocolFeeAmounts(address)": { + "notice": "Returns the amount of each pool token allocated to the protocol for withdrawal." + }, + "registerPool(address,address,bool)": { + "notice": "Add pool-specific entries to the protocol swap and yield percentages." + }, + "setGlobalProtocolSwapFeePercentage(uint256)": { + "notice": "Set the global protocol swap fee percentage, used by standard pools." + }, + "setGlobalProtocolYieldFeePercentage(uint256)": { + "notice": "Set the global protocol yield fee percentage, used by standard pools." + }, + "setPoolCreatorSwapFeePercentage(address,uint256)": { + "notice": "Assigns a new pool creator swap fee percentage to the specified pool." + }, + "setPoolCreatorYieldFeePercentage(address,uint256)": { + "notice": "Assigns a new pool creator yield fee percentage to the specified pool." + }, + "setProtocolSwapFeePercentage(address,uint256)": { + "notice": "Override the protocol swap fee percentage for a specific pool." + }, + "setProtocolYieldFeePercentage(address,uint256)": { + "notice": "Override the protocol yield fee percentage for a specific pool." + }, + "updateProtocolSwapFeePercentage(address)": { + "notice": "Override the protocol swap fee percentage for a specific pool." + }, + "updateProtocolYieldFeePercentage(address)": { + "notice": "Override the protocol yield fee percentage for a specific pool." + }, + "vault()": { + "notice": "Get the address of the main Vault contract." + }, + "withdrawPoolCreatorFees(address)": { + "notice": "Withdraw collected pool creator fees for a given pool." + }, + "withdrawPoolCreatorFees(address,address)": { + "notice": "Withdraw collected pool creator fees for a given pool. This is a permissioned function." + }, + "withdrawProtocolFees(address,address)": { + "notice": "Withdraw collected protocol fees for a given pool. This is a permissioned function." + } + }, + "notice": "Contract that handles protocol and pool creator fees for the Vault.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol": { + "IRouterCommon": { + "abi": [ + { + "inputs": [], + "name": "getSender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "internalType": "struct IRouterCommon.PermitApproval[]", + "name": "permitBatch", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "permitSignatures", + "type": "bytes[]" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "nonce", + "type": "uint48" + } + ], + "internalType": "struct IAllowanceTransfer.PermitDetails[]", + "name": "details", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sigDeadline", + "type": "uint256" + } + ], + "internalType": "struct IAllowanceTransfer.PermitBatch", + "name": "permit2Batch", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "permit2Signature", + "type": "bytes" + }, + { + "internalType": "bytes[]", + "name": "multicallData", + "type": "bytes[]" + } + ], + "name": "permitBatchAndCall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getSender()": { + "returns": { + "_0": "address The sender address" + } + }, + "multicall(bytes[])": { + "params": { + "data": "Encoded function calls to be executed in the batch." + }, + "returns": { + "results": "Array of bytes arrays, each representing the return data from each function call executed." + } + }, + "permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])": { + "params": { + "multicallData": "An array of bytes arrays, each representing an encoded function call on this contract", + "permit2Batch": "A batch of permit2 approvals", + "permit2Signature": "A permit2 signature for the batch approval", + "permitBatch": "An array of `PermitApproval` structs, each representing an ERC20 permit request", + "permitSignatures": "An array of bytes, corresponding to the permit request signature in `permitBatch`" + }, + "returns": { + "results": "Array of bytes arrays, each representing the return data from each function call executed" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "getSender()": "5e01eb5a", + "multicall(bytes[])": "ac9650d8", + "permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])": "19c6989f" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"address The sender address\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"}},\"notice\":\"Interface for funtions shared between the `Router` and `BatchRouter`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol\":\"IRouterCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x9ea0802f7ed57459bec19372217cc8dca3dbe3e634b0efba5f3bffce0576e221\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecfd2f7af8d0eab220cdf69651986b348826a8bf6421c8b35f49fd749847912f\",\"dweb:/ipfs/QmYFJqqRVB98NPcCXofhY2o3HX8xiCvuFeu1fJWoeYQWTz\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0xeb7200ec49f3ea7e11b33794136c20ef2d891ccadaa71076f88e260c3598c018\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41577fbfd33a0aeef565f8d15ce93096eacd45c139cc492dbe2b178e6623b820\",\"dweb:/ipfs/QmQJqhQXyNKxYXozYn57LLcXvcPkkb1ZF8qiZFfkZ93EdL\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0x4e636cd794e7d55aa94f4f41799ced22734f29a1299c77679dabe01fcdb9729b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a72d61d25dcaed4a41f18733186fb498e04d178a9da7948a07c1888c44edbac9\",\"dweb:/ipfs/QmTDm4CFGZVNsp2Lweh3hnBj6kaU8hRxeZaVbH96ov4Aqg\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "getSender()": { + "notice": "Get the first sender which initialized the call to Router." + }, + "multicall(bytes[])": { + "notice": "Executes a batch of function calls on this contract." + }, + "permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])": { + "notice": "Permits multiple allowances and executes a batch of function calls on this contract." + } + }, + "notice": "Interface for funtions shared between the `Router` and `BatchRouter`.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol": { + "IVault": { + "abi": [ + { + "inputs": [], + "name": "AfterAddLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterInitializeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterRemoveLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterSwapHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AmountGivenZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "AmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "AmountOutBelowMin", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceNotSettled", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeAddLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeInitializeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeRemoveLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeSwapHookFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "BptAmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "BptAmountOutBelowMin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "BufferAlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "BufferNotInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "BufferSharesInvalidOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BufferSharesInvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "BufferTotalSupplyTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "CannotReceiveEth", + "type": "error" + }, + { + "inputs": [], + "name": "CannotSwapSameToken", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportAddLiquidityCustom", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportDonation", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportRemoveLiquidityCustom", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportUnbalancedLiquidity", + "type": "error" + }, + { + "inputs": [], + "name": "DynamicSwapFeeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "FeePrecisionTooHigh", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "HookAdjustedAmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "HookAdjustedAmountOutBelowMin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "HookAdjustedSwapLimit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolHooksContract", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "poolFactory", + "type": "address" + } + ], + "name": "HookRegistrationFailed", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAddLiquidityKind", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRemoveLiquidityKind", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidToken", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "InvalidUnderlyingToken", + "type": "error" + }, + { + "inputs": [], + "name": "MaxTokens", + "type": "error" + }, + { + "inputs": [], + "name": "MinTokens", + "type": "error" + }, + { + "inputs": [], + "name": "NotEnoughBufferShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expectedUnderlyingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualUnderlyingAmount", + "type": "uint256" + } + ], + "name": "NotEnoughUnderlying", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expectedWrappedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualWrappedAmount", + "type": "uint256" + } + ], + "name": "NotEnoughWrapped", + "type": "error" + }, + { + "inputs": [], + "name": "NotVaultDelegateCall", + "type": "error" + }, + { + "inputs": [], + "name": "PauseBufferPeriodDurationTooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolAlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolInRecoveryMode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotInRecoveryMode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotPaused", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolPauseWindowExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ProtocolFeesExceedTotalCollected", + "type": "error" + }, + { + "inputs": [], + "name": "QueriesDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "QuoteResultSpoofed", + "type": "error" + }, + { + "inputs": [], + "name": "RouterNotTrusted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderIsNotVault", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapFeePercentageTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "SwapFeePercentageTooLow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "SwapLimit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "TokenAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "TokenNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "actualToken", + "type": "address" + } + ], + "name": "TokensMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "TradeAmountTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "VaultBuffersArePaused", + "type": "error" + }, + { + "inputs": [], + "name": "VaultIsNotUnlocked", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotPaused", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPauseWindowDurationTooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPauseWindowExpired", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPaused", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "WrapAmountTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "WrongProtocolFeeControllerDeployment", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + } + ], + "name": "WrongUnderlyingToken", + "type": "error" + }, + { + "inputs": [], + "name": "WrongVaultAdminDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "WrongVaultExtensionDeployment", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "AuthorizerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "burnedShares", + "type": "uint256" + } + ], + "name": "BufferSharesBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "name": "BufferSharesMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountWrapped", + "type": "uint256" + } + ], + "name": "LiquidityAddedToBuffer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountWrapped", + "type": "uint256" + } + ], + "name": "LiquidityRemovedFromBuffer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256[]", + "name": "deltas", + "type": "int256[]" + } + ], + "name": "PoolBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PoolPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "recoveryMode", + "type": "bool" + } + ], + "name": "PoolRecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "indexed": false, + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "address", + "name": "hooksContract", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct HooksConfig", + "name": "hooksConfig", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "indexed": false, + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IProtocolFeeController", + "name": "newProtocolFeeController", + "type": "address" + } + ], + "name": "ProtocolFeeControllerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "swapFeeToken", + "type": "address" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "underlyingToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "burnedShares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawnUnderlying", + "type": "uint256" + } + ], + "name": "Unwrap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "VaultBuffersPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "VaultPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "VaultQueriesDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC20", + "name": "underlyingToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "depositedUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintedShares", + "type": "uint256" + } + ], + "name": "Wrap", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minBptAmountOut", + "type": "uint256" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AddLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountUnderlyingRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountWrappedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sharesOwner", + "type": "address" + } + ], + "name": "addLiquidityToBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "areBuffersPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "collectAggregateFees", + "outputs": [ + { + "internalType": "uint256[]", + "name": "swapFeeAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "yieldFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "swapParams", + "type": "tuple" + } + ], + "name": "computeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disableQuery", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "enum WrappingDirection", + "name": "direction", + "type": "uint8" + }, + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountGivenRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limitRaw", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct BufferWrapOrUnwrapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "erc4626BufferWrapOrUnwrap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getAggregateSwapFeeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getAggregateYieldFeeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getBptRate", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferAsset", + "outputs": [ + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "underlyingBalanceRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "wrappedBalanceRaw", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferMinimumTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityOwner", + "type": "address" + } + ], + "name": "getBufferOwnerShares", + "outputs": [ + { + "internalType": "uint256", + "name": "ownerShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferPeriodDuration", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferPeriodEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferTotalShares", + "outputs": [ + { + "internalType": "uint256", + "name": "bufferShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getCurrentLiveBalances", + "outputs": [ + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getHooksConfig", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "address", + "name": "hooksContract", + "type": "address" + } + ], + "internalType": "struct HooksConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumTradeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumWrapAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNonzeroDeltaCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolConfig", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "staticSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateYieldFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint40", + "name": "tokenDecimalDiffs", + "type": "uint40" + }, + { + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "isPoolRegistered", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolInitialized", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolInRecoveryMode", + "type": "bool" + } + ], + "internalType": "struct PoolConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolData", + "outputs": [ + { + "components": [ + { + "internalType": "PoolConfigBits", + "name": "poolConfigBits", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenInfo[]", + "name": "tokenInfo", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "balancesRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRates", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "decimalScalingFactors", + "type": "uint256[]" + } + ], + "internalType": "struct PoolData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolMinimumTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolRoleAccounts", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getPoolTokenCountAndIndexOfToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokenInfo", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenInfo[]", + "name": "tokenInfo", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "balancesRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lastBalancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokenRates", + "outputs": [ + { + "internalType": "uint256[]", + "name": "decimalScalingFactors", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRates", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeeController", + "outputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getReservesOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getStaticSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenDelta", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultExtension", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "exactAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minBptAmountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [ + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountUnderlyingRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountWrappedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sharesOwner", + "type": "address" + } + ], + "name": "initializeBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolInRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolInitialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isQueryDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isUnlocked", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isVaultPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "pausePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseVaultBuffers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "quoteAndRevert", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "protocolFeeExempt", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "internalType": "address", + "name": "poolHooksContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "registerPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxBptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOut", + "type": "uint256[]" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct RemoveLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "bptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sharesToRemove", + "type": "uint256" + } + ], + "name": "removeLiquidityFromBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "removedUnderlyingBalanceRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "removedWrappedBalanceRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "exactBptAmountIn", + "type": "uint256" + } + ], + "name": "removeLiquidityRecovery", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "setAuthorizer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "newProtocolFeeController", + "type": "address" + } + ], + "name": "setProtocolFeeController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setStaticSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountHint", + "type": "uint256" + } + ], + "name": "settle", + "outputs": [ + { + "internalType": "uint256", + "name": "credit", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountGivenRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limitRaw", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct VaultSwapParams", + "name": "vaultSwapParams", + "type": "tuple" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "unlock", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "unpausePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpauseVaultBuffers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newAggregateSwapFeePercentage", + "type": "uint256" + } + ], + "name": "updateAggregateSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newAggregateYieldFeePercentage", + "type": "uint256" + } + ], + "name": "updateAggregateYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "errors": { + "AmountInAboveMax(address,uint256,uint256)": [ + { + "params": { + "amountIn": "The total token amount in", + "maxAmountIn": "The amount of the limit that has been exceeded", + "tokenIn": "The incoming token" + } + } + ], + "AmountOutBelowMin(address,uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded", + "tokenOut": "The outgoing token" + } + } + ], + "BptAmountInAboveMax(uint256,uint256)": [ + { + "params": { + "amountIn": "The total BPT amount in", + "maxAmountIn": "The amount of the limit that has been exceeded" + } + } + ], + "BptAmountOutBelowMin(uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded" + } + } + ], + "BufferAlreadyInitialized(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "BufferNotInitialized(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "BufferTotalSupplyTooLow(uint256)": [ + { + "params": { + "totalSupply": "The total supply value that was below the minimum" + } + } + ], + "FeePrecisionTooHigh()": [ + { + "details": "Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault." + } + ], + "HookAdjustedAmountInAboveMax(address,uint256,uint256)": [ + { + "params": { + "amountIn": "The total token amount in", + "maxAmountIn": "The amount of the limit that has been exceeded", + "tokenIn": "The incoming token" + } + } + ], + "HookAdjustedAmountOutBelowMin(address,uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded", + "tokenOut": "The outgoing token" + } + } + ], + "HookAdjustedSwapLimit(uint256,uint256)": [ + { + "params": { + "amount": "The total amount in or out", + "limit": "The amount of the limit that has been exceeded" + } + } + ], + "HookRegistrationFailed(address,address,address)": [ + { + "params": { + "pool": "Address of the rejected pool", + "poolFactory": "Address of the pool factory", + "poolHooksContract": "Address of the hook contract that rejected the pool registration" + } + } + ], + "InvalidUnderlyingToken(address)": [ + { + "details": "This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).", + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "NotEnoughUnderlying(address,uint256,uint256)": [ + { + "details": "A wrap/unwrap operation consumed more or returned less underlying tokens than it should." + } + ], + "NotEnoughWrapped(address,uint256,uint256)": [ + { + "details": "A wrap/unwrap operation consumed more or returned less wrapped tokens than it should." + } + ], + "NotVaultDelegateCall()": [ + { + "details": "It can only be called by the Vault via delegatecall." + } + ], + "PercentageAboveMax()": [ + { + "details": "Providing the value might be helpful for debugging." + } + ], + "PoolAlreadyInitialized(address)": [ + { + "params": { + "pool": "The already initialized pool" + } + } + ], + "PoolAlreadyRegistered(address)": [ + { + "params": { + "pool": "The already registered pool" + } + } + ], + "PoolInRecoveryMode(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolNotInRecoveryMode(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolNotInitialized(address)": [ + { + "params": { + "pool": "The uninitialized pool" + } + } + ], + "PoolNotPaused(address)": [ + { + "params": { + "pool": "The unpaused pool" + } + } + ], + "PoolNotRegistered(address)": [ + { + "params": { + "pool": "The unregistered pool" + } + } + ], + "PoolPauseWindowExpired(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolPaused(address)": [ + { + "params": { + "pool": "The paused pool" + } + } + ], + "ProtocolFeesExceedTotalCollected()": [ + { + "details": "This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault." + } + ], + "SenderIsNotVault(address)": [ + { + "params": { + "sender": "The account attempting to call a permissioned function" + } + } + ], + "SwapFeePercentageTooHigh()": [ + { + "details": "The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits." + } + ], + "SwapFeePercentageTooLow()": [ + { + "details": "The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits." + } + ], + "SwapLimit(uint256,uint256)": [ + { + "params": { + "amount": "The total amount in or out", + "limit": "The amount of the limit that has been exceeded" + } + } + ], + "TokenAlreadyRegistered(address)": [ + { + "params": { + "token": "The duplicate token" + } + } + ], + "TokenNotRegistered(address)": [ + { + "params": { + "token": "The unregistered token" + } + } + ], + "TokensMismatch(address,address,address)": [ + { + "params": { + "actualToken": "The actual token found at that index", + "expectedToken": "The correct token at a given index in the pool", + "pool": "Address of the pool" + } + } + ], + "WrapAmountTooSmall(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "WrongUnderlyingToken(address,address)": [ + { + "details": "This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.", + "params": { + "underlyingToken": "The underlying token returned by `asset`", + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ] + }, + "events": { + "AuthorizerChanged(address)": { + "params": { + "newAuthorizer": "The address of the new authorizer" + } + }, + "BufferSharesBurned(address,address,uint256)": { + "details": "The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \"totalSupply\" of a buffer.", + "params": { + "burnedShares": "The amount of \"internal BPT\" shares burned", + "from": "The owner of the burned shares", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "BufferSharesMinted(address,address,uint256)": { + "details": "The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \"totalSupply\" of a buffer.", + "params": { + "issuedShares": "The amount of \"internal BPT\" shares created", + "to": "The owner of the minted shares", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "LiquidityAddedToBuffer(address,uint256,uint256)": { + "details": "The underlying token can be derived from the wrapped token, so it's not included here.", + "params": { + "amountUnderlying": "The amount of the underlying token that was deposited", + "amountWrapped": "The amount of the wrapped token that was deposited", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "LiquidityRemovedFromBuffer(address,uint256,uint256)": { + "details": "The underlying token can be derived from the wrapped token, so it's not included here.", + "params": { + "amountUnderlying": "The amount of the underlying token that was withdrawn", + "amountWrapped": "The amount of the wrapped token that was withdrawn", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "PoolBalanceChanged(address,address,int256[])": { + "params": { + "deltas": "The amount each token changed, sorted in the pool tokens' order", + "liquidityProvider": "The user performing the operation", + "pool": "The pool being registered" + } + }, + "PoolInitialized(address)": { + "params": { + "pool": "The pool being initialized" + } + }, + "PoolPausedStateChanged(address,bool)": { + "params": { + "paused": "True if the pool was paused", + "pool": "The pool that was just paused or unpaused" + } + }, + "PoolRecoveryModeStateChanged(address,bool)": { + "params": { + "pool": "The pool", + "recoveryMode": "True if recovery mode was enabled" + } + }, + "PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))": { + "params": { + "factory": "The factory creating the pool", + "hooksConfig": "Flags indicating which hooks the pool supports and address of hooks contract", + "liquidityManagement": "Supported liquidity management hook flags", + "pauseWindowEndTime": "The pool's pause window end time", + "pool": "The pool being registered", + "roleAccounts": "Addresses the Vault will allow to change certain pool settings", + "swapFeePercentage": "The static swap fee of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + } + }, + "ProtocolFeeControllerChanged(address)": { + "params": { + "newProtocolFeeController": "The address of the new protocol fee controller" + } + }, + "Swap(address,address,address,uint256,uint256,uint256,uint256,address)": { + "params": { + "amountIn": "Number of tokenIn tokens", + "amountOut": "Number of tokenOut tokens", + "pool": "The pool with the tokens being swapped", + "swapFeeAmount": "Swap fee amount paid", + "swapFeePercentage": "Swap fee percentage applied (can differ if dynamic)", + "swapFeeToken": "Token the swap fee was paid in", + "tokenIn": "The token entering the Vault (balance increases)", + "tokenOut": "The token leaving the Vault (balance decreases)" + } + }, + "SwapFeePercentageChanged(address,uint256)": { + "params": { + "swapFeePercentage": "The new swap fee percentage for the pool" + } + }, + "Unwrap(address,address,uint256,uint256)": { + "params": { + "burnedShares": "Number of shares (wrapped tokens) burned", + "underlyingToken": "The underlying token address", + "withdrawnUnderlying": "Number of underlying tokens withdrawn", + "wrappedToken": "The wrapped token address" + } + }, + "VaultBuffersPausedStateChanged(bool)": { + "details": "If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.", + "params": { + "paused": "True if the Vault buffers were paused" + } + }, + "VaultPausedStateChanged(bool)": { + "params": { + "paused": "True if the Vault was paused" + } + }, + "Wrap(address,address,uint256,uint256)": { + "params": { + "depositedUnderlying": "Number of underlying tokens deposited", + "mintedShares": "Number of shares (wrapped tokens) minted", + "underlyingToken": "The underlying token address", + "wrappedToken": "The wrapped token address" + } + } + }, + "kind": "dev", + "methods": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": { + "details": "Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.", + "params": { + "params": "Parameters for the add liquidity (see above for struct definition)" + }, + "returns": { + "amountsIn": "Actual amounts of input tokens", + "bptAmountOut": "Output pool token amount", + "returnData": "Arbitrary (optional) data with an encoded response from the pool" + } + }, + "addLiquidityToBuffer(address,uint256,uint256,address)": { + "details": "The buffer needs to be initialized beforehand.", + "params": { + "amountUnderlyingRaw": "Amount of underlying tokens that will be deposited into the buffer", + "amountWrappedRaw": "Amount of wrapped tokens that will be deposited into the buffer", + "sharesOwner": "Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "issuedShares": "the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + } + }, + "allowance(address,address,address)": { + "params": { + "owner": "Address of the owner", + "spender": "Address of the spender", + "token": "Address of the token" + }, + "returns": { + "_0": "allowance Amount of tokens the spender is allowed to spend" + } + }, + "approve(address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to approve", + "owner": "Address of the owner", + "spender": "Address of the spender" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "areBuffersPaused()": { + "details": "When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible.", + "returns": { + "_0": "buffersPaused True if the Vault buffers are paused" + } + }, + "balanceOf(address,address)": { + "params": { + "account": "Address of the account", + "token": "Address of the token" + }, + "returns": { + "_0": "balance Balance of the account for the token" + } + }, + "collectAggregateFees(address)": { + "details": "Fees are sent to the ProtocolFeeController address.", + "params": { + "pool": "The pool on which all aggregate fees should be collected" + }, + "returns": { + "swapFeeAmounts": "An array with the total swap fees collected, sorted in token registration order", + "yieldFeeAmounts": "An array with the total yield fees collected, sorted in token registration order" + } + }, + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": { + "details": "Reverts if the hook doesn't return the success flag set to `true`.", + "params": { + "pool": "The pool", + "swapParams": "The swap parameters used to compute the fee" + }, + "returns": { + "_0": "dynamicSwapFeePercentage The dynamic swap fee percentage" + } + }, + "disableRecoveryMode(address)": { + "details": "This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.", + "params": { + "pool": "The address of the pool" + } + }, + "enableRecoveryMode(address)": { + "details": "This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, live balances cannot be updated while in Recovery Mode.", + "params": { + "pool": "The address of the pool" + } + }, + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": { + "details": "All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.", + "params": { + "params": "Parameters for the wrap/unwrap operation (see struct definition)" + }, + "returns": { + "amountCalculatedRaw": "Calculated swap amount", + "amountInRaw": "Amount of input tokens for the swap", + "amountOutRaw": "Amount of output tokens from the swap" + } + }, + "getActionId(bytes4)": { + "params": { + "selector": "The 4-byte selector of the permissioned function" + }, + "returns": { + "_0": "actionId The computed actionId" + } + }, + "getAggregateSwapFeeAmount(address,address)": { + "params": { + "pool": "The address of the pool for which aggregate fees have been collected", + "token": "The address of the token in which fees have been accumulated" + }, + "returns": { + "_0": "swapFeeAmount The total amount of fees accumulated in the specified token" + } + }, + "getAggregateYieldFeeAmount(address,address)": { + "params": { + "pool": "The address of the pool for which aggregate fees have been collected", + "token": "The address of the token in which fees have been accumulated" + }, + "returns": { + "_0": "yieldFeeAmount The total amount of fees accumulated in the specified token" + } + }, + "getAuthorizer()": { + "details": "The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.", + "returns": { + "_0": "authorizer Address of the authorizer contract" + } + }, + "getBptRate(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "rate": "BPT rate" + } + }, + "getBufferAsset(address)": { + "details": "The asset can never change after buffer initialization.", + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "underlyingToken": "Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized." + } + }, + "getBufferBalance(address)": { + "details": "All values are in native token decimals of the wrapped or underlying tokens.", + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "underlyingBalanceRaw": "Amount of underlying tokens deposited into the buffer, in native token decimals", + "wrappedBalanceRaw": "Amount of wrapped tokens deposited into the buffer, in native token decimals" + } + }, + "getBufferMinimumTotalSupply()": { + "details": "This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.", + "returns": { + "_0": "minimumTotalSupply The minimum total supply a buffer can have after initialization" + } + }, + "getBufferOwnerShares(address,address)": { + "params": { + "liquidityOwner": "Address of the user that owns liquidity in the wrapped token's buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "ownerShares": "Amount of shares allocated to the liquidity owner, in native underlying token decimals" + } + }, + "getBufferPeriodDuration()": { + "details": "This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused.", + "returns": { + "_0": "bufferPeriodDuration The length of the buffer period in seconds" + } + }, + "getBufferPeriodEndTime()": { + "details": "This value is immutable. If already paused, the Vault can be unpaused until this timestamp.", + "returns": { + "_0": "bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused" + } + }, + "getBufferTotalShares(address)": { + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "bufferShares": "Amount of supply shares of the buffer, in native underlying token decimals" + } + }, + "getCurrentLiveBalances(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "balancesLiveScaled18": "Token balances after paying yield fees, applying decimal scaling and rates" + } + }, + "getHooksConfig(address)": { + "details": "The `HooksConfig` contains flags indicating which pool hooks are implemented.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "hooksConfig The hooks configuration as a `HooksConfig` struct" + } + }, + "getMaximumPoolTokens()": { + "returns": { + "_0": "maxTokens The maximum token count of a pool" + } + }, + "getMinimumPoolTokens()": { + "details": "We expect the vast majority of pools to be 2-token.", + "returns": { + "_0": "minTokens The minimum token count of a pool" + } + }, + "getMinimumTradeAmount()": { + "details": "This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).", + "returns": { + "_0": "minimumTradeAmount The minimum trade amount as an 18-decimal floating point number" + } + }, + "getMinimumWrapAmount()": { + "details": "This limit is applied to the wrap operation amount, in native underlying token decimals.", + "returns": { + "_0": "minimumWrapAmount The minimum wrap amount in native underlying token decimals" + } + }, + "getNonzeroDeltaCount()": { + "returns": { + "_0": "nonzeroDeltaCount The current value of `_nonzeroDeltaCount`" + } + }, + "getPauseWindowEndTime()": { + "details": "This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance.", + "returns": { + "_0": "pauseWindowEndTime The timestamp when the Vault's pause window ends" + } + }, + "getPoolConfig(address)": { + "details": "The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "poolConfig The pool configuration as a `PoolConfig` struct" + } + }, + "getPoolData(address)": { + "details": "This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.", + "params": { + "pool": "The address of the pool" + }, + "returns": { + "_0": "poolData The `PoolData` result" + } + }, + "getPoolMinimumTotalSupply()": { + "details": "This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.", + "returns": { + "_0": "minimumTotalSupply The minimum total supply a pool can have after initialization" + } + }, + "getPoolPausedState(address)": { + "details": "Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period.", + "params": { + "pool": "The pool whose data is requested" + }, + "returns": { + "_0": "paused True if the Pool is paused", + "_1": "poolPauseWindowEndTime The timestamp of the end of the Pool's pause window", + "_2": "poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)", + "_3": "pauseManager The pause manager, or the zero address" + } + }, + "getPoolRoleAccounts(address)": { + "params": { + "pool": "The address of the pool whose roles are being queried" + }, + "returns": { + "_0": "roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)" + } + }, + "getPoolTokenCountAndIndexOfToken(address,address)": { + "details": "Reverts if the pool is not registered, or if the token does not belong to the pool.", + "params": { + "pool": "Address of the pool", + "token": "Address of the token" + }, + "returns": { + "_0": "tokenCount Number of tokens in the pool", + "_1": "index Index corresponding to the given token in the pool's token list" + } + }, + "getPoolTokenInfo(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "balancesRaw": "Current native decimal balances of the pool tokens, sorted in pool registration order", + "lastBalancesLiveScaled18": "Last saved live balances, sorted in token registration order", + "tokenInfo": "Token info structs (type, rate provider, yield flag), sorted in pool registration order", + "tokens": "The pool tokens, sorted in registration order" + } + }, + "getPoolTokenRates(address)": { + "details": "This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "decimalScalingFactors": "Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens", + "tokenRates": "18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens" + } + }, + "getPoolTokens(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "tokens List of tokens in the pool" + } + }, + "getProtocolFeeController()": { + "returns": { + "_0": "protocolFeeController Address of the ProtocolFeeController" + } + }, + "getReservesOf(address)": { + "params": { + "token": "The token for which to retrieve the reserve" + }, + "returns": { + "_0": "reserveAmount The amount of reserves for the given token" + } + }, + "getStaticSwapFeePercentage(address)": { + "params": { + "pool": "The address of the pool whose static swap fee percentage is being queried" + }, + "returns": { + "_0": "swapFeePercentage The current static swap fee percentage for the specified pool" + } + }, + "getTokenDelta(address)": { + "details": "This function allows reading the value from the `_tokenDeltas` mapping.", + "params": { + "token": "The token for which the delta is being fetched" + }, + "returns": { + "_0": "tokenDelta The delta of the specified token" + } + }, + "getVaultAdmin()": { + "details": "The VaultAdmin contract mostly implements permissioned functions.", + "returns": { + "_0": "vaultAdmin The address of the Vault admin" + } + }, + "getVaultExtension()": { + "details": "Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.", + "returns": { + "_0": "vaultExtension Address of the VaultExtension" + } + }, + "getVaultPausedState()": { + "returns": { + "_0": "paused True if the Vault is paused", + "_1": "vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window", + "_2": "vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period" + } + }, + "initialize(address,address,address[],uint256[],uint256,bytes)": { + "params": { + "exactAmountsIn": "Exact amounts of input tokens", + "minBptAmountOut": "Minimum amount of output pool tokens", + "pool": "Address of the pool to initialize", + "to": "Address that will receive the output BPT", + "tokens": "Tokens used to seed the pool (must match the registered tokens)", + "userData": "Additional (optional) data required for adding initial liquidity" + }, + "returns": { + "bptAmountOut": "Output pool token amount" + } + }, + "initializeBuffer(address,uint256,uint256,address)": { + "params": { + "amountUnderlyingRaw": "Amount of underlying tokens that will be deposited into the buffer", + "amountWrappedRaw": "Amount of wrapped tokens that will be deposited into the buffer", + "sharesOwner": "Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "issuedShares": "the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + } + }, + "isPoolInRecoveryMode(address)": { + "details": "Recovery Mode enables a safe proportional withdrawal path, with no external calls.", + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "recoveryMode True if the pool is in Recovery Mode, false otherwise" + } + }, + "isPoolInitialized(address)": { + "details": "An initialized pool can be considered registered as well.", + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "initialized True if the pool is initialized, false otherwise" + } + }, + "isPoolPaused(address)": { + "details": "If a pool is paused, all non-Recovery Mode state-changing operations will revert.", + "params": { + "pool": "The pool to be checked" + }, + "returns": { + "_0": "paused True if the pool is paused" + } + }, + "isPoolRegistered(address)": { + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "registered True if the pool is registered, false otherwise" + } + }, + "isQueryDisabled()": { + "details": "This is a one-way switch. Once queries are disabled, they can never be re-enabled. The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).", + "returns": { + "_0": "queryDisabled If true, then queries are disabled" + } + }, + "isUnlocked()": { + "details": "The Vault must be unlocked to perform state-changing liquidity operations.", + "returns": { + "_0": "unlocked True if the Vault is unlocked, false otherwise" + } + }, + "isVaultPaused()": { + "details": "If the Vault is paused, all non-Recovery Mode state-changing operations will revert.", + "returns": { + "_0": "paused True if the Vault is paused" + } + }, + "pausePool(address)": { + "details": "This is a permissioned function that will only work during the Pause Window set during pool factory deployment.", + "params": { + "pool": "The pool being paused" + } + }, + "pauseVault()": { + "details": "This is a permissioned function that will only work during the Pause Window set during deployment." + }, + "pauseVaultBuffers()": { + "details": "When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`)." + }, + "quote(bytes)": { + "details": "Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + }, + "returns": { + "result": "Resulting data from the call" + } + }, + "quoteAndRevert(bytes)": { + "details": "Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + } + }, + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": { + "details": "A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.", + "params": { + "liquidityManagement": "Liquidity management flags with implemented methods", + "pauseWindowEndTime": "The timestamp after which it is no longer possible to pause the pool", + "pool": "The address of the pool being registered", + "poolHooksContract": "Contract that implements the hooks for the pool", + "protocolFeeExempt": "If true, the pool's initial aggregate fees will be set to 0", + "roleAccounts": "Addresses the Vault will allow to change certain pool settings", + "swapFeePercentage": "The initial static swap fee percentage of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + } + }, + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": { + "details": "Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).", + "params": { + "params": "Parameters for the remove liquidity (see above for struct definition)" + }, + "returns": { + "amountsOut": "Actual amounts of output tokens", + "bptAmountIn": "Actual amount of BPT burned", + "returnData": "Arbitrary (optional) data with an encoded response from the pool" + } + }, + "removeLiquidityFromBuffer(address,uint256)": { + "details": "Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.", + "params": { + "sharesToRemove": "Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals.", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "removedUnderlyingBalanceRaw": "Amount of underlying tokens returned to the user", + "removedWrappedBalanceRaw": "Amount of wrapped tokens returned to the user" + } + }, + "removeLiquidityRecovery(address,address,uint256)": { + "params": { + "exactBptAmountIn": "Input pool token amount", + "from": "Address of user to burn pool tokens from", + "pool": "Address of the pool" + }, + "returns": { + "amountsOut": "Actual calculated amounts of output tokens, sorted in token registration order" + } + }, + "sendTo(address,address,uint256)": { + "details": "There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.", + "params": { + "amount": "Amount of tokens to send", + "to": "Recipient address", + "token": "Address of the token" + } + }, + "setAuthorizer(address)": { + "details": "This is a permissioned call. Emits an `AuthorizerChanged` event.", + "params": { + "newAuthorizer": "The address of the new authorizer" + } + }, + "setProtocolFeeController(address)": { + "details": "This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.", + "params": { + "newProtocolFeeController": "The address of the new Protocol Fee Controller" + } + }, + "setStaticSwapFeePercentage(address,uint256)": { + "details": "This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.", + "params": { + "pool": "The address of the pool for which the static swap fee will be changed", + "swapFeePercentage": "The new swap fee percentage to apply to the pool" + } + }, + "settle(address,uint256)": { + "details": "Protects the caller against leftover dust in the vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.", + "params": { + "amountHint": "Amount paid as reported by the caller", + "token": "Address of the token" + }, + "returns": { + "credit": "Credit received in return of the payment" + } + }, + "swap((uint8,address,address,address,uint256,uint256,bytes))": { + "details": "All parameters are given in raw token decimal encoding.", + "params": { + "vaultSwapParams": "Parameters for the swap (see above for struct definition)" + }, + "returns": { + "amountCalculatedRaw": "Calculated swap amount", + "amountInRaw": "Amount of input tokens for the swap", + "amountOutRaw": "Amount of output tokens from the swap" + } + }, + "totalSupply(address)": { + "params": { + "token": "The token address" + }, + "returns": { + "_0": "totalSupply Total supply of the token" + } + }, + "transfer(address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to transfer", + "owner": "Address of the owner", + "to": "Address of the recipient" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "transferFrom(address,address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to transfer", + "from": "Address of the sender", + "spender": "Address allowed to perform the transfer", + "to": "Address of the recipient" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "unlock(bytes)": { + "details": "Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + }, + "returns": { + "result": "Resulting data from the call" + } + }, + "unpausePool(address)": { + "details": "This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.", + "params": { + "pool": "The pool being unpaused" + } + }, + "unpauseVault()": { + "details": "This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires." + }, + "unpauseVaultBuffers()": { + "details": "When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. This is a permissioned call." + }, + "updateAggregateSwapFeePercentage(address,uint256)": { + "details": "Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.", + "params": { + "newAggregateSwapFeePercentage": "The new aggregate swap fee percentage", + "pool": "The pool whose fee will be updated" + } + }, + "updateAggregateYieldFeePercentage(address,uint256)": { + "details": "Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.", + "params": { + "newAggregateYieldFeePercentage": "The new aggregate yield fee percentage", + "pool": "The pool whose fee will be updated" + } + }, + "vault()": { + "details": "Returns the main Vault address." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": "4af29ec4", + "addLiquidityToBuffer(address,uint256,uint256,address)": "1a2e575e", + "allowance(address,address,address)": "927da105", + "approve(address,address,uint256)": "e1f21c67", + "areBuffersPaused()": "55cba7fe", + "balanceOf(address,address)": "f7888aec", + "collectAggregateFees(address)": "8f4ab9ca", + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": "4d472bdd", + "disableQuery()": "de1a36a6", + "disableRecoveryMode(address)": "bffb78b2", + "enableRecoveryMode(address)": "dc3f574e", + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": "6c1a0324", + "getActionId(bytes4)": "851c1bb3", + "getAggregateSwapFeeAmount(address,address)": "85e0b999", + "getAggregateYieldFeeAmount(address,address)": "00fdfa13", + "getAuthorizer()": "aaabadc5", + "getBptRate(address)": "4f037ee7", + "getBufferAsset(address)": "0387587d", + "getBufferBalance(address)": "4021fe0f", + "getBufferMinimumTotalSupply()": "26a8a991", + "getBufferOwnerShares(address,address)": "9385e39a", + "getBufferPeriodDuration()": "20c1fb7a", + "getBufferPeriodEndTime()": "cd51c12f", + "getBufferTotalShares(address)": "f2784e07", + "getCurrentLiveBalances(address)": "535cfd8a", + "getHooksConfig(address)": "ce8630d4", + "getMaximumPoolTokens()": "2e42f4d5", + "getMinimumPoolTokens()": "a8175b27", + "getMinimumTradeAmount()": "e2cb0ba0", + "getMinimumWrapAmount()": "53956aa2", + "getNonzeroDeltaCount()": "db817187", + "getPauseWindowEndTime()": "8a8d123a", + "getPoolConfig(address)": "f29486a1", + "getPoolData(address)": "13d21cdf", + "getPoolMinimumTotalSupply()": "d0965a6b", + "getPoolPausedState(address)": "15e32046", + "getPoolRoleAccounts(address)": "e9ddeb26", + "getPoolTokenCountAndIndexOfToken(address,address)": "c9c1661b", + "getPoolTokenInfo(address)": "67e0e076", + "getPoolTokenRates(address)": "7e361bde", + "getPoolTokens(address)": "ca4f2803", + "getProtocolFeeController()": "85f2dbd4", + "getReservesOf(address)": "96787092", + "getStaticSwapFeePercentage(address)": "b45090f9", + "getTokenDelta(address)": "9e825ff5", + "getVaultAdmin()": "1ba0ae45", + "getVaultExtension()": "b9a8effa", + "getVaultPausedState()": "85c8c015", + "initialize(address,address,address[],uint256[],uint256,bytes)": "ba8a2be0", + "initializeBuffer(address,uint256,uint256,address)": "40058e35", + "isPoolInRecoveryMode(address)": "be7d628a", + "isPoolInitialized(address)": "532cec7c", + "isPoolPaused(address)": "6c9bc732", + "isPoolRegistered(address)": "c673bdaf", + "isQueryDisabled()": "b4aef0ab", + "isUnlocked()": "8380edb7", + "isVaultPaused()": "098401f5", + "pausePool(address)": "55aca1ec", + "pauseVault()": "9e0879c2", + "pauseVaultBuffers()": "e085c5a8", + "quote(bytes)": "edfa3568", + "quoteAndRevert(bytes)": "757d64b3", + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": "eeec802f", + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": "21457897", + "removeLiquidityFromBuffer(address,uint256)": "35b60a19", + "removeLiquidityRecovery(address,address,uint256)": "3a2d133b", + "sendTo(address,address,uint256)": "ae639329", + "setAuthorizer(address)": "058a628f", + "setProtocolFeeController(address)": "2d771389", + "setStaticSwapFeePercentage(address,uint256)": "d15126ba", + "settle(address,uint256)": "15afd409", + "swap((uint8,address,address,address,uint256,uint256,bytes))": "2bfb780c", + "totalSupply(address)": "e4dc2aa4", + "transfer(address,address,uint256)": "beabacc8", + "transferFrom(address,address,address,uint256)": "15dacbea", + "unlock(bytes)": "48c89491", + "unpausePool(address)": "f21c38cd", + "unpauseVault()": "0b7562be", + "unpauseVaultBuffers()": "b9212b49", + "updateAggregateSwapFeePercentage(address,uint256)": "5e0b06f4", + "updateAggregateYieldFeePercentage(address,uint256)": "e253670a", + "vault()": "fbfa77cf" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"}],\"name\":\"PoolBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"swapFeeToken\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PercentageAboveMax()\":[{\"details\":\"Providing the value might be helpful for debugging.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAddedToBuffer(address,uint256,uint256)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolBalanceChanged(address,address,int256[])\":{\"params\":{\"deltas\":\"The amount each token changed, sorted in the pool tokens' order\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool being registered\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256,address)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"swapFeeToken\":\"Token the swap fee was paid in\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,address,uint256,uint256)\":{\"params\":{\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"underlyingToken\":\"The underlying token address\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,address,uint256,uint256)\":{\"params\":{\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"underlyingToken\":\"The underlying token address\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"allowance Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible.\",\"returns\":{\"_0\":\"buffersPaused True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"balance Balance of the account for the token\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"_0\":\"dynamicSwapFeePercentage The dynamic swap fee percentage\"}},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, live balances cannot be updated while in Recovery Mode.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"actionId The computed actionId\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"swapFeeAmount The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"yieldFeeAmount The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"_0\":\"authorizer Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"_0\":\"minimumTotalSupply The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused.\",\"returns\":{\"_0\":\"bufferPeriodDuration The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp.\",\"returns\":{\"_0\":\"bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"hooksConfig The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"_0\":\"maxTokens The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"_0\":\"minTokens The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"_0\":\"minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"_0\":\"minimumWrapAmount The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"_0\":\"nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance.\",\"returns\":{\"_0\":\"pauseWindowEndTime The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"poolConfig The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolData The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"_0\":\"minimumTotalSupply The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"_0\":\"paused True if the Pool is paused\",\"_1\":\"poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\",\"_2\":\"poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\",\"_3\":\"pauseManager The pause manager, or the zero address\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"_0\":\"roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"tokenCount Number of tokens in the pool\",\"_1\":\"index Index corresponding to the given token in the pool's token list\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in pool registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in pool registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"tokens List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"protocolFeeController Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"_0\":\"reserveAmount The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"_0\":\"swapFeePercentage The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"_0\":\"tokenDelta The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"_0\":\"vaultAdmin The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"_0\":\"vaultExtension Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"returns\":{\"_0\":\"paused True if the Vault is paused\",\"_1\":\"vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\",\"_2\":\"vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"recoveryMode True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"initialized True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"_0\":\"paused True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"registered True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"This is a one-way switch. Once queries are disabled, they can never be re-enabled. The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\",\"returns\":{\"_0\":\"queryDisabled If true, then queries are disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"_0\":\"unlocked True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations will revert.\",\"returns\":{\"_0\":\"paused True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment.\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`).\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals.\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"_0\":\"totalSupply Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose fee will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose fee will be updated\"}},\"vault()\":{\"details\":\"Returns the main Vault address.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAddedToBuffer(address,uint256,uint256)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolBalanceChanged(address,address,int256[])\":{\"notice\":\"Pool balances have changed (e.g., after initialization, add/remove liquidity).\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256,address)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,address,uint256,uint256)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, permanently disabling query functionality.\"},\"Wrap(address,address,uint256,uint256)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables queries functionality on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Checks if the queries enabled on the Vault.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256)\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore the Vault to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "AfterAddLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert." + } + ], + "AfterInitializeHookFailed()": [ + { + "notice": "The pool has returned false to the afterInitialize hook, indicating the transaction should revert." + } + ], + "AfterRemoveLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert." + } + ], + "AfterSwapHookFailed()": [ + { + "notice": "The pool has returned false to the afterSwap hook, indicating the transaction should revert." + } + ], + "AmountGivenZero()": [ + { + "notice": "The user tried to swap zero tokens." + } + ], + "AmountInAboveMax(address,uint256,uint256)": [ + { + "notice": "A required amountIn exceeds the maximum limit specified for the operation." + } + ], + "AmountOutBelowMin(address,uint256,uint256)": [ + { + "notice": "The actual amount out is below the minimum limit specified for the operation." + } + ], + "BalanceNotSettled()": [ + { + "notice": "A transient accounting operation completed with outstanding token deltas." + } + ], + "BeforeAddLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert." + } + ], + "BeforeInitializeHookFailed()": [ + { + "notice": "The pool has returned false to the beforeInitialize hook, indicating the transaction should revert." + } + ], + "BeforeRemoveLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert." + } + ], + "BeforeSwapHookFailed()": [ + { + "notice": "The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + } + ], + "BptAmountInAboveMax(uint256,uint256)": [ + { + "notice": "The required BPT amount in exceeds the maximum limit specified for the operation." + } + ], + "BptAmountOutBelowMin(uint256,uint256)": [ + { + "notice": "The BPT amount received from adding liquidity is below the minimum specified for the operation." + } + ], + "BufferAlreadyInitialized(address)": [ + { + "notice": "The buffer for the given wrapped token was already initialized." + } + ], + "BufferNotInitialized(address)": [ + { + "notice": "The buffer for the given wrapped token was not initialized." + } + ], + "BufferSharesInvalidOwner()": [ + { + "notice": "Buffer shares were burned from the zero address." + } + ], + "BufferSharesInvalidReceiver()": [ + { + "notice": "Buffer shares were minted to the zero address." + } + ], + "BufferTotalSupplyTooLow(uint256)": [ + { + "notice": "The total supply of a buffer can't be lower than the absolute minimum." + } + ], + "CannotReceiveEth()": [ + { + "notice": "The contract should not receive ETH." + } + ], + "CannotSwapSameToken()": [ + { + "notice": "The user attempted to swap a token for itself." + } + ], + "DoesNotSupportAddLiquidityCustom()": [ + { + "notice": "Pool does not support adding liquidity with a customized input." + } + ], + "DoesNotSupportDonation()": [ + { + "notice": "Pool does not support adding liquidity through donation." + } + ], + "DoesNotSupportRemoveLiquidityCustom()": [ + { + "notice": "Pool does not support removing liquidity with a customized input." + } + ], + "DoesNotSupportUnbalancedLiquidity()": [ + { + "notice": "Pool does not support adding / removing liquidity with an unbalanced input." + } + ], + "DynamicSwapFeeHookFailed()": [ + { + "notice": "The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + } + ], + "FeePrecisionTooHigh()": [ + { + "notice": "Primary fee percentages result in an aggregate fee that cannot be stored with the required precision." + } + ], + "HookAdjustedAmountInAboveMax(address,uint256,uint256)": [ + { + "notice": "A hook adjusted amountIn exceeds the maximum limit specified for the operation." + } + ], + "HookAdjustedAmountOutBelowMin(address,uint256,uint256)": [ + { + "notice": "The hook adjusted amount out is below the minimum limit specified for the operation." + } + ], + "HookAdjustedSwapLimit(uint256,uint256)": [ + { + "notice": "A hook adjusted amount in or out has exceeded the limit specified in the swap request." + } + ], + "HookRegistrationFailed(address,address,address)": [ + { + "notice": "A hook contract rejected a pool on registration." + } + ], + "InvalidAddLiquidityKind()": [ + { + "notice": "Add liquidity kind not supported." + } + ], + "InvalidRemoveLiquidityKind()": [ + { + "notice": "Remove liquidity kind not supported." + } + ], + "InvalidToken()": [ + { + "notice": "Invalid tokens (e.g., zero) cannot be registered." + } + ], + "InvalidTokenConfiguration()": [ + { + "notice": "The data in a TokenConfig struct is inconsistent or unsupported." + } + ], + "InvalidTokenType()": [ + { + "notice": "The token type given in a TokenConfig during pool registration is invalid." + } + ], + "InvalidUnderlyingToken(address)": [ + { + "notice": "A wrapped token reported the zero address as its underlying token asset." + } + ], + "MaxTokens()": [ + { + "notice": "The token count is above the maximum allowed." + } + ], + "MinTokens()": [ + { + "notice": "The token count is below the minimum allowed." + } + ], + "NotEnoughBufferShares()": [ + { + "notice": "The user is trying to remove more than their allocated shares from the buffer." + } + ], + "NotVaultDelegateCall()": [ + { + "notice": "The `VaultExtension` contract was called by an account directly." + } + ], + "PauseBufferPeriodDurationTooLarge()": [ + { + "notice": "The caller specified a buffer period longer than the maximum." + } + ], + "PercentageAboveMax()": [ + { + "notice": "A given percentage is above the maximum (usually FixedPoint.ONE, or 1e18 wei)." + } + ], + "PoolAlreadyInitialized(address)": [ + { + "notice": "A pool has already been initialized. `initialize` may only be called once." + } + ], + "PoolAlreadyRegistered(address)": [ + { + "notice": "A pool has already been registered. `registerPool` may only be called once." + } + ], + "PoolInRecoveryMode(address)": [ + { + "notice": "Cannot enable recovery mode when already enabled." + } + ], + "PoolNotInRecoveryMode(address)": [ + { + "notice": "Cannot disable recovery mode when not enabled." + } + ], + "PoolNotInitialized(address)": [ + { + "notice": "A referenced pool has not been initialized." + } + ], + "PoolNotPaused(address)": [ + { + "notice": "Governance tried to unpause the Pool when it was not paused." + } + ], + "PoolNotRegistered(address)": [ + { + "notice": "A pool has not been registered." + } + ], + "PoolPauseWindowExpired(address)": [ + { + "notice": "Governance tried to pause a Pool after the pause period expired." + } + ], + "PoolPaused(address)": [ + { + "notice": "A user tried to perform an operation involving a paused Pool." + } + ], + "ProtocolFeesExceedTotalCollected()": [ + { + "notice": "Error raised when there is an overflow in the fee calculation." + } + ], + "QueriesDisabled()": [ + { + "notice": "A user tried to execute a query operation when they were disabled." + } + ], + "QuoteResultSpoofed()": [ + { + "notice": "Quote reverted with a reserved error code." + } + ], + "RouterNotTrusted()": [ + { + "notice": "An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)." + } + ], + "SenderIsNotVault(address)": [ + { + "notice": "Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function)." + } + ], + "SenderNotAllowed()": [ + { + "notice": "The sender does not have permission to call a function." + } + ], + "SwapFeePercentageTooHigh()": [ + { + "notice": "Error raised when the swap fee percentage is greater than the maximum allowed value." + } + ], + "SwapFeePercentageTooLow()": [ + { + "notice": "Error raised when the swap fee percentage is less than the minimum allowed value." + } + ], + "SwapLimit(uint256,uint256)": [ + { + "notice": "An amount in or out has exceeded the limit specified in the swap request." + } + ], + "TokenAlreadyRegistered(address)": [ + { + "notice": "A token was already registered (i.e., it is a duplicate in the pool)." + } + ], + "TokenNotRegistered(address)": [ + { + "notice": "The user attempted to operate with a token that is not in the pool." + } + ], + "TokensMismatch(address,address,address)": [ + { + "notice": "The token list passed into an operation does not match the pool tokens in the pool." + } + ], + "TradeAmountTooSmall()": [ + { + "notice": "The amount given or calculated for an operation is below the minimum limit." + } + ], + "VaultBuffersArePaused()": [ + { + "notice": "Buffer operation attempted while vault buffers are paused." + } + ], + "VaultIsNotUnlocked()": [ + { + "notice": "A user called a Vault function (swap, add/remove liquidity) outside the lock context." + } + ], + "VaultNotPaused()": [ + { + "notice": "Governance tried to unpause the Vault when it was not paused." + } + ], + "VaultPauseWindowDurationTooLarge()": [ + { + "notice": "The caller specified a pause window period longer than the maximum." + } + ], + "VaultPauseWindowExpired()": [ + { + "notice": "Governance tried to pause the Vault after the pause period expired." + } + ], + "VaultPaused()": [ + { + "notice": "A user tried to perform an operation while the Vault was paused." + } + ], + "WrapAmountTooSmall(address)": [ + { + "notice": "The amount given to wrap/unwrap was too small, which can introduce rounding issues." + } + ], + "WrongProtocolFeeControllerDeployment()": [ + { + "notice": "The `ProtocolFeeController` contract was configured with an incorrect Vault address." + } + ], + "WrongUnderlyingToken(address,address)": [ + { + "notice": "The wrapped token asset does not match the underlying token." + } + ], + "WrongVaultAdminDeployment()": [ + { + "notice": "The `VaultAdmin` contract was configured with an incorrect Vault address." + } + ], + "WrongVaultExtensionDeployment()": [ + { + "notice": "The `VaultExtension` contract was configured with an incorrect Vault address." + } + ] + }, + "events": { + "AuthorizerChanged(address)": { + "notice": "A new authorizer is set by `setAuthorizer`." + }, + "BufferSharesBurned(address,address,uint256)": { + "notice": "Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token." + }, + "BufferSharesMinted(address,address,uint256)": { + "notice": "Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token." + }, + "LiquidityAddedToBuffer(address,uint256,uint256)": { + "notice": "Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token." + }, + "LiquidityRemovedFromBuffer(address,uint256,uint256)": { + "notice": "Liquidity was removed from an ERC4626 buffer." + }, + "PoolBalanceChanged(address,address,int256[])": { + "notice": "Pool balances have changed (e.g., after initialization, add/remove liquidity)." + }, + "PoolInitialized(address)": { + "notice": "A Pool was initialized by calling `initialize`." + }, + "PoolPausedStateChanged(address,bool)": { + "notice": "A Pool's pause status has changed." + }, + "PoolRecoveryModeStateChanged(address,bool)": { + "notice": "Recovery mode has been enabled or disabled for a pool." + }, + "PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))": { + "notice": "A Pool was registered by calling `registerPool`." + }, + "ProtocolFeeControllerChanged(address)": { + "notice": "A new protocol fee controller is set by `setProtocolFeeController`." + }, + "Swap(address,address,address,uint256,uint256,uint256,uint256,address)": { + "notice": "A swap has occurred." + }, + "SwapFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the swap fee percentage of a pool is updated." + }, + "Unwrap(address,address,uint256,uint256)": { + "notice": "An unwrap operation has occurred." + }, + "VaultBuffersPausedStateChanged(bool)": { + "notice": "The Vault buffers pause status has changed." + }, + "VaultPausedStateChanged(bool)": { + "notice": "The Vault's pause status has changed." + }, + "VaultQueriesDisabled()": { + "notice": "`disableQuery` has been called on the Vault, permanently disabling query functionality." + }, + "Wrap(address,address,uint256,uint256)": { + "notice": "A wrap operation has occurred." + } + }, + "kind": "user", + "methods": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": { + "notice": "Adds liquidity to a pool." + }, + "addLiquidityToBuffer(address,uint256,uint256,address)": { + "notice": "Adds liquidity to an internal ERC4626 buffer in the Vault." + }, + "allowance(address,address,address)": { + "notice": "Gets the allowance of a spender for a given ERC20 token and owner." + }, + "approve(address,address,uint256)": { + "notice": "Approves a spender to spend pool tokens on behalf of sender." + }, + "areBuffersPaused()": { + "notice": "Indicates whether the Vault buffers are paused." + }, + "balanceOf(address,address)": { + "notice": "Gets the balance of an account for a given ERC20 token." + }, + "collectAggregateFees(address)": { + "notice": "Collects accumulated aggregate swap and yield fees for the specified pool." + }, + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": { + "notice": "Query the current dynamic swap fee percentage of a pool, given a set of swap parameters." + }, + "disableQuery()": { + "notice": "Disables queries functionality on the Vault. Can only be called by governance." + }, + "disableRecoveryMode(address)": { + "notice": "Disable recovery mode for a pool." + }, + "enableRecoveryMode(address)": { + "notice": "Enable recovery mode for a pool." + }, + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": { + "notice": "Wraps/unwraps tokens based on the parameters provided." + }, + "getActionId(bytes4)": { + "notice": "Returns the action identifier associated with the external function described by `selector`." + }, + "getAggregateSwapFeeAmount(address,address)": { + "notice": "Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool." + }, + "getAggregateYieldFeeAmount(address,address)": { + "notice": "Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool." + }, + "getAuthorizer()": { + "notice": "Returns the Authorizer address." + }, + "getBptRate(address)": { + "notice": "The current rate of a pool token (BPT) = invariant / totalSupply." + }, + "getBufferAsset(address)": { + "notice": "Returns the asset registered for a given wrapped token." + }, + "getBufferBalance(address)": { + "notice": "Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the vault." + }, + "getBufferMinimumTotalSupply()": { + "notice": "Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault." + }, + "getBufferOwnerShares(address,address)": { + "notice": "Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer." + }, + "getBufferPeriodDuration()": { + "notice": "Returns the Vault's buffer period duration." + }, + "getBufferPeriodEndTime()": { + "notice": "Returns the Vault's buffer period end time." + }, + "getBufferTotalShares(address)": { + "notice": "Returns the supply shares (internal buffer BPT) of the ERC4626 buffer." + }, + "getCurrentLiveBalances(address)": { + "notice": "Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order." + }, + "getHooksConfig(address)": { + "notice": "Gets the hooks configuration parameters of a pool." + }, + "getMaximumPoolTokens()": { + "notice": "Get the maximum number of tokens in a pool." + }, + "getMinimumPoolTokens()": { + "notice": "Get the minimum number of tokens in a pool." + }, + "getMinimumTradeAmount()": { + "notice": "Get the minimum trade amount in a pool operation." + }, + "getMinimumWrapAmount()": { + "notice": "Get the minimum wrap amount in a buffer operation." + }, + "getNonzeroDeltaCount()": { + "notice": "Returns the count of non-zero deltas." + }, + "getPauseWindowEndTime()": { + "notice": "Returns the Vault's pause window end time." + }, + "getPoolConfig(address)": { + "notice": "Gets the configuration parameters of a pool." + }, + "getPoolData(address)": { + "notice": "Returns comprehensive pool data for the given pool." + }, + "getPoolMinimumTotalSupply()": { + "notice": "Get the minimum total supply of pool tokens (BPT) for an initialized pool." + }, + "getPoolPausedState(address)": { + "notice": "Returns the paused status, and end times of the Pool's pause window and buffer period." + }, + "getPoolRoleAccounts(address)": { + "notice": "Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)" + }, + "getPoolTokenCountAndIndexOfToken(address,address)": { + "notice": "Gets the index of a token in a given pool." + }, + "getPoolTokenInfo(address)": { + "notice": "Gets the raw data for a pool: tokens, raw balances, scaling factors." + }, + "getPoolTokenRates(address)": { + "notice": "Gets pool token rates." + }, + "getPoolTokens(address)": { + "notice": "Gets the tokens registered to a pool." + }, + "getProtocolFeeController()": { + "notice": "Returns the Protocol Fee Controller address." + }, + "getReservesOf(address)": { + "notice": "Retrieves the reserve (i.e., total Vault balance) of a given token." + }, + "getStaticSwapFeePercentage(address)": { + "notice": "Fetches the static swap fee percentage for a given pool." + }, + "getTokenDelta(address)": { + "notice": "Retrieves the token delta for a specific token." + }, + "getVaultAdmin()": { + "notice": "Returns the VaultAdmin contract address." + }, + "getVaultExtension()": { + "notice": "Returns the VaultExtension contract address." + }, + "getVaultPausedState()": { + "notice": "Returns the paused status, and end times of the Vault's pause window and buffer period." + }, + "initialize(address,address,address[],uint256[],uint256,bytes)": { + "notice": "Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange." + }, + "initializeBuffer(address,uint256,uint256,address)": { + "notice": "Initializes buffer for the given wrapped token." + }, + "isPoolInRecoveryMode(address)": { + "notice": "Checks whether a pool is in Recovery Mode." + }, + "isPoolInitialized(address)": { + "notice": "Checks whether a pool is initialized." + }, + "isPoolPaused(address)": { + "notice": "Indicates whether a pool is paused." + }, + "isPoolRegistered(address)": { + "notice": "Checks whether a pool is registered." + }, + "isQueryDisabled()": { + "notice": "Checks if the queries enabled on the Vault." + }, + "isUnlocked()": { + "notice": "Returns whether the Vault is unlocked (i.e., executing an operation)." + }, + "isVaultPaused()": { + "notice": "Indicates whether the Vault is paused." + }, + "pausePool(address)": { + "notice": "Pause the Pool: an emergency action which disables all pool functions." + }, + "pauseVault()": { + "notice": "Pause the Vault: an emergency action which disables all operational state-changing functions." + }, + "pauseVaultBuffers()": { + "notice": "Pauses native vault buffers globally." + }, + "quote(bytes)": { + "notice": "Performs a callback on msg.sender with arguments provided in `data`." + }, + "quoteAndRevert(bytes)": { + "notice": "Performs a callback on msg.sender with arguments provided in `data`." + }, + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": { + "notice": "Registers a pool, associating it with its factory and the tokens it manages." + }, + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": { + "notice": "Removes liquidity from a pool." + }, + "removeLiquidityFromBuffer(address,uint256)": { + "notice": "Removes liquidity from an internal ERC4626 buffer in the Vault." + }, + "removeLiquidityRecovery(address,address,uint256)": { + "notice": "Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type." + }, + "sendTo(address,address,uint256)": { + "notice": "Sends tokens to a recipient." + }, + "setAuthorizer(address)": { + "notice": "Sets a new Authorizer for the Vault." + }, + "setProtocolFeeController(address)": { + "notice": "Sets a new Protocol Fee Controller for the Vault." + }, + "setStaticSwapFeePercentage(address,uint256)": { + "notice": "Assigns a new static swap fee percentage to the specified pool." + }, + "settle(address,uint256)": { + "notice": "Settles deltas for a token; must be successful for the current lock to be released." + }, + "swap((uint8,address,address,address,uint256,uint256,bytes))": { + "notice": "Swaps tokens based on provided parameters." + }, + "totalSupply(address)": { + "notice": "Gets the total supply of a given ERC20 token." + }, + "transfer(address,address,uint256)": { + "notice": "Transfers pool token from owner to a recipient." + }, + "transferFrom(address,address,address,uint256)": { + "notice": "Transfers pool token from a sender to a recipient using an allowance." + }, + "unlock(bytes)": { + "notice": "Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault)." + }, + "unpausePool(address)": { + "notice": "Reverse a `pause` operation, and restore the Pool to normal functionality." + }, + "unpauseVault()": { + "notice": "Reverse a `pause` operation, and restore the Vault to normal functionality." + }, + "unpauseVaultBuffers()": { + "notice": "Unpauses native vault buffers globally." + }, + "updateAggregateSwapFeePercentage(address,uint256)": { + "notice": "Update an aggregate swap fee percentage." + }, + "updateAggregateYieldFeePercentage(address,uint256)": { + "notice": "Update an aggregate yield fee percentage." + } + }, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol": { + "IVaultAdmin": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountUnderlyingRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountWrappedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sharesOwner", + "type": "address" + } + ], + "name": "addLiquidityToBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "areBuffersPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "collectAggregateFees", + "outputs": [ + { + "internalType": "uint256[]", + "name": "swapFeeAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "yieldFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableQuery", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferAsset", + "outputs": [ + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "underlyingBalanceRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "wrappedBalanceRaw", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferMinimumTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityOwner", + "type": "address" + } + ], + "name": "getBufferOwnerShares", + "outputs": [ + { + "internalType": "uint256", + "name": "ownerShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferPeriodDuration", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBufferPeriodEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "getBufferTotalShares", + "outputs": [ + { + "internalType": "uint256", + "name": "bufferShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumPoolTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumTradeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumWrapAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolMinimumTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountUnderlyingRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountWrappedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sharesOwner", + "type": "address" + } + ], + "name": "initializeBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isVaultPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "pausePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pauseVaultBuffers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sharesToRemove", + "type": "uint256" + } + ], + "name": "removeLiquidityFromBuffer", + "outputs": [ + { + "internalType": "uint256", + "name": "removedUnderlyingBalanceRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "removedWrappedBalanceRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "setAuthorizer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "newProtocolFeeController", + "type": "address" + } + ], + "name": "setProtocolFeeController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setStaticSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "unpausePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpauseVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpauseVaultBuffers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newAggregateSwapFeePercentage", + "type": "uint256" + } + ], + "name": "updateAggregateSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newAggregateYieldFeePercentage", + "type": "uint256" + } + ], + "name": "updateAggregateYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "details": "`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.", + "kind": "dev", + "methods": { + "addLiquidityToBuffer(address,uint256,uint256,address)": { + "details": "The buffer needs to be initialized beforehand.", + "params": { + "amountUnderlyingRaw": "Amount of underlying tokens that will be deposited into the buffer", + "amountWrappedRaw": "Amount of wrapped tokens that will be deposited into the buffer", + "sharesOwner": "Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "issuedShares": "the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + } + }, + "areBuffersPaused()": { + "details": "When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible.", + "returns": { + "_0": "buffersPaused True if the Vault buffers are paused" + } + }, + "collectAggregateFees(address)": { + "details": "Fees are sent to the ProtocolFeeController address.", + "params": { + "pool": "The pool on which all aggregate fees should be collected" + }, + "returns": { + "swapFeeAmounts": "An array with the total swap fees collected, sorted in token registration order", + "yieldFeeAmounts": "An array with the total yield fees collected, sorted in token registration order" + } + }, + "disableRecoveryMode(address)": { + "details": "This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.", + "params": { + "pool": "The address of the pool" + } + }, + "enableRecoveryMode(address)": { + "details": "This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, live balances cannot be updated while in Recovery Mode.", + "params": { + "pool": "The address of the pool" + } + }, + "getBufferAsset(address)": { + "details": "The asset can never change after buffer initialization.", + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "underlyingToken": "Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized." + } + }, + "getBufferBalance(address)": { + "details": "All values are in native token decimals of the wrapped or underlying tokens.", + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "underlyingBalanceRaw": "Amount of underlying tokens deposited into the buffer, in native token decimals", + "wrappedBalanceRaw": "Amount of wrapped tokens deposited into the buffer, in native token decimals" + } + }, + "getBufferMinimumTotalSupply()": { + "details": "This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.", + "returns": { + "_0": "minimumTotalSupply The minimum total supply a buffer can have after initialization" + } + }, + "getBufferOwnerShares(address,address)": { + "params": { + "liquidityOwner": "Address of the user that owns liquidity in the wrapped token's buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "ownerShares": "Amount of shares allocated to the liquidity owner, in native underlying token decimals" + } + }, + "getBufferPeriodDuration()": { + "details": "This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused.", + "returns": { + "_0": "bufferPeriodDuration The length of the buffer period in seconds" + } + }, + "getBufferPeriodEndTime()": { + "details": "This value is immutable. If already paused, the Vault can be unpaused until this timestamp.", + "returns": { + "_0": "bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused" + } + }, + "getBufferTotalShares(address)": { + "params": { + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "bufferShares": "Amount of supply shares of the buffer, in native underlying token decimals" + } + }, + "getMaximumPoolTokens()": { + "returns": { + "_0": "maxTokens The maximum token count of a pool" + } + }, + "getMinimumPoolTokens()": { + "details": "We expect the vast majority of pools to be 2-token.", + "returns": { + "_0": "minTokens The minimum token count of a pool" + } + }, + "getMinimumTradeAmount()": { + "details": "This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).", + "returns": { + "_0": "minimumTradeAmount The minimum trade amount as an 18-decimal floating point number" + } + }, + "getMinimumWrapAmount()": { + "details": "This limit is applied to the wrap operation amount, in native underlying token decimals.", + "returns": { + "_0": "minimumWrapAmount The minimum wrap amount in native underlying token decimals" + } + }, + "getPauseWindowEndTime()": { + "details": "This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance.", + "returns": { + "_0": "pauseWindowEndTime The timestamp when the Vault's pause window ends" + } + }, + "getPoolMinimumTotalSupply()": { + "details": "This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.", + "returns": { + "_0": "minimumTotalSupply The minimum total supply a pool can have after initialization" + } + }, + "getVaultPausedState()": { + "returns": { + "_0": "paused True if the Vault is paused", + "_1": "vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window", + "_2": "vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period" + } + }, + "initializeBuffer(address,uint256,uint256,address)": { + "params": { + "amountUnderlyingRaw": "Amount of underlying tokens that will be deposited into the buffer", + "amountWrappedRaw": "Amount of wrapped tokens that will be deposited into the buffer", + "sharesOwner": "Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "issuedShares": "the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + } + }, + "isVaultPaused()": { + "details": "If the Vault is paused, all non-Recovery Mode state-changing operations will revert.", + "returns": { + "_0": "paused True if the Vault is paused" + } + }, + "pausePool(address)": { + "details": "This is a permissioned function that will only work during the Pause Window set during pool factory deployment.", + "params": { + "pool": "The pool being paused" + } + }, + "pauseVault()": { + "details": "This is a permissioned function that will only work during the Pause Window set during deployment." + }, + "pauseVaultBuffers()": { + "details": "When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`)." + }, + "removeLiquidityFromBuffer(address,uint256)": { + "details": "Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.", + "params": { + "sharesToRemove": "Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals.", + "wrappedToken": "Address of the wrapped token that implements IERC4626" + }, + "returns": { + "removedUnderlyingBalanceRaw": "Amount of underlying tokens returned to the user", + "removedWrappedBalanceRaw": "Amount of wrapped tokens returned to the user" + } + }, + "setAuthorizer(address)": { + "details": "This is a permissioned call. Emits an `AuthorizerChanged` event.", + "params": { + "newAuthorizer": "The address of the new authorizer" + } + }, + "setProtocolFeeController(address)": { + "details": "This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.", + "params": { + "newProtocolFeeController": "The address of the new Protocol Fee Controller" + } + }, + "setStaticSwapFeePercentage(address,uint256)": { + "details": "This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.", + "params": { + "pool": "The address of the pool for which the static swap fee will be changed", + "swapFeePercentage": "The new swap fee percentage to apply to the pool" + } + }, + "unpausePool(address)": { + "details": "This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.", + "params": { + "pool": "The pool being unpaused" + } + }, + "unpauseVault()": { + "details": "This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires." + }, + "unpauseVaultBuffers()": { + "details": "When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. This is a permissioned call." + }, + "updateAggregateSwapFeePercentage(address,uint256)": { + "details": "Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.", + "params": { + "newAggregateSwapFeePercentage": "The new aggregate swap fee percentage", + "pool": "The pool whose fee will be updated" + } + }, + "updateAggregateYieldFeePercentage(address,uint256)": { + "details": "Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.", + "params": { + "newAggregateYieldFeePercentage": "The new aggregate yield fee percentage", + "pool": "The pool whose fee will be updated" + } + }, + "vault()": { + "details": "The main Vault contains the entrypoint and main liquidity operation implementations.", + "returns": { + "_0": "vault The address of the main Vault" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "addLiquidityToBuffer(address,uint256,uint256,address)": "1a2e575e", + "areBuffersPaused()": "55cba7fe", + "collectAggregateFees(address)": "8f4ab9ca", + "disableQuery()": "de1a36a6", + "disableRecoveryMode(address)": "bffb78b2", + "enableRecoveryMode(address)": "dc3f574e", + "getBufferAsset(address)": "0387587d", + "getBufferBalance(address)": "4021fe0f", + "getBufferMinimumTotalSupply()": "26a8a991", + "getBufferOwnerShares(address,address)": "9385e39a", + "getBufferPeriodDuration()": "20c1fb7a", + "getBufferPeriodEndTime()": "cd51c12f", + "getBufferTotalShares(address)": "f2784e07", + "getMaximumPoolTokens()": "2e42f4d5", + "getMinimumPoolTokens()": "a8175b27", + "getMinimumTradeAmount()": "e2cb0ba0", + "getMinimumWrapAmount()": "53956aa2", + "getPauseWindowEndTime()": "8a8d123a", + "getPoolMinimumTotalSupply()": "d0965a6b", + "getVaultPausedState()": "85c8c015", + "initializeBuffer(address,uint256,uint256,address)": "40058e35", + "isVaultPaused()": "098401f5", + "pausePool(address)": "55aca1ec", + "pauseVault()": "9e0879c2", + "pauseVaultBuffers()": "e085c5a8", + "removeLiquidityFromBuffer(address,uint256)": "35b60a19", + "setAuthorizer(address)": "058a628f", + "setProtocolFeeController(address)": "2d771389", + "setStaticSwapFeePercentage(address,uint256)": "d15126ba", + "unpausePool(address)": "f21c38cd", + "unpauseVault()": "0b7562be", + "unpauseVaultBuffers()": "b9212b49", + "updateAggregateSwapFeePercentage(address,uint256)": "5e0b06f4", + "updateAggregateYieldFeePercentage(address,uint256)": "e253670a", + "vault()": "fbfa77cf" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible.\",\"returns\":{\"_0\":\"buffersPaused True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, live balances cannot be updated while in Recovery Mode.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"_0\":\"minimumTotalSupply The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused.\",\"returns\":{\"_0\":\"bufferPeriodDuration The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp.\",\"returns\":{\"_0\":\"bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"_0\":\"maxTokens The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"_0\":\"minTokens The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"_0\":\"minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"_0\":\"minimumWrapAmount The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance.\",\"returns\":{\"_0\":\"pauseWindowEndTime The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"_0\":\"minimumTotalSupply The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"returns\":{\"_0\":\"paused True if the Vault is paused\",\"_1\":\"vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\",\"_2\":\"vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\"}},\"initializeBuffer(address,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations will revert.\",\"returns\":{\"_0\":\"paused True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment.\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`).\"},\"removeLiquidityFromBuffer(address,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals.\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose fee will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose fee will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables queries functionality on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore the Vault to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "addLiquidityToBuffer(address,uint256,uint256,address)": { + "notice": "Adds liquidity to an internal ERC4626 buffer in the Vault." + }, + "areBuffersPaused()": { + "notice": "Indicates whether the Vault buffers are paused." + }, + "collectAggregateFees(address)": { + "notice": "Collects accumulated aggregate swap and yield fees for the specified pool." + }, + "disableQuery()": { + "notice": "Disables queries functionality on the Vault. Can only be called by governance." + }, + "disableRecoveryMode(address)": { + "notice": "Disable recovery mode for a pool." + }, + "enableRecoveryMode(address)": { + "notice": "Enable recovery mode for a pool." + }, + "getBufferAsset(address)": { + "notice": "Returns the asset registered for a given wrapped token." + }, + "getBufferBalance(address)": { + "notice": "Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the vault." + }, + "getBufferMinimumTotalSupply()": { + "notice": "Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault." + }, + "getBufferOwnerShares(address,address)": { + "notice": "Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer." + }, + "getBufferPeriodDuration()": { + "notice": "Returns the Vault's buffer period duration." + }, + "getBufferPeriodEndTime()": { + "notice": "Returns the Vault's buffer period end time." + }, + "getBufferTotalShares(address)": { + "notice": "Returns the supply shares (internal buffer BPT) of the ERC4626 buffer." + }, + "getMaximumPoolTokens()": { + "notice": "Get the maximum number of tokens in a pool." + }, + "getMinimumPoolTokens()": { + "notice": "Get the minimum number of tokens in a pool." + }, + "getMinimumTradeAmount()": { + "notice": "Get the minimum trade amount in a pool operation." + }, + "getMinimumWrapAmount()": { + "notice": "Get the minimum wrap amount in a buffer operation." + }, + "getPauseWindowEndTime()": { + "notice": "Returns the Vault's pause window end time." + }, + "getPoolMinimumTotalSupply()": { + "notice": "Get the minimum total supply of pool tokens (BPT) for an initialized pool." + }, + "getVaultPausedState()": { + "notice": "Returns the paused status, and end times of the Vault's pause window and buffer period." + }, + "initializeBuffer(address,uint256,uint256,address)": { + "notice": "Initializes buffer for the given wrapped token." + }, + "isVaultPaused()": { + "notice": "Indicates whether the Vault is paused." + }, + "pausePool(address)": { + "notice": "Pause the Pool: an emergency action which disables all pool functions." + }, + "pauseVault()": { + "notice": "Pause the Vault: an emergency action which disables all operational state-changing functions." + }, + "pauseVaultBuffers()": { + "notice": "Pauses native vault buffers globally." + }, + "removeLiquidityFromBuffer(address,uint256)": { + "notice": "Removes liquidity from an internal ERC4626 buffer in the Vault." + }, + "setAuthorizer(address)": { + "notice": "Sets a new Authorizer for the Vault." + }, + "setProtocolFeeController(address)": { + "notice": "Sets a new Protocol Fee Controller for the Vault." + }, + "setStaticSwapFeePercentage(address,uint256)": { + "notice": "Assigns a new static swap fee percentage to the specified pool." + }, + "unpausePool(address)": { + "notice": "Reverse a `pause` operation, and restore the Pool to normal functionality." + }, + "unpauseVault()": { + "notice": "Reverse a `pause` operation, and restore the Vault to normal functionality." + }, + "unpauseVaultBuffers()": { + "notice": "Unpauses native vault buffers globally." + }, + "updateAggregateSwapFeePercentage(address,uint256)": { + "notice": "Update an aggregate swap fee percentage." + }, + "updateAggregateYieldFeePercentage(address,uint256)": { + "notice": "Update an aggregate yield fee percentage." + }, + "vault()": { + "notice": "Returns the main Vault address." + } + }, + "notice": "Interface for functions defined on the `VaultAdmin` contract.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol": { + "IVaultErrors": { + "abi": [ + { + "inputs": [], + "name": "AfterAddLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterInitializeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterRemoveLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AfterSwapHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "AmountGivenZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "AmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "AmountOutBelowMin", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceNotSettled", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeAddLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeInitializeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeRemoveLiquidityHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BeforeSwapHookFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "BptAmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "BptAmountOutBelowMin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "BufferAlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "BufferNotInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "BufferSharesInvalidOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BufferSharesInvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "BufferTotalSupplyTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "CannotReceiveEth", + "type": "error" + }, + { + "inputs": [], + "name": "CannotSwapSameToken", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportAddLiquidityCustom", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportDonation", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportRemoveLiquidityCustom", + "type": "error" + }, + { + "inputs": [], + "name": "DoesNotSupportUnbalancedLiquidity", + "type": "error" + }, + { + "inputs": [], + "name": "DynamicSwapFeeHookFailed", + "type": "error" + }, + { + "inputs": [], + "name": "FeePrecisionTooHigh", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "HookAdjustedAmountInAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "HookAdjustedAmountOutBelowMin", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "HookAdjustedSwapLimit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolHooksContract", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "poolFactory", + "type": "address" + } + ], + "name": "HookRegistrationFailed", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAddLiquidityKind", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRemoveLiquidityKind", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidToken", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "InvalidUnderlyingToken", + "type": "error" + }, + { + "inputs": [], + "name": "MaxTokens", + "type": "error" + }, + { + "inputs": [], + "name": "MinTokens", + "type": "error" + }, + { + "inputs": [], + "name": "NotEnoughBufferShares", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expectedUnderlyingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualUnderlyingAmount", + "type": "uint256" + } + ], + "name": "NotEnoughUnderlying", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expectedWrappedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualWrappedAmount", + "type": "uint256" + } + ], + "name": "NotEnoughWrapped", + "type": "error" + }, + { + "inputs": [], + "name": "NotVaultDelegateCall", + "type": "error" + }, + { + "inputs": [], + "name": "PauseBufferPeriodDurationTooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageAboveMax", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolAlreadyInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolInRecoveryMode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotInRecoveryMode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotInitialized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotPaused", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolPauseWindowExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolPaused", + "type": "error" + }, + { + "inputs": [], + "name": "ProtocolFeesExceedTotalCollected", + "type": "error" + }, + { + "inputs": [], + "name": "QueriesDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "QuoteResultSpoofed", + "type": "error" + }, + { + "inputs": [], + "name": "RouterNotTrusted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderIsNotVault", + "type": "error" + }, + { + "inputs": [], + "name": "SwapFeePercentageTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "SwapFeePercentageTooLow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "SwapLimit", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "TokenAlreadyRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "TokenNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "expectedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "actualToken", + "type": "address" + } + ], + "name": "TokensMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "TradeAmountTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "VaultBuffersArePaused", + "type": "error" + }, + { + "inputs": [], + "name": "VaultIsNotUnlocked", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotPaused", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPauseWindowDurationTooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPauseWindowExpired", + "type": "error" + }, + { + "inputs": [], + "name": "VaultPaused", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + } + ], + "name": "WrapAmountTooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "WrongProtocolFeeControllerDeployment", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + } + ], + "name": "WrongUnderlyingToken", + "type": "error" + }, + { + "inputs": [], + "name": "WrongVaultAdminDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "WrongVaultExtensionDeployment", + "type": "error" + } + ], + "devdoc": { + "errors": { + "AmountInAboveMax(address,uint256,uint256)": [ + { + "params": { + "amountIn": "The total token amount in", + "maxAmountIn": "The amount of the limit that has been exceeded", + "tokenIn": "The incoming token" + } + } + ], + "AmountOutBelowMin(address,uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded", + "tokenOut": "The outgoing token" + } + } + ], + "BptAmountInAboveMax(uint256,uint256)": [ + { + "params": { + "amountIn": "The total BPT amount in", + "maxAmountIn": "The amount of the limit that has been exceeded" + } + } + ], + "BptAmountOutBelowMin(uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded" + } + } + ], + "BufferAlreadyInitialized(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "BufferNotInitialized(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "BufferTotalSupplyTooLow(uint256)": [ + { + "params": { + "totalSupply": "The total supply value that was below the minimum" + } + } + ], + "FeePrecisionTooHigh()": [ + { + "details": "Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault." + } + ], + "HookAdjustedAmountInAboveMax(address,uint256,uint256)": [ + { + "params": { + "amountIn": "The total token amount in", + "maxAmountIn": "The amount of the limit that has been exceeded", + "tokenIn": "The incoming token" + } + } + ], + "HookAdjustedAmountOutBelowMin(address,uint256,uint256)": [ + { + "params": { + "amountOut": "The total BPT amount out", + "minAmountOut": "The amount of the limit that has been exceeded", + "tokenOut": "The outgoing token" + } + } + ], + "HookAdjustedSwapLimit(uint256,uint256)": [ + { + "params": { + "amount": "The total amount in or out", + "limit": "The amount of the limit that has been exceeded" + } + } + ], + "HookRegistrationFailed(address,address,address)": [ + { + "params": { + "pool": "Address of the rejected pool", + "poolFactory": "Address of the pool factory", + "poolHooksContract": "Address of the hook contract that rejected the pool registration" + } + } + ], + "InvalidUnderlyingToken(address)": [ + { + "details": "This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).", + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "NotEnoughUnderlying(address,uint256,uint256)": [ + { + "details": "A wrap/unwrap operation consumed more or returned less underlying tokens than it should." + } + ], + "NotEnoughWrapped(address,uint256,uint256)": [ + { + "details": "A wrap/unwrap operation consumed more or returned less wrapped tokens than it should." + } + ], + "NotVaultDelegateCall()": [ + { + "details": "It can only be called by the Vault via delegatecall." + } + ], + "PercentageAboveMax()": [ + { + "details": "Providing the value might be helpful for debugging." + } + ], + "PoolAlreadyInitialized(address)": [ + { + "params": { + "pool": "The already initialized pool" + } + } + ], + "PoolAlreadyRegistered(address)": [ + { + "params": { + "pool": "The already registered pool" + } + } + ], + "PoolInRecoveryMode(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolNotInRecoveryMode(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolNotInitialized(address)": [ + { + "params": { + "pool": "The uninitialized pool" + } + } + ], + "PoolNotPaused(address)": [ + { + "params": { + "pool": "The unpaused pool" + } + } + ], + "PoolNotRegistered(address)": [ + { + "params": { + "pool": "The unregistered pool" + } + } + ], + "PoolPauseWindowExpired(address)": [ + { + "params": { + "pool": "The pool" + } + } + ], + "PoolPaused(address)": [ + { + "params": { + "pool": "The paused pool" + } + } + ], + "ProtocolFeesExceedTotalCollected()": [ + { + "details": "This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault." + } + ], + "SenderIsNotVault(address)": [ + { + "params": { + "sender": "The account attempting to call a permissioned function" + } + } + ], + "SwapFeePercentageTooHigh()": [ + { + "details": "The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits." + } + ], + "SwapFeePercentageTooLow()": [ + { + "details": "The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits." + } + ], + "SwapLimit(uint256,uint256)": [ + { + "params": { + "amount": "The total amount in or out", + "limit": "The amount of the limit that has been exceeded" + } + } + ], + "TokenAlreadyRegistered(address)": [ + { + "params": { + "token": "The duplicate token" + } + } + ], + "TokenNotRegistered(address)": [ + { + "params": { + "token": "The unregistered token" + } + } + ], + "TokensMismatch(address,address,address)": [ + { + "params": { + "actualToken": "The actual token found at that index", + "expectedToken": "The correct token at a given index in the pool", + "pool": "Address of the pool" + } + } + ], + "WrapAmountTooSmall(address)": [ + { + "params": { + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ], + "WrongUnderlyingToken(address,address)": [ + { + "details": "This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.", + "params": { + "underlyingToken": "The underlying token returned by `asset`", + "wrappedToken": "The wrapped token corresponding to the buffer" + } + } + ] + }, + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PercentageAboveMax()\":[{\"details\":\"Providing the value might be helpful for debugging.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "AfterAddLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert." + } + ], + "AfterInitializeHookFailed()": [ + { + "notice": "The pool has returned false to the afterInitialize hook, indicating the transaction should revert." + } + ], + "AfterRemoveLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert." + } + ], + "AfterSwapHookFailed()": [ + { + "notice": "The pool has returned false to the afterSwap hook, indicating the transaction should revert." + } + ], + "AmountGivenZero()": [ + { + "notice": "The user tried to swap zero tokens." + } + ], + "AmountInAboveMax(address,uint256,uint256)": [ + { + "notice": "A required amountIn exceeds the maximum limit specified for the operation." + } + ], + "AmountOutBelowMin(address,uint256,uint256)": [ + { + "notice": "The actual amount out is below the minimum limit specified for the operation." + } + ], + "BalanceNotSettled()": [ + { + "notice": "A transient accounting operation completed with outstanding token deltas." + } + ], + "BeforeAddLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert." + } + ], + "BeforeInitializeHookFailed()": [ + { + "notice": "The pool has returned false to the beforeInitialize hook, indicating the transaction should revert." + } + ], + "BeforeRemoveLiquidityHookFailed()": [ + { + "notice": "The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert." + } + ], + "BeforeSwapHookFailed()": [ + { + "notice": "The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + } + ], + "BptAmountInAboveMax(uint256,uint256)": [ + { + "notice": "The required BPT amount in exceeds the maximum limit specified for the operation." + } + ], + "BptAmountOutBelowMin(uint256,uint256)": [ + { + "notice": "The BPT amount received from adding liquidity is below the minimum specified for the operation." + } + ], + "BufferAlreadyInitialized(address)": [ + { + "notice": "The buffer for the given wrapped token was already initialized." + } + ], + "BufferNotInitialized(address)": [ + { + "notice": "The buffer for the given wrapped token was not initialized." + } + ], + "BufferSharesInvalidOwner()": [ + { + "notice": "Buffer shares were burned from the zero address." + } + ], + "BufferSharesInvalidReceiver()": [ + { + "notice": "Buffer shares were minted to the zero address." + } + ], + "BufferTotalSupplyTooLow(uint256)": [ + { + "notice": "The total supply of a buffer can't be lower than the absolute minimum." + } + ], + "CannotReceiveEth()": [ + { + "notice": "The contract should not receive ETH." + } + ], + "CannotSwapSameToken()": [ + { + "notice": "The user attempted to swap a token for itself." + } + ], + "DoesNotSupportAddLiquidityCustom()": [ + { + "notice": "Pool does not support adding liquidity with a customized input." + } + ], + "DoesNotSupportDonation()": [ + { + "notice": "Pool does not support adding liquidity through donation." + } + ], + "DoesNotSupportRemoveLiquidityCustom()": [ + { + "notice": "Pool does not support removing liquidity with a customized input." + } + ], + "DoesNotSupportUnbalancedLiquidity()": [ + { + "notice": "Pool does not support adding / removing liquidity with an unbalanced input." + } + ], + "DynamicSwapFeeHookFailed()": [ + { + "notice": "The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + } + ], + "FeePrecisionTooHigh()": [ + { + "notice": "Primary fee percentages result in an aggregate fee that cannot be stored with the required precision." + } + ], + "HookAdjustedAmountInAboveMax(address,uint256,uint256)": [ + { + "notice": "A hook adjusted amountIn exceeds the maximum limit specified for the operation." + } + ], + "HookAdjustedAmountOutBelowMin(address,uint256,uint256)": [ + { + "notice": "The hook adjusted amount out is below the minimum limit specified for the operation." + } + ], + "HookAdjustedSwapLimit(uint256,uint256)": [ + { + "notice": "A hook adjusted amount in or out has exceeded the limit specified in the swap request." + } + ], + "HookRegistrationFailed(address,address,address)": [ + { + "notice": "A hook contract rejected a pool on registration." + } + ], + "InvalidAddLiquidityKind()": [ + { + "notice": "Add liquidity kind not supported." + } + ], + "InvalidRemoveLiquidityKind()": [ + { + "notice": "Remove liquidity kind not supported." + } + ], + "InvalidToken()": [ + { + "notice": "Invalid tokens (e.g., zero) cannot be registered." + } + ], + "InvalidTokenConfiguration()": [ + { + "notice": "The data in a TokenConfig struct is inconsistent or unsupported." + } + ], + "InvalidTokenType()": [ + { + "notice": "The token type given in a TokenConfig during pool registration is invalid." + } + ], + "InvalidUnderlyingToken(address)": [ + { + "notice": "A wrapped token reported the zero address as its underlying token asset." + } + ], + "MaxTokens()": [ + { + "notice": "The token count is above the maximum allowed." + } + ], + "MinTokens()": [ + { + "notice": "The token count is below the minimum allowed." + } + ], + "NotEnoughBufferShares()": [ + { + "notice": "The user is trying to remove more than their allocated shares from the buffer." + } + ], + "NotVaultDelegateCall()": [ + { + "notice": "The `VaultExtension` contract was called by an account directly." + } + ], + "PauseBufferPeriodDurationTooLarge()": [ + { + "notice": "The caller specified a buffer period longer than the maximum." + } + ], + "PercentageAboveMax()": [ + { + "notice": "A given percentage is above the maximum (usually FixedPoint.ONE, or 1e18 wei)." + } + ], + "PoolAlreadyInitialized(address)": [ + { + "notice": "A pool has already been initialized. `initialize` may only be called once." + } + ], + "PoolAlreadyRegistered(address)": [ + { + "notice": "A pool has already been registered. `registerPool` may only be called once." + } + ], + "PoolInRecoveryMode(address)": [ + { + "notice": "Cannot enable recovery mode when already enabled." + } + ], + "PoolNotInRecoveryMode(address)": [ + { + "notice": "Cannot disable recovery mode when not enabled." + } + ], + "PoolNotInitialized(address)": [ + { + "notice": "A referenced pool has not been initialized." + } + ], + "PoolNotPaused(address)": [ + { + "notice": "Governance tried to unpause the Pool when it was not paused." + } + ], + "PoolNotRegistered(address)": [ + { + "notice": "A pool has not been registered." + } + ], + "PoolPauseWindowExpired(address)": [ + { + "notice": "Governance tried to pause a Pool after the pause period expired." + } + ], + "PoolPaused(address)": [ + { + "notice": "A user tried to perform an operation involving a paused Pool." + } + ], + "ProtocolFeesExceedTotalCollected()": [ + { + "notice": "Error raised when there is an overflow in the fee calculation." + } + ], + "QueriesDisabled()": [ + { + "notice": "A user tried to execute a query operation when they were disabled." + } + ], + "QuoteResultSpoofed()": [ + { + "notice": "Quote reverted with a reserved error code." + } + ], + "RouterNotTrusted()": [ + { + "notice": "An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)." + } + ], + "SenderIsNotVault(address)": [ + { + "notice": "Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function)." + } + ], + "SwapFeePercentageTooHigh()": [ + { + "notice": "Error raised when the swap fee percentage is greater than the maximum allowed value." + } + ], + "SwapFeePercentageTooLow()": [ + { + "notice": "Error raised when the swap fee percentage is less than the minimum allowed value." + } + ], + "SwapLimit(uint256,uint256)": [ + { + "notice": "An amount in or out has exceeded the limit specified in the swap request." + } + ], + "TokenAlreadyRegistered(address)": [ + { + "notice": "A token was already registered (i.e., it is a duplicate in the pool)." + } + ], + "TokenNotRegistered(address)": [ + { + "notice": "The user attempted to operate with a token that is not in the pool." + } + ], + "TokensMismatch(address,address,address)": [ + { + "notice": "The token list passed into an operation does not match the pool tokens in the pool." + } + ], + "TradeAmountTooSmall()": [ + { + "notice": "The amount given or calculated for an operation is below the minimum limit." + } + ], + "VaultBuffersArePaused()": [ + { + "notice": "Buffer operation attempted while vault buffers are paused." + } + ], + "VaultIsNotUnlocked()": [ + { + "notice": "A user called a Vault function (swap, add/remove liquidity) outside the lock context." + } + ], + "VaultNotPaused()": [ + { + "notice": "Governance tried to unpause the Vault when it was not paused." + } + ], + "VaultPauseWindowDurationTooLarge()": [ + { + "notice": "The caller specified a pause window period longer than the maximum." + } + ], + "VaultPauseWindowExpired()": [ + { + "notice": "Governance tried to pause the Vault after the pause period expired." + } + ], + "VaultPaused()": [ + { + "notice": "A user tried to perform an operation while the Vault was paused." + } + ], + "WrapAmountTooSmall(address)": [ + { + "notice": "The amount given to wrap/unwrap was too small, which can introduce rounding issues." + } + ], + "WrongProtocolFeeControllerDeployment()": [ + { + "notice": "The `ProtocolFeeController` contract was configured with an incorrect Vault address." + } + ], + "WrongUnderlyingToken(address,address)": [ + { + "notice": "The wrapped token asset does not match the underlying token." + } + ], + "WrongVaultAdminDeployment()": [ + { + "notice": "The `VaultAdmin` contract was configured with an incorrect Vault address." + } + ], + "WrongVaultExtensionDeployment()": [ + { + "notice": "The `VaultExtension` contract was configured with an incorrect Vault address." + } + ] + }, + "kind": "user", + "methods": {}, + "notice": "Errors are declared inside an interface (namespace) to improve DX with Typechain.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol": { + "IVaultEvents": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "AuthorizerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "burnedShares", + "type": "uint256" + } + ], + "name": "BufferSharesBurned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "issuedShares", + "type": "uint256" + } + ], + "name": "BufferSharesMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountWrapped", + "type": "uint256" + } + ], + "name": "LiquidityAddedToBuffer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountWrapped", + "type": "uint256" + } + ], + "name": "LiquidityRemovedFromBuffer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256[]", + "name": "deltas", + "type": "int256[]" + } + ], + "name": "PoolBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PoolPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "recoveryMode", + "type": "bool" + } + ], + "name": "PoolRecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "indexed": false, + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "address", + "name": "hooksContract", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct HooksConfig", + "name": "hooksConfig", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "indexed": false, + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IProtocolFeeController", + "name": "newProtocolFeeController", + "type": "address" + } + ], + "name": "ProtocolFeeControllerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "contract IERC20", + "name": "swapFeeToken", + "type": "address" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "underlyingToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "burnedShares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "withdrawnUnderlying", + "type": "uint256" + } + ], + "name": "Unwrap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "VaultBuffersPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "VaultPausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "VaultQueriesDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC20", + "name": "underlyingToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "depositedUnderlying", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "mintedShares", + "type": "uint256" + } + ], + "name": "Wrap", + "type": "event" + } + ], + "devdoc": { + "details": "Events are declared inside an interface (namespace) to improve DX with Typechain.", + "events": { + "AuthorizerChanged(address)": { + "params": { + "newAuthorizer": "The address of the new authorizer" + } + }, + "BufferSharesBurned(address,address,uint256)": { + "details": "The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \"totalSupply\" of a buffer.", + "params": { + "burnedShares": "The amount of \"internal BPT\" shares burned", + "from": "The owner of the burned shares", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "BufferSharesMinted(address,address,uint256)": { + "details": "The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \"totalSupply\" of a buffer.", + "params": { + "issuedShares": "The amount of \"internal BPT\" shares created", + "to": "The owner of the minted shares", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "LiquidityAddedToBuffer(address,uint256,uint256)": { + "details": "The underlying token can be derived from the wrapped token, so it's not included here.", + "params": { + "amountUnderlying": "The amount of the underlying token that was deposited", + "amountWrapped": "The amount of the wrapped token that was deposited", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "LiquidityRemovedFromBuffer(address,uint256,uint256)": { + "details": "The underlying token can be derived from the wrapped token, so it's not included here.", + "params": { + "amountUnderlying": "The amount of the underlying token that was withdrawn", + "amountWrapped": "The amount of the wrapped token that was withdrawn", + "wrappedToken": "The wrapped token that identifies the buffer" + } + }, + "PoolBalanceChanged(address,address,int256[])": { + "params": { + "deltas": "The amount each token changed, sorted in the pool tokens' order", + "liquidityProvider": "The user performing the operation", + "pool": "The pool being registered" + } + }, + "PoolInitialized(address)": { + "params": { + "pool": "The pool being initialized" + } + }, + "PoolPausedStateChanged(address,bool)": { + "params": { + "paused": "True if the pool was paused", + "pool": "The pool that was just paused or unpaused" + } + }, + "PoolRecoveryModeStateChanged(address,bool)": { + "params": { + "pool": "The pool", + "recoveryMode": "True if recovery mode was enabled" + } + }, + "PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))": { + "params": { + "factory": "The factory creating the pool", + "hooksConfig": "Flags indicating which hooks the pool supports and address of hooks contract", + "liquidityManagement": "Supported liquidity management hook flags", + "pauseWindowEndTime": "The pool's pause window end time", + "pool": "The pool being registered", + "roleAccounts": "Addresses the Vault will allow to change certain pool settings", + "swapFeePercentage": "The static swap fee of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + } + }, + "ProtocolFeeControllerChanged(address)": { + "params": { + "newProtocolFeeController": "The address of the new protocol fee controller" + } + }, + "Swap(address,address,address,uint256,uint256,uint256,uint256,address)": { + "params": { + "amountIn": "Number of tokenIn tokens", + "amountOut": "Number of tokenOut tokens", + "pool": "The pool with the tokens being swapped", + "swapFeeAmount": "Swap fee amount paid", + "swapFeePercentage": "Swap fee percentage applied (can differ if dynamic)", + "swapFeeToken": "Token the swap fee was paid in", + "tokenIn": "The token entering the Vault (balance increases)", + "tokenOut": "The token leaving the Vault (balance decreases)" + } + }, + "SwapFeePercentageChanged(address,uint256)": { + "params": { + "swapFeePercentage": "The new swap fee percentage for the pool" + } + }, + "Unwrap(address,address,uint256,uint256)": { + "params": { + "burnedShares": "Number of shares (wrapped tokens) burned", + "underlyingToken": "The underlying token address", + "withdrawnUnderlying": "Number of underlying tokens withdrawn", + "wrappedToken": "The wrapped token address" + } + }, + "VaultBuffersPausedStateChanged(bool)": { + "details": "If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.", + "params": { + "paused": "True if the Vault buffers were paused" + } + }, + "VaultPausedStateChanged(bool)": { + "params": { + "paused": "True if the Vault was paused" + } + }, + "Wrap(address,address,uint256,uint256)": { + "params": { + "depositedUnderlying": "Number of underlying tokens deposited", + "mintedShares": "Number of shares (wrapped tokens) minted", + "underlyingToken": "The underlying token address", + "wrappedToken": "The wrapped token address" + } + } + }, + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"}],\"name\":\"PoolBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"swapFeeToken\",\"type\":\"address\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAddedToBuffer(address,uint256,uint256)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolBalanceChanged(address,address,int256[])\":{\"params\":{\"deltas\":\"The amount each token changed, sorted in the pool tokens' order\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool being registered\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256,address)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"swapFeeToken\":\"Token the swap fee was paid in\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,address,uint256,uint256)\":{\"params\":{\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"underlyingToken\":\"The underlying token address\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,address,uint256,uint256)\":{\"params\":{\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"underlyingToken\":\"The underlying token address\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAddedToBuffer(address,uint256,uint256)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolBalanceChanged(address,address,int256[])\":{\"notice\":\"Pool balances have changed (e.g., after initialization, add/remove liquidity).\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256,address)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,address,uint256,uint256)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, permanently disabling query functionality.\"},\"Wrap(address,address,uint256,uint256)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "events": { + "AuthorizerChanged(address)": { + "notice": "A new authorizer is set by `setAuthorizer`." + }, + "BufferSharesBurned(address,address,uint256)": { + "notice": "Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token." + }, + "BufferSharesMinted(address,address,uint256)": { + "notice": "Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token." + }, + "LiquidityAddedToBuffer(address,uint256,uint256)": { + "notice": "Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token." + }, + "LiquidityRemovedFromBuffer(address,uint256,uint256)": { + "notice": "Liquidity was removed from an ERC4626 buffer." + }, + "PoolBalanceChanged(address,address,int256[])": { + "notice": "Pool balances have changed (e.g., after initialization, add/remove liquidity)." + }, + "PoolInitialized(address)": { + "notice": "A Pool was initialized by calling `initialize`." + }, + "PoolPausedStateChanged(address,bool)": { + "notice": "A Pool's pause status has changed." + }, + "PoolRecoveryModeStateChanged(address,bool)": { + "notice": "Recovery mode has been enabled or disabled for a pool." + }, + "PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))": { + "notice": "A Pool was registered by calling `registerPool`." + }, + "ProtocolFeeControllerChanged(address)": { + "notice": "A new protocol fee controller is set by `setProtocolFeeController`." + }, + "Swap(address,address,address,uint256,uint256,uint256,uint256,address)": { + "notice": "A swap has occurred." + }, + "SwapFeePercentageChanged(address,uint256)": { + "notice": "Emitted when the swap fee percentage of a pool is updated." + }, + "Unwrap(address,address,uint256,uint256)": { + "notice": "An unwrap operation has occurred." + }, + "VaultBuffersPausedStateChanged(bool)": { + "notice": "The Vault buffers pause status has changed." + }, + "VaultPausedStateChanged(bool)": { + "notice": "The Vault's pause status has changed." + }, + "VaultQueriesDisabled()": { + "notice": "`disableQuery` has been called on the Vault, permanently disabling query functionality." + }, + "Wrap(address,address,uint256,uint256)": { + "notice": "A wrap operation has occurred." + } + }, + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol": { + "IVaultExtension": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "swapParams", + "type": "tuple" + } + ], + "name": "computeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getAggregateSwapFeeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getAggregateYieldFeeAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getBptRate", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getCurrentLiveBalances", + "outputs": [ + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getHooksConfig", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "address", + "name": "hooksContract", + "type": "address" + } + ], + "internalType": "struct HooksConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNonzeroDeltaCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolConfig", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "staticSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateYieldFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint40", + "name": "tokenDecimalDiffs", + "type": "uint40" + }, + { + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "isPoolRegistered", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolInitialized", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolInRecoveryMode", + "type": "bool" + } + ], + "internalType": "struct PoolConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolData", + "outputs": [ + { + "components": [ + { + "internalType": "PoolConfigBits", + "name": "poolConfigBits", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenInfo[]", + "name": "tokenInfo", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "balancesRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRates", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "decimalScalingFactors", + "type": "uint256[]" + } + ], + "internalType": "struct PoolData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolRoleAccounts", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokenInfo", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenInfo[]", + "name": "tokenInfo", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "balancesRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lastBalancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokenRates", + "outputs": [ + { + "internalType": "uint256[]", + "name": "decimalScalingFactors", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRates", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getPoolTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeeController", + "outputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getReservesOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "getStaticSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenDelta", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "exactAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minBptAmountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [ + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolInRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolInitialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isQueryDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isUnlocked", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "quote", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "quoteAndRevert", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "pauseWindowEndTime", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "protocolFeeExempt", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "internalType": "address", + "name": "poolHooksContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "registerPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "exactBptAmountIn", + "type": "uint256" + } + ], + "name": "removeLiquidityRecovery", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "details": "`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.", + "kind": "dev", + "methods": { + "allowance(address,address,address)": { + "params": { + "owner": "Address of the owner", + "spender": "Address of the spender", + "token": "Address of the token" + }, + "returns": { + "_0": "allowance Amount of tokens the spender is allowed to spend" + } + }, + "approve(address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to approve", + "owner": "Address of the owner", + "spender": "Address of the spender" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "balanceOf(address,address)": { + "params": { + "account": "Address of the account", + "token": "Address of the token" + }, + "returns": { + "_0": "balance Balance of the account for the token" + } + }, + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": { + "details": "Reverts if the hook doesn't return the success flag set to `true`.", + "params": { + "pool": "The pool", + "swapParams": "The swap parameters used to compute the fee" + }, + "returns": { + "_0": "dynamicSwapFeePercentage The dynamic swap fee percentage" + } + }, + "getAggregateSwapFeeAmount(address,address)": { + "params": { + "pool": "The address of the pool for which aggregate fees have been collected", + "token": "The address of the token in which fees have been accumulated" + }, + "returns": { + "_0": "swapFeeAmount The total amount of fees accumulated in the specified token" + } + }, + "getAggregateYieldFeeAmount(address,address)": { + "params": { + "pool": "The address of the pool for which aggregate fees have been collected", + "token": "The address of the token in which fees have been accumulated" + }, + "returns": { + "_0": "yieldFeeAmount The total amount of fees accumulated in the specified token" + } + }, + "getBptRate(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "rate": "BPT rate" + } + }, + "getCurrentLiveBalances(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "balancesLiveScaled18": "Token balances after paying yield fees, applying decimal scaling and rates" + } + }, + "getHooksConfig(address)": { + "details": "The `HooksConfig` contains flags indicating which pool hooks are implemented.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "hooksConfig The hooks configuration as a `HooksConfig` struct" + } + }, + "getNonzeroDeltaCount()": { + "returns": { + "_0": "nonzeroDeltaCount The current value of `_nonzeroDeltaCount`" + } + }, + "getPoolConfig(address)": { + "details": "The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "poolConfig The pool configuration as a `PoolConfig` struct" + } + }, + "getPoolData(address)": { + "details": "This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.", + "params": { + "pool": "The address of the pool" + }, + "returns": { + "_0": "poolData The `PoolData` result" + } + }, + "getPoolPausedState(address)": { + "details": "Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period.", + "params": { + "pool": "The pool whose data is requested" + }, + "returns": { + "_0": "paused True if the Pool is paused", + "_1": "poolPauseWindowEndTime The timestamp of the end of the Pool's pause window", + "_2": "poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)", + "_3": "pauseManager The pause manager, or the zero address" + } + }, + "getPoolRoleAccounts(address)": { + "params": { + "pool": "The address of the pool whose roles are being queried" + }, + "returns": { + "_0": "roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)" + } + }, + "getPoolTokenInfo(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "balancesRaw": "Current native decimal balances of the pool tokens, sorted in pool registration order", + "lastBalancesLiveScaled18": "Last saved live balances, sorted in token registration order", + "tokenInfo": "Token info structs (type, rate provider, yield flag), sorted in pool registration order", + "tokens": "The pool tokens, sorted in registration order" + } + }, + "getPoolTokenRates(address)": { + "details": "This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.", + "params": { + "pool": "Address of the pool" + }, + "returns": { + "decimalScalingFactors": "Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens", + "tokenRates": "18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens" + } + }, + "getPoolTokens(address)": { + "params": { + "pool": "Address of the pool" + }, + "returns": { + "_0": "tokens List of tokens in the pool" + } + }, + "getProtocolFeeController()": { + "returns": { + "_0": "protocolFeeController Address of the ProtocolFeeController" + } + }, + "getReservesOf(address)": { + "params": { + "token": "The token for which to retrieve the reserve" + }, + "returns": { + "_0": "reserveAmount The amount of reserves for the given token" + } + }, + "getStaticSwapFeePercentage(address)": { + "params": { + "pool": "The address of the pool whose static swap fee percentage is being queried" + }, + "returns": { + "_0": "swapFeePercentage The current static swap fee percentage for the specified pool" + } + }, + "getTokenDelta(address)": { + "details": "This function allows reading the value from the `_tokenDeltas` mapping.", + "params": { + "token": "The token for which the delta is being fetched" + }, + "returns": { + "_0": "tokenDelta The delta of the specified token" + } + }, + "getVaultAdmin()": { + "details": "The VaultAdmin contract mostly implements permissioned functions.", + "returns": { + "_0": "vaultAdmin The address of the Vault admin" + } + }, + "initialize(address,address,address[],uint256[],uint256,bytes)": { + "params": { + "exactAmountsIn": "Exact amounts of input tokens", + "minBptAmountOut": "Minimum amount of output pool tokens", + "pool": "Address of the pool to initialize", + "to": "Address that will receive the output BPT", + "tokens": "Tokens used to seed the pool (must match the registered tokens)", + "userData": "Additional (optional) data required for adding initial liquidity" + }, + "returns": { + "bptAmountOut": "Output pool token amount" + } + }, + "isPoolInRecoveryMode(address)": { + "details": "Recovery Mode enables a safe proportional withdrawal path, with no external calls.", + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "recoveryMode True if the pool is in Recovery Mode, false otherwise" + } + }, + "isPoolInitialized(address)": { + "details": "An initialized pool can be considered registered as well.", + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "initialized True if the pool is initialized, false otherwise" + } + }, + "isPoolPaused(address)": { + "details": "If a pool is paused, all non-Recovery Mode state-changing operations will revert.", + "params": { + "pool": "The pool to be checked" + }, + "returns": { + "_0": "paused True if the pool is paused" + } + }, + "isPoolRegistered(address)": { + "params": { + "pool": "Address of the pool to check" + }, + "returns": { + "_0": "registered True if the pool is registered, false otherwise" + } + }, + "isQueryDisabled()": { + "details": "This is a one-way switch. Once queries are disabled, they can never be re-enabled. The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).", + "returns": { + "_0": "queryDisabled If true, then queries are disabled" + } + }, + "isUnlocked()": { + "details": "The Vault must be unlocked to perform state-changing liquidity operations.", + "returns": { + "_0": "unlocked True if the Vault is unlocked, false otherwise" + } + }, + "quote(bytes)": { + "details": "Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + }, + "returns": { + "result": "Resulting data from the call" + } + }, + "quoteAndRevert(bytes)": { + "details": "Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + } + }, + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": { + "details": "A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.", + "params": { + "liquidityManagement": "Liquidity management flags with implemented methods", + "pauseWindowEndTime": "The timestamp after which it is no longer possible to pause the pool", + "pool": "The address of the pool being registered", + "poolHooksContract": "Contract that implements the hooks for the pool", + "protocolFeeExempt": "If true, the pool's initial aggregate fees will be set to 0", + "roleAccounts": "Addresses the Vault will allow to change certain pool settings", + "swapFeePercentage": "The initial static swap fee percentage of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + } + }, + "removeLiquidityRecovery(address,address,uint256)": { + "params": { + "exactBptAmountIn": "Input pool token amount", + "from": "Address of user to burn pool tokens from", + "pool": "Address of the pool" + }, + "returns": { + "amountsOut": "Actual calculated amounts of output tokens, sorted in token registration order" + } + }, + "totalSupply(address)": { + "params": { + "token": "The token address" + }, + "returns": { + "_0": "totalSupply Total supply of the token" + } + }, + "transfer(address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to transfer", + "owner": "Address of the owner", + "to": "Address of the recipient" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "transferFrom(address,address,address,uint256)": { + "details": "Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.", + "params": { + "amount": "Amount of tokens to transfer", + "from": "Address of the sender", + "spender": "Address allowed to perform the transfer", + "to": "Address of the recipient" + }, + "returns": { + "_0": "success True if successful, false otherwise" + } + }, + "vault()": { + "details": "The main Vault contains the entrypoint and main liquidity operation implementations.", + "returns": { + "_0": "vault The address of the main Vault" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "allowance(address,address,address)": "927da105", + "approve(address,address,uint256)": "e1f21c67", + "balanceOf(address,address)": "f7888aec", + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": "4d472bdd", + "getAggregateSwapFeeAmount(address,address)": "85e0b999", + "getAggregateYieldFeeAmount(address,address)": "00fdfa13", + "getBptRate(address)": "4f037ee7", + "getCurrentLiveBalances(address)": "535cfd8a", + "getHooksConfig(address)": "ce8630d4", + "getNonzeroDeltaCount()": "db817187", + "getPoolConfig(address)": "f29486a1", + "getPoolData(address)": "13d21cdf", + "getPoolPausedState(address)": "15e32046", + "getPoolRoleAccounts(address)": "e9ddeb26", + "getPoolTokenInfo(address)": "67e0e076", + "getPoolTokenRates(address)": "7e361bde", + "getPoolTokens(address)": "ca4f2803", + "getProtocolFeeController()": "85f2dbd4", + "getReservesOf(address)": "96787092", + "getStaticSwapFeePercentage(address)": "b45090f9", + "getTokenDelta(address)": "9e825ff5", + "getVaultAdmin()": "1ba0ae45", + "initialize(address,address,address[],uint256[],uint256,bytes)": "ba8a2be0", + "isPoolInRecoveryMode(address)": "be7d628a", + "isPoolInitialized(address)": "532cec7c", + "isPoolPaused(address)": "6c9bc732", + "isPoolRegistered(address)": "c673bdaf", + "isQueryDisabled()": "b4aef0ab", + "isUnlocked()": "8380edb7", + "quote(bytes)": "edfa3568", + "quoteAndRevert(bytes)": "757d64b3", + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": "eeec802f", + "removeLiquidityRecovery(address,address,uint256)": "3a2d133b", + "totalSupply(address)": "e4dc2aa4", + "transfer(address,address,uint256)": "beabacc8", + "transferFrom(address,address,address,uint256)": "15dacbea", + "vault()": "fbfa77cf" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"allowance Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"balance Balance of the account for the token\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"_0\":\"dynamicSwapFeePercentage The dynamic swap fee percentage\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"swapFeeAmount The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"yieldFeeAmount The total amount of fees accumulated in the specified token\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"hooksConfig The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"_0\":\"nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"poolConfig The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolData The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"_0\":\"paused True if the Pool is paused\",\"_1\":\"poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\",\"_2\":\"poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\",\"_3\":\"pauseManager The pause manager, or the zero address\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"_0\":\"roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in pool registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in pool registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"tokens List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"protocolFeeController Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"_0\":\"reserveAmount The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"_0\":\"swapFeePercentage The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"_0\":\"tokenDelta The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"_0\":\"vaultAdmin The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"recoveryMode True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"initialized True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"_0\":\"paused True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"registered True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"This is a one-way switch. Once queries are disabled, they can never be re-enabled. The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\",\"returns\":{\"_0\":\"queryDisabled If true, then queries are disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"_0\":\"unlocked True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"_0\":\"totalSupply Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Checks if the queries enabled on the Vault.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256)\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "allowance(address,address,address)": { + "notice": "Gets the allowance of a spender for a given ERC20 token and owner." + }, + "approve(address,address,uint256)": { + "notice": "Approves a spender to spend pool tokens on behalf of sender." + }, + "balanceOf(address,address)": { + "notice": "Gets the balance of an account for a given ERC20 token." + }, + "computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))": { + "notice": "Query the current dynamic swap fee percentage of a pool, given a set of swap parameters." + }, + "getAggregateSwapFeeAmount(address,address)": { + "notice": "Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool." + }, + "getAggregateYieldFeeAmount(address,address)": { + "notice": "Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool." + }, + "getBptRate(address)": { + "notice": "The current rate of a pool token (BPT) = invariant / totalSupply." + }, + "getCurrentLiveBalances(address)": { + "notice": "Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order." + }, + "getHooksConfig(address)": { + "notice": "Gets the hooks configuration parameters of a pool." + }, + "getNonzeroDeltaCount()": { + "notice": "Returns the count of non-zero deltas." + }, + "getPoolConfig(address)": { + "notice": "Gets the configuration parameters of a pool." + }, + "getPoolData(address)": { + "notice": "Returns comprehensive pool data for the given pool." + }, + "getPoolPausedState(address)": { + "notice": "Returns the paused status, and end times of the Pool's pause window and buffer period." + }, + "getPoolRoleAccounts(address)": { + "notice": "Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)" + }, + "getPoolTokenInfo(address)": { + "notice": "Gets the raw data for a pool: tokens, raw balances, scaling factors." + }, + "getPoolTokenRates(address)": { + "notice": "Gets pool token rates." + }, + "getPoolTokens(address)": { + "notice": "Gets the tokens registered to a pool." + }, + "getProtocolFeeController()": { + "notice": "Returns the Protocol Fee Controller address." + }, + "getReservesOf(address)": { + "notice": "Retrieves the reserve (i.e., total Vault balance) of a given token." + }, + "getStaticSwapFeePercentage(address)": { + "notice": "Fetches the static swap fee percentage for a given pool." + }, + "getTokenDelta(address)": { + "notice": "Retrieves the token delta for a specific token." + }, + "getVaultAdmin()": { + "notice": "Returns the VaultAdmin contract address." + }, + "initialize(address,address,address[],uint256[],uint256,bytes)": { + "notice": "Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange." + }, + "isPoolInRecoveryMode(address)": { + "notice": "Checks whether a pool is in Recovery Mode." + }, + "isPoolInitialized(address)": { + "notice": "Checks whether a pool is initialized." + }, + "isPoolPaused(address)": { + "notice": "Indicates whether a pool is paused." + }, + "isPoolRegistered(address)": { + "notice": "Checks whether a pool is registered." + }, + "isQueryDisabled()": { + "notice": "Checks if the queries enabled on the Vault." + }, + "isUnlocked()": { + "notice": "Returns whether the Vault is unlocked (i.e., executing an operation)." + }, + "quote(bytes)": { + "notice": "Performs a callback on msg.sender with arguments provided in `data`." + }, + "quoteAndRevert(bytes)": { + "notice": "Performs a callback on msg.sender with arguments provided in `data`." + }, + "registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))": { + "notice": "Registers a pool, associating it with its factory and the tokens it manages." + }, + "removeLiquidityRecovery(address,address,uint256)": { + "notice": "Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type." + }, + "totalSupply(address)": { + "notice": "Gets the total supply of a given ERC20 token." + }, + "transfer(address,address,uint256)": { + "notice": "Transfers pool token from owner to a recipient." + }, + "transferFrom(address,address,address,uint256)": { + "notice": "Transfers pool token from a sender to a recipient using an allowance." + }, + "vault()": { + "notice": "Returns the main Vault address." + } + }, + "notice": "Interface for functions defined on the `VaultExtension` contract.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol": { + "IVaultMain": { + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minBptAmountOut", + "type": "uint256" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AddLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "enum WrappingDirection", + "name": "direction", + "type": "uint8" + }, + { + "internalType": "contract IERC4626", + "name": "wrappedToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountGivenRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limitRaw", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct BufferWrapOrUnwrapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "erc4626BufferWrapOrUnwrap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getPoolTokenCountAndIndexOfToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVaultExtension", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxBptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOut", + "type": "uint256[]" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct RemoveLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "bptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "sendTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountHint", + "type": "uint256" + } + ], + "name": "settle", + "outputs": [ + { + "internalType": "uint256", + "name": "credit", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountGivenRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limitRaw", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct VaultSwapParams", + "name": "vaultSwapParams", + "type": "tuple" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountInRaw", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutRaw", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "unlock", + "outputs": [ + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.", + "kind": "dev", + "methods": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": { + "details": "Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.", + "params": { + "params": "Parameters for the add liquidity (see above for struct definition)" + }, + "returns": { + "amountsIn": "Actual amounts of input tokens", + "bptAmountOut": "Output pool token amount", + "returnData": "Arbitrary (optional) data with an encoded response from the pool" + } + }, + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": { + "details": "All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.", + "params": { + "params": "Parameters for the wrap/unwrap operation (see struct definition)" + }, + "returns": { + "amountCalculatedRaw": "Calculated swap amount", + "amountInRaw": "Amount of input tokens for the swap", + "amountOutRaw": "Amount of output tokens from the swap" + } + }, + "getAuthorizer()": { + "details": "The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.", + "returns": { + "_0": "authorizer Address of the authorizer contract" + } + }, + "getPoolTokenCountAndIndexOfToken(address,address)": { + "details": "Reverts if the pool is not registered, or if the token does not belong to the pool.", + "params": { + "pool": "Address of the pool", + "token": "Address of the token" + }, + "returns": { + "_0": "tokenCount Number of tokens in the pool", + "_1": "index Index corresponding to the given token in the pool's token list" + } + }, + "getVaultExtension()": { + "details": "Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.", + "returns": { + "_0": "vaultExtension Address of the VaultExtension" + } + }, + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": { + "details": "Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).", + "params": { + "params": "Parameters for the remove liquidity (see above for struct definition)" + }, + "returns": { + "amountsOut": "Actual amounts of output tokens", + "bptAmountIn": "Actual amount of BPT burned", + "returnData": "Arbitrary (optional) data with an encoded response from the pool" + } + }, + "sendTo(address,address,uint256)": { + "details": "There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.", + "params": { + "amount": "Amount of tokens to send", + "to": "Recipient address", + "token": "Address of the token" + } + }, + "settle(address,uint256)": { + "details": "Protects the caller against leftover dust in the vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.", + "params": { + "amountHint": "Amount paid as reported by the caller", + "token": "Address of the token" + }, + "returns": { + "credit": "Credit received in return of the payment" + } + }, + "swap((uint8,address,address,address,uint256,uint256,bytes))": { + "details": "All parameters are given in raw token decimal encoding.", + "params": { + "vaultSwapParams": "Parameters for the swap (see above for struct definition)" + }, + "returns": { + "amountCalculatedRaw": "Calculated swap amount", + "amountInRaw": "Amount of input tokens for the swap", + "amountOutRaw": "Amount of output tokens from the swap" + } + }, + "unlock(bytes)": { + "details": "Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.", + "params": { + "data": "Contains function signature and args to be passed to the msg.sender" + }, + "returns": { + "result": "Resulting data from the call" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": "4af29ec4", + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": "6c1a0324", + "getAuthorizer()": "aaabadc5", + "getPoolTokenCountAndIndexOfToken(address,address)": "c9c1661b", + "getVaultExtension()": "b9a8effa", + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": "21457897", + "sendTo(address,address,uint256)": "ae639329", + "settle(address,uint256)": "15afd409", + "swap((uint8,address,address,address,uint256,uint256,bytes))": "2bfb780c", + "unlock(bytes)": "48c89491" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"_0\":\"authorizer Address of the authorizer contract\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"tokenCount Number of tokens in the pool\",\"_1\":\"index Index corresponding to the given token in the pool's token list\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"_0\":\"vaultExtension Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "addLiquidity((address,address,uint256[],uint256,uint8,bytes))": { + "notice": "Adds liquidity to a pool." + }, + "erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256,bytes))": { + "notice": "Wraps/unwraps tokens based on the parameters provided." + }, + "getAuthorizer()": { + "notice": "Returns the Authorizer address." + }, + "getPoolTokenCountAndIndexOfToken(address,address)": { + "notice": "Gets the index of a token in a given pool." + }, + "getVaultExtension()": { + "notice": "Returns the VaultExtension contract address." + }, + "removeLiquidity((address,address,uint256,uint256[],uint8,bytes))": { + "notice": "Removes liquidity from a pool." + }, + "sendTo(address,address,uint256)": { + "notice": "Sends tokens to a recipient." + }, + "settle(address,uint256)": { + "notice": "Settles deltas for a token; must be successful for the current lock to be released." + }, + "swap((uint8,address,address,address,uint256,uint256,bytes))": { + "notice": "Swaps tokens based on provided parameters." + }, + "unlock(bytes)": { + "notice": "Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault)." + } + }, + "notice": "Interface for functions defined on the main Vault contract.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol": { + "BaseHooks": { + "abi": [ + { + "inputs": [], + "name": "getHookFlags", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + } + ], + "internalType": "struct HookFlags", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsInRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOutRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountInScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenInBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenOutBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AfterSwapParams", + "name": "", + "type": "tuple" + } + ], + "name": "onAfterSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "onBeforeSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "onComputeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "", + "type": "tuple" + } + ], + "name": "onRegister", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks, and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used in this abstract contract, but should be used in real derived hook contracts.", + "kind": "dev", + "methods": { + "getHookFlags()": { + "details": "The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \"mandatory\" hook.", + "returns": { + "_0": "Flags indicating which hooks the contract supports" + } + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsInRaw": "Actual amounts of tokens added, sorted in token registration order", + "amountsInScaled18": "Actual amounts of tokens added, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountOut": "Amount of pool tokens minted", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "New amountsInRaw, potentially modified by the hook" + } + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "details": "Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "bptAmountOut": "Amount of pool tokens minted during initialization", + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool accepts the initialization results" + } + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "amountsOutRaw": "Actual amount of tokens to receive, sorted in token registration order", + "amountsOutScaled18": "Scaled amount of tokens to receive, sorted in token registration order", + "balancesScaled18": "Current pool balances, sorted in token registration order", + "bptAmountIn": "Amount of pool tokens to burn", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Additional (optional) data provided by the user" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "New amountsOutRaw, potentially modified by the hook" + } + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "details": "Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see above for struct definition)" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "New amount calculated, potentially modified by the hook" + } + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of add liquidity operation (e.g., proportional, custom)", + "maxAmountsInScaled18": "Maximum amounts of input tokens", + "minBptAmountOut": "Minimum amount of output pool tokens", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated an add liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeInitialize(uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "exactAmountsIn": "Exact amounts of input tokens", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "success True if the pool wishes to proceed with initialization" + } + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "details": "Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "balancesScaled18": "Current pool balances, sorted in token registration order", + "kind": "The type of remove liquidity operation (e.g., proportional, custom)", + "maxBptAmountIn": "Maximum amount of input pool tokens", + "minAmountsOutScaled18": "Minimum output amounts, sorted in token registration order", + "pool": "Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)", + "router": "The address (usually a router contract) that initiated a remove liquidity operation on the Vault", + "userData": "Optional, arbitrary data sent with the encoded request" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "details": "Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement" + } + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "details": "Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.", + "params": { + "params": "Swap parameters (see PoolSwapParams for struct definition)", + "pool": "Pool address, used to get pool information from the vault (poolData, token config, etc.)", + "staticSwapFeePercentage": "18-decimal FP value of the static swap fee percentage, for reference" + }, + "returns": { + "_0": "True if the pool wishes to proceed with settlement", + "_1": "Value of the swap fee percentage, as an 18-decimal FP value" + } + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "details": "Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.", + "params": { + "factory": "Address of the pool factory (contract deploying the pool)", + "liquidityManagement": "Liquidity management flags indicating which functions are enabled", + "pool": "Address of the pool", + "tokenConfig": "An array of descriptors for the tokens the pool will manage" + }, + "returns": { + "_0": "success True if the hook allowed the registration, false otherwise" + } + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "getHookFlags()": "d77153a7", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "976907cc", + "onAfterInitialize(uint256[],uint256,bytes)": "38be241d", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "2754888d", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "18b6eb55", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "45421ec7", + "onBeforeInitialize(uint256[],bytes)": "1c149e28", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "ba5f9f40", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "5211fa77", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "a0e8f5ac", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "0b89f182" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks, and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used in this abstract contract, but should be used in real derived hook contracts.\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"_0\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsInRaw, potentially modified by the hook\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"success True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Base for pool hooks contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol\":\"BaseHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0x88037c44e04e0f23b63e64d5128c2f3898feab51439db807ab91f3e1805315dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21de8416c9391642ad88d1453aea42eb0d71c97a77f9e7f0a3fd37d4ee4591c8\",\"dweb:/ipfs/QmTPCXbnBYp8JydU2Y665Bs3BWms8kZydWYzmLiNmRhJkR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": { + "getHookFlags()": { + "notice": "Return the set of hooks implemented by the contract." + }, + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed after adding liquidity." + }, + "onAfterInitialize(uint256[],uint256,bytes)": { + "notice": "Hook to be executed after pool initialization." + }, + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": { + "notice": "Hook to be executed after removing liquidity." + }, + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": { + "notice": "Called after a swap to perform further actions once the balances have been updated by the swap." + }, + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": { + "notice": "Hook to be executed before adding liquidity." + }, + "onBeforeInitialize(uint256[],bytes)": { + "notice": "Hook executed before pool initialization." + }, + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": { + "notice": "Hook to be executed before removing liquidity." + }, + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": { + "notice": "Called before a swap to give the Pool an opportunity to perform actions." + }, + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": { + "notice": "Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees." + }, + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": { + "notice": "Hook executed when a pool is registered with a non-zero hooks contract." + } + }, + "notice": "Base for pool hooks contracts.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol": { + "VaultGuard": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea2646970667358221220998aa8bc3e1e28d382dd0a2fd2d04e5920f4cb1f7d4ffc49a313294e55bb74ef64736f6c634300081b0033", + "opcodes": "PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 DUP11 0xA8 0xBC RETURNDATACOPY 0x1E 0x28 0xD3 DUP3 0xDD EXP 0x2F 0xD2 0xD0 0x4E MSIZE KECCAK256 DELEGATECALL 0xCB 0x1F PUSH30 0x4FFC49A313294E55BB74EF64736F6C634300081B00330000000000000000 ", + "sourceMap": "442:385:16:-:0;;;;;;;;;;;;;-1:-1:-1;;442:385:16;;;;-1:-1:-1;;;;;442:385:16;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;442:385:16;;;;;;547:14;;442:385;;;;;;;;547:14;442:385;;;;;;-1:-1:-1;442:385:16;;;;;;-1:-1:-1;442:385:16;;;;;-1:-1:-1;442:385:16" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "5f80fdfea2646970667358221220998aa8bc3e1e28d382dd0a2fd2d04e5920f4cb1f7d4ffc49a313294e55bb74ef64736f6c634300081b0033", + "opcodes": "PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 DUP11 0xA8 0xBC RETURNDATACOPY 0x1E 0x28 0xD3 DUP3 0xDD EXP 0x2F 0xD2 0xD0 0x4E MSIZE KECCAK256 DELEGATECALL 0xCB 0x1F PUSH30 0x4FFC49A313294E55BB74EF64736F6C634300081B00330000000000000000 ", + "sourceMap": "442:385:16:-:0;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "11400", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "internal": { + "_ensureOnlyVault()": "infinite" + } + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x09305dcf7ae512906248a3696137422d3d36e72465660e372cd4fd64d13117ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21d564eee4c8e31216cf6542ac925daac7659fbf8a33129e13d33f277c5efc8e\",\"dweb:/ipfs/QmRqXAqYeygYbT2qXUjZdUF8bzvmCrmqECRGcUzrUMBRf6\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "notice": "Contract that shares the modifier `onlyVault`.", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "Ownable": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", + "errors": { + "OwnableInvalidOwner(address)": [ + { + "details": "The owner is not a valid owner account. (eg. `address(0)`)" + } + ], + "OwnableUnauthorizedAccount(address)": [ + { + "details": "The caller account is not authorized to perform an operation." + } + ] + }, + "kind": "dev", + "methods": { + "constructor": { + "details": "Initializes the contract setting the address provided by the deployer as the initial owner." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xe889e9f6b8469155c967f403ad7508eaa66af8cad1cb9a003536a8e4f281d348\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6e32c81c8d84199eda0de40d33bb77c7acbb482e3f545d5cfba8195af0a88e0\",\"dweb:/ipfs/Qmaf1WAinzjYWGNxRzCTmn2QABFWS912HwC8eiD7cyTgis\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x3dcd533a3f709bda89bb8e649eb97aed96578e606f3796609544b1dcff975a0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83fa9b15077fd2f33f6c175d694e2f7ae9c9a289c7feaca40aa7d6feb8d87c26\",\"dweb:/ipfs/QmQLfKCJ7mjiEeCGN1sHgWT8wjAMbAmBqcBVoQQyUZa5ws\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3119, + "contract": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol:Ownable", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol": { + "IERC4626": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "asset", + "outputs": [ + { + "internalType": "address", + "name": "assetTokenAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "convertToAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "convertToShares", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "maxDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "maxAssets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "maxMint", + "outputs": [ + { + "internalType": "uint256", + "name": "maxShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "maxShares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "maxWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "maxAssets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewMint", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "name": "previewRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "name": "previewWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAssets", + "outputs": [ + { + "internalType": "uint256", + "name": "totalManagedAssets", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].", + "events": { + "Approval(address,address,uint256)": { + "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." + }, + "Transfer(address,address,uint256)": { + "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." + } + }, + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." + }, + "approve(address,uint256)": { + "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." + }, + "asset()": { + "details": "Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert." + }, + "balanceOf(address)": { + "details": "Returns the value of tokens owned by `account`." + }, + "convertToAssets(uint256)": { + "details": "Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the β€œper-user” price-per-share, and instead should reflect the β€œaverage-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." + }, + "convertToShares(uint256)": { + "details": "Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the β€œper-user” price-per-share, and instead should reflect the β€œaverage-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." + }, + "decimals()": { + "details": "Returns the decimals places of the token." + }, + "deposit(uint256,address)": { + "details": "Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." + }, + "maxDeposit(address)": { + "details": "Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert." + }, + "maxMint(address)": { + "details": "Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert." + }, + "maxRedeem(address)": { + "details": "Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert." + }, + "maxWithdraw(address)": { + "details": "Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert." + }, + "mint(uint256,address)": { + "details": "Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." + }, + "name()": { + "details": "Returns the name of the token." + }, + "previewDeposit(uint256)": { + "details": "Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." + }, + "previewMint(uint256)": { + "details": "Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting." + }, + "previewRedeem(uint256)": { + "details": "Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming." + }, + "previewWithdraw(uint256)": { + "details": "Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." + }, + "redeem(uint256,address,address)": { + "details": "Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." + }, + "symbol()": { + "details": "Returns the symbol of the token." + }, + "totalAssets()": { + "details": "Returns the total amount of the underlying asset that is β€œmanaged” by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert." + }, + "totalSupply()": { + "details": "Returns the value of tokens in existence." + }, + "transfer(address,uint256)": { + "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferFrom(address,address,uint256)": { + "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "withdraw(uint256,address,address)": { + "details": "Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "asset()": "38d52e0f", + "balanceOf(address)": "70a08231", + "convertToAssets(uint256)": "07a2d13a", + "convertToShares(uint256)": "c6e6f592", + "decimals()": "313ce567", + "deposit(uint256,address)": "6e553f65", + "maxDeposit(address)": "402d267d", + "maxMint(address)": "c63d75b6", + "maxRedeem(address)": "d905777e", + "maxWithdraw(address)": "ce96cb77", + "mint(uint256,address)": "94bf804d", + "name()": "06fdde03", + "previewDeposit(uint256)": "ef8b30f7", + "previewMint(uint256)": "b3d7f6b9", + "previewRedeem(uint256)": "4cdad506", + "previewWithdraw(uint256)": "0a28a477", + "redeem(uint256,address,address)": "ba087652", + "symbol()": "95d89b41", + "totalAssets()": "01e1d114", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "withdraw(uint256,address,address)": "b460af94" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "IERC20": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Interface of the ERC20 standard as defined in the EIP.", + "events": { + "Approval(address,address,uint256)": { + "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." + }, + "Transfer(address,address,uint256)": { + "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." + } + }, + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." + }, + "approve(address,uint256)": { + "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." + }, + "balanceOf(address)": { + "details": "Returns the value of tokens owned by `account`." + }, + "totalSupply()": { + "details": "Returns the value of tokens in existence." + }, + "transfer(address,uint256)": { + "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferFrom(address,address,uint256)": { + "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "IERC20Metadata": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Interface for the optional metadata functions from the ERC20 standard.", + "events": { + "Approval(address,address,uint256)": { + "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." + }, + "Transfer(address,address,uint256)": { + "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." + } + }, + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." + }, + "approve(address,uint256)": { + "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." + }, + "balanceOf(address)": { + "details": "Returns the value of tokens owned by `account`." + }, + "decimals()": { + "details": "Returns the decimals places of the token." + }, + "name()": { + "details": "Returns the name of the token." + }, + "symbol()": { + "details": "Returns the symbol of the token." + }, + "totalSupply()": { + "details": "Returns the value of tokens in existence." + }, + "transfer(address,uint256)": { + "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + }, + "transferFrom(address,address,uint256)": { + "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "Context": { + "abi": [], + "devdoc": { + "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.", + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x3dcd533a3f709bda89bb8e649eb97aed96578e606f3796609544b1dcff975a0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83fa9b15077fd2f33f6c175d694e2f7ae9c9a289c7feaca40aa7d6feb8d87c26\",\"dweb:/ipfs/QmQLfKCJ7mjiEeCGN1sHgWT8wjAMbAmBqcBVoQQyUZa5ws\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol": { + "IAllowanceTransfer": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "AllowanceExpired", + "type": "error" + }, + { + "inputs": [], + "name": "ExcessiveInvalidation", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "InsufficientAllowance", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "Lockdown", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "newNonce", + "type": "uint48" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "oldNonce", + "type": "uint48" + } + ], + "name": "NonceInvalidation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + }, + { + "indexed": false, + "internalType": "uint48", + "name": "nonce", + "type": "uint48" + } + ], + "name": "Permit", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "nonce", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint48", + "name": "newNonce", + "type": "uint48" + } + ], + "name": "invalidateNonces", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "internalType": "struct IAllowanceTransfer.TokenSpenderPair[]", + "name": "approvals", + "type": "tuple[]" + } + ], + "name": "lockdown", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "nonce", + "type": "uint48" + } + ], + "internalType": "struct IAllowanceTransfer.PermitDetails[]", + "name": "details", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sigDeadline", + "type": "uint256" + } + ], + "internalType": "struct IAllowanceTransfer.PermitBatch", + "name": "permitBatch", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "uint48", + "name": "expiration", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "nonce", + "type": "uint48" + } + ], + "internalType": "struct IAllowanceTransfer.PermitDetails", + "name": "details", + "type": "tuple" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sigDeadline", + "type": "uint256" + } + ], + "internalType": "struct IAllowanceTransfer.PermitSingle", + "name": "permitSingle", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "internalType": "struct IAllowanceTransfer.AllowanceTransferDetails[]", + "name": "transferDetails", + "type": "tuple[]" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint160", + "name": "amount", + "type": "uint160" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Requires user's token approval on the Permit2 contract", + "errors": { + "AllowanceExpired(uint256)": [ + { + "params": { + "deadline": "The timestamp at which the allowed amount is no longer valid" + } + } + ], + "InsufficientAllowance(uint256)": [ + { + "params": { + "amount": "The maximum amount allowed" + } + } + ] + }, + "kind": "dev", + "methods": { + "allowance(address,address,address)": { + "details": "The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals." + }, + "approve(address,address,uint160,uint48)": { + "details": "The packed allowance also holds a nonce, which will stay unchanged in approveSetting amount to type(uint160).max sets an unlimited approval", + "params": { + "amount": "The approved amount of the token", + "expiration": "The timestamp at which the approval is no longer valid", + "spender": "The spender address to approve", + "token": "The token to approve" + } + }, + "invalidateNonces(address,address,uint48)": { + "details": "Can't invalidate more than 2**16 nonces per transaction.", + "params": { + "newNonce": "The new nonce to set. Invalidates all nonces less than it.", + "spender": "The spender to invalidate nonces for", + "token": "The token to invalidate nonces for" + } + }, + "lockdown((address,address)[])": { + "params": { + "approvals": "Array of approvals to revoke." + } + }, + "permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)": { + "details": "May fail if the owner's nonce was invalidated in-flight by invalidateNonce", + "params": { + "owner": "The owner of the tokens being approved", + "permitSingle": "Data signed over by the owner specifying the terms of approval", + "signature": "The owner's signature over the permit data" + } + }, + "permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)": { + "details": "May fail if the owner's nonce was invalidated in-flight by invalidateNonce", + "params": { + "owner": "The owner of the tokens being approved", + "permitBatch": "Data signed over by the owner specifying the terms of approval", + "signature": "The owner's signature over the permit data" + } + }, + "transferFrom((address,address,uint160,address)[])": { + "details": "Requires the from addresses to have approved at least the desired amount of tokens to msg.sender.", + "params": { + "transferDetails": "Array of owners, recipients, amounts, and tokens for the transfers" + } + }, + "transferFrom(address,address,uint160,address)": { + "details": "Requires the from address to have approved at least the desired amount of tokens to msg.sender.", + "params": { + "amount": "The amount of the token to transfer", + "from": "The address to transfer from", + "to": "The address of the recipient", + "token": "The token address to transfer" + } + } + }, + "title": "AllowanceTransfer", + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address,address)": "927da105", + "approve(address,address,uint160,uint48)": "87517c45", + "invalidateNonces(address,address,uint48)": "65d9723c", + "lockdown((address,address)[])": "cc53287f", + "permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)": "2b67b570", + "permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)": "2a2d80d1", + "transferFrom((address,address,uint160,address)[])": "0d58b1db", + "transferFrom(address,address,uint160,address)": "36c78516" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"AllowanceExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExcessiveInvalidation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InsufficientAllowance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"Lockdown\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"oldNonce\",\"type\":\"uint48\"}],\"name\":\"NonceInvalidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"name\":\"Permit\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"}],\"name\":\"invalidateNonces\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.TokenSpenderPair[]\",\"name\":\"approvals\",\"type\":\"tuple[]\"}],\"name\":\"lockdown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permitBatch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails\",\"name\":\"details\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitSingle\",\"name\":\"permitSingle\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.AllowanceTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Requires user's token approval on the Permit2 contract\",\"errors\":{\"AllowanceExpired(uint256)\":[{\"params\":{\"deadline\":\"The timestamp at which the allowed amount is no longer valid\"}}],\"InsufficientAllowance(uint256)\":[{\"params\":{\"amount\":\"The maximum amount allowed\"}}]},\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"details\":\"The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.\"},\"approve(address,address,uint160,uint48)\":{\"details\":\"The packed allowance also holds a nonce, which will stay unchanged in approveSetting amount to type(uint160).max sets an unlimited approval\",\"params\":{\"amount\":\"The approved amount of the token\",\"expiration\":\"The timestamp at which the approval is no longer valid\",\"spender\":\"The spender address to approve\",\"token\":\"The token to approve\"}},\"invalidateNonces(address,address,uint48)\":{\"details\":\"Can't invalidate more than 2**16 nonces per transaction.\",\"params\":{\"newNonce\":\"The new nonce to set. Invalidates all nonces less than it.\",\"spender\":\"The spender to invalidate nonces for\",\"token\":\"The token to invalidate nonces for\"}},\"lockdown((address,address)[])\":{\"params\":{\"approvals\":\"Array of approvals to revoke.\"}},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitSingle\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitBatch\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"transferFrom((address,address,uint160,address)[])\":{\"details\":\"Requires the from addresses to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"transferDetails\":\"Array of owners, recipients, amounts, and tokens for the transfers\"}},\"transferFrom(address,address,uint160,address)\":{\"details\":\"Requires the from address to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"amount\":\"The amount of the token to transfer\",\"from\":\"The address to transfer from\",\"to\":\"The address of the recipient\",\"token\":\"The token address to transfer\"}}},\"title\":\"AllowanceTransfer\",\"version\":1},\"userdoc\":{\"errors\":{\"AllowanceExpired(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has expired.\"}],\"ExcessiveInvalidation()\":[{\"notice\":\"Thrown when too many nonces are invalidated.\"}],\"InsufficientAllowance(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has been depleted.\"}]},\"events\":{\"Approval(address,address,address,uint160,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions on a token for the spender.\"},\"Lockdown(address,address,address)\":{\"notice\":\"Emits an event when the owner sets the allowance back to 0 with the lockdown function.\"},\"NonceInvalidation(address,address,address,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully invalidates an ordered nonce.\"},\"Permit(address,address,address,uint160,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\"},\"approve(address,address,uint160,uint48)\":{\"notice\":\"Approves the spender to use up to amount of the specified token up until the expiration\"},\"invalidateNonces(address,address,uint48)\":{\"notice\":\"Invalidate nonces for a given (token, spender) pair\"},\"lockdown((address,address)[])\":{\"notice\":\"Enables performing a \\\"lockdown\\\" of the sender's Permit2 identity by batch revoking approvals\"},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"notice\":\"Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\"},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"notice\":\"Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\"},\"transferFrom((address,address,uint160,address)[])\":{\"notice\":\"Transfer approved tokens in a batch\"},\"transferFrom(address,address,uint160,address)\":{\"notice\":\"Transfer approved tokens from one address to another\"}},\"notice\":\"Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol\":\"IAllowanceTransfer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0xeb7200ec49f3ea7e11b33794136c20ef2d891ccadaa71076f88e260c3598c018\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41577fbfd33a0aeef565f8d15ce93096eacd45c139cc492dbe2b178e6623b820\",\"dweb:/ipfs/QmQJqhQXyNKxYXozYn57LLcXvcPkkb1ZF8qiZFfkZ93EdL\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0x4e636cd794e7d55aa94f4f41799ced22734f29a1299c77679dabe01fcdb9729b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a72d61d25dcaed4a41f18733186fb498e04d178a9da7948a07c1888c44edbac9\",\"dweb:/ipfs/QmTDm4CFGZVNsp2Lweh3hnBj6kaU8hRxeZaVbH96ov4Aqg\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "errors": { + "AllowanceExpired(uint256)": [ + { + "notice": "Thrown when an allowance on a token has expired." + } + ], + "ExcessiveInvalidation()": [ + { + "notice": "Thrown when too many nonces are invalidated." + } + ], + "InsufficientAllowance(uint256)": [ + { + "notice": "Thrown when an allowance on a token has been depleted." + } + ] + }, + "events": { + "Approval(address,address,address,uint160,uint48)": { + "notice": "Emits an event when the owner successfully sets permissions on a token for the spender." + }, + "Lockdown(address,address,address)": { + "notice": "Emits an event when the owner sets the allowance back to 0 with the lockdown function." + }, + "NonceInvalidation(address,address,address,uint48,uint48)": { + "notice": "Emits an event when the owner successfully invalidates an ordered nonce." + }, + "Permit(address,address,address,uint160,uint48,uint48)": { + "notice": "Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender." + } + }, + "kind": "user", + "methods": { + "allowance(address,address,address)": { + "notice": "A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]" + }, + "approve(address,address,uint160,uint48)": { + "notice": "Approves the spender to use up to amount of the specified token up until the expiration" + }, + "invalidateNonces(address,address,uint48)": { + "notice": "Invalidate nonces for a given (token, spender) pair" + }, + "lockdown((address,address)[])": { + "notice": "Enables performing a \"lockdown\" of the sender's Permit2 identity by batch revoking approvals" + }, + "permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)": { + "notice": "Permit a spender to a given amount of the owners token via the owner's EIP-712 signature" + }, + "permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)": { + "notice": "Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature" + }, + "transferFrom((address,address,uint160,address)[])": { + "notice": "Transfer approved tokens in a batch" + }, + "transferFrom(address,address,uint160,address)": { + "notice": "Transfer approved tokens from one address to another" + } + }, + "notice": "Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts", + "version": 1 + } + } + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol": { + "IEIP712": { + "abi": [ + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":\"IEIP712\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0x4e636cd794e7d55aa94f4f41799ced22734f29a1299c77679dabe01fcdb9729b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a72d61d25dcaed4a41f18733186fb498e04d178a9da7948a07c1888c44edbac9\",\"dweb:/ipfs/QmTDm4CFGZVNsp2Lweh3hnBj6kaU8hRxeZaVbH96ov4Aqg\"]}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + } + }, + "errors": [ + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:135:9:\n |\n135 | AddLiquidityKind kind,\n | ^^^^^^^^^^^^^^^^^^^^^\n\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 5901, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 5880 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:136:9:\n |\n136 | uint256[] memory amountsInScaled18,\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 5946, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 5912 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:138:9:\n |\n138 | uint256 bptAmountOut,\n | ^^^^^^^^^^^^^^^^^^^^\n\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 6017, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 5997 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:139:9:\n |\n139 | uint256[] memory balancesScaled18,\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 6061, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 6028 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:140:9:\n |\n140 | bytes memory userData\n | ^^^^^^^^^^^^^^^^^^^^^\n\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 6093, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 6072 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "2018", + "formattedMessage": "Warning: Function state mutability can be restricted to view\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:203:5:\n |\n203 | function _calculateAmountBaseRewards(address sender, IERC20 token) private returns(uint256){\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n", + "message": "Function state mutability can be restricted to view", + "severity": "warning", + "sourceLocation": { + "end": 9514, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 8811 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "2018", + "formattedMessage": "Warning: Function state mutability can be restricted to view\n --> e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol:224:5:\n |\n224 | function _calculateTimeBaseRewards(address sender, IERC20 token) private returns(uint256){\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n", + "message": "Function state mutability can be restricted to view", + "severity": "warning", + "sourceLocation": { + "end": 10256, + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "start": 9522 + }, + "type": "Warning" + } + ], + "sources": { + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "BaseHooks": [ + 3061 + ], + "HookFlags": [ + 2572 + ], + "IBasePoolFactory": [ + 570 + ], + "IERC20": [ + 3506 + ], + "IHooks": [ + 772 + ], + "IRouterCommon": [ + 1144 + ], + "IVault": [ + 1181 + ], + "LPIncentivizedHook": [ + 484 + ], + "LiquidityManagement": [ + 2525 + ], + "Ownable": [ + 3258 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "TokenConfig": [ + 2639 + ], + "VaultGuard": [ + 3110 + ] + }, + "id": 485, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:0" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 3, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3507, + "src": "76:137:0", + "symbolAliases": [ + { + "foreign": { + "id": 2, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol", + "id": 5, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3259, + "src": "215:134:0", + "symbolAliases": [ + { + "foreign": { + "id": 4, + "name": "Ownable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3258, + "src": "224:7:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol", + "id": 7, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 571, + "src": "353:164:0", + "symbolAliases": [ + { + "foreign": { + "id": 6, + "name": "IBasePoolFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 570, + "src": "362:16:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "id": 9, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 773, + "src": "519:144:0", + "symbolAliases": [ + { + "foreign": { + "id": 8, + "name": "IHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 772, + "src": "528:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol", + "id": 11, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 1145, + "src": "665:158:0", + "symbolAliases": [ + { + "foreign": { + "id": 10, + "name": "IRouterCommon", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "674:13:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "id": 13, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 1182, + "src": "825:144:0", + "symbolAliases": [ + { + "foreign": { + "id": 12, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "834:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "id": 20, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 2819, + "src": "971:271:0", + "symbolAliases": [ + { + "foreign": { + "id": 14, + "name": "LiquidityManagement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2525, + "src": "985:19:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 15, + "name": "TokenConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2639, + "src": "1011:11:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 16, + "name": "PoolSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2717, + "src": "1029:14:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 17, + "name": "HookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1050:9:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 18, + "name": "AddLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "1066:16:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 19, + "name": "RemoveLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "1089:19:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol", + "id": 22, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3111, + "src": "1246:141:0", + "symbolAliases": [ + { + "foreign": { + "id": 21, + "name": "VaultGuard", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3110, + "src": "1255:10:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + "id": 24, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3062, + "src": "1389:139:0", + "symbolAliases": [ + { + "foreign": { + "id": 23, + "name": "BaseHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3061, + "src": "1398:9:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 26, + "name": "BaseHooks", + "nameLocations": [ + "1715:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3061, + "src": "1715:9:0" + }, + "id": 27, + "nodeType": "InheritanceSpecifier", + "src": "1715:9:0" + }, + { + "baseName": { + "id": 28, + "name": "VaultGuard", + "nameLocations": [ + "1726:10:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3110, + "src": "1726:10:0" + }, + "id": 29, + "nodeType": "InheritanceSpecifier", + "src": "1726:10:0" + }, + { + "baseName": { + "id": 30, + "name": "Ownable", + "nameLocations": [ + "1738:7:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3258, + "src": "1738:7:0" + }, + "id": 31, + "nodeType": "InheritanceSpecifier", + "src": "1738:7:0" + } + ], + "canonicalName": "LPIncentivizedHook", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 25, + "nodeType": "StructuredDocumentation", + "src": "1532:150:0", + "text": " @notice Hook that gives a swap fee discount to lpRWD holders.\n @dev Uses to reward Liquidity Providers (LPs) based on multiple factors" + }, + "fullyImplemented": true, + "id": 484, + "linearizedBaseContracts": [ + 484, + 3258, + 3562, + 3110, + 3061, + 772 + ], + "name": "LPIncentivizedHook", + "nameLocation": "1693:18:0", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 33, + "mutability": "immutable", + "name": "_allowedFactory", + "nameLocation": "1862:15:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "1836:41:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 32, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1836:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 35, + "mutability": "immutable", + "name": "_trustedRouter", + "nameLocation": "2069:14:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "2043:40:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 34, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2043:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 38, + "mutability": "immutable", + "name": "_lpRWD", + "nameLocation": "2176:6:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "2151:31:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 37, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 36, + "name": "IERC20", + "nameLocations": [ + "2151:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2151:6:0" + }, + "referencedDeclaration": 3506, + "src": "2151:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "canonicalName": "LPIncentivizedHook.LPInfo", + "id": 45, + "members": [ + { + "constant": false, + "id": 40, + "mutability": "mutable", + "name": "totalLiquidity", + "nameLocation": "2263:14:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2255:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 39, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2255:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 42, + "mutability": "mutable", + "name": "liquidityStartTime", + "nameLocation": "2296:18:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2288:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 41, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2288:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 44, + "mutability": "mutable", + "name": "rewards", + "nameLocation": "2333:7:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2325:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 43, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2325:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "LPInfo", + "nameLocation": "2237:6:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2230:118:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.LPIncentiveFactor", + "id": 50, + "members": [ + { + "constant": false, + "id": 47, + "mutability": "mutable", + "name": "amountBaseLiquidity", + "nameLocation": "2442:19:0", + "nodeType": "VariableDeclaration", + "scope": 50, + "src": "2437:24:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 46, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2437:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49, + "mutability": "mutable", + "name": "timeBaseLiquidity", + "nameLocation": "2477:17:0", + "nodeType": "VariableDeclaration", + "scope": 50, + "src": "2472:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 48, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2472:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "LPIncentiveFactor", + "nameLocation": "2408:17:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2401:101:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.AmountBaseLiquidityParameters", + "id": 59, + "members": [ + { + "constant": false, + "id": 52, + "mutability": "mutable", + "name": "mediumLiquidityAmountTrigger", + "nameLocation": "2623:28:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2615:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 51, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2615:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 54, + "mutability": "mutable", + "name": "higherLiquidityAmountTrigger", + "nameLocation": "2670:28:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2662:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 53, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2662:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 56, + "mutability": "mutable", + "name": "mediumLiquidityAmountRewardFee", + "nameLocation": "2717:30:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2709:38:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 55, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2709:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58, + "mutability": "mutable", + "name": "higherLiquidityAmountRewardFee", + "nameLocation": "2766:30:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2758:38:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2758:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "AmountBaseLiquidityParameters", + "nameLocation": "2574:29:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2567:237:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.TimeBaseLiquidityParameters", + "id": 68, + "members": [ + { + "constant": false, + "id": 61, + "mutability": "mutable", + "name": "mediumLiquidityTimeTrigger", + "nameLocation": "2957:26:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "2949:34:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2949:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63, + "mutability": "mutable", + "name": "higherLiquidityTimeTrigger", + "nameLocation": "3002:26:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "2994:34:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2994:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 65, + "mutability": "mutable", + "name": "mediumLiquidityTimeRewardFee", + "nameLocation": "3047:28:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3039:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 64, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3039:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 67, + "mutability": "mutable", + "name": "higherLiquidityTimeRewardFee", + "nameLocation": "3094:28:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3086:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 66, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3086:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "TimeBaseLiquidityParameters", + "nameLocation": "2910:27:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2903:227:0", + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "6c55c747", + "id": 71, + "mutability": "mutable", + "name": "activeIncentiveFactor", + "nameLocation": "3206:21:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3181:46:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + }, + "typeName": { + "id": 70, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 69, + "name": "LPIncentiveFactor", + "nameLocations": [ + "3181:17:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50, + "src": "3181:17:0" + }, + "referencedDeclaration": 50, + "src": "3181:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "c9e6e6ca", + "id": 74, + "mutability": "mutable", + "name": "activeAmountBaseLiquidityParameters", + "nameLocation": "3318:35:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3281:72:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + }, + "typeName": { + "id": 73, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 72, + "name": "AmountBaseLiquidityParameters", + "nameLocations": [ + "3281:29:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 59, + "src": "3281:29:0" + }, + "referencedDeclaration": 59, + "src": "3281:29:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "08a13d6a", + "id": 77, + "mutability": "mutable", + "name": "activeTimeBaseLiquidityParameters", + "nameLocation": "3440:33:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3405:68:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + }, + "typeName": { + "id": 76, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 75, + "name": "TimeBaseLiquidityParameters", + "nameLocations": [ + "3405:27:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 68, + "src": "3405:27:0" + }, + "referencedDeclaration": 68, + "src": "3405:27:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "b389771d", + "id": 85, + "mutability": "mutable", + "name": "lpInfos", + "nameLocation": "3576:7:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3524:59:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo))" + }, + "typeName": { + "id": 84, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 78, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3532:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3524:44:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo))" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 83, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 80, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79, + "name": "IERC20", + "nameLocations": [ + "3550:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3550:6:0" + }, + "referencedDeclaration": 3506, + "src": "3550:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "3542:25:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 82, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 81, + "name": "LPInfo", + "nameLocations": [ + "3560:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "3560:6:0" + }, + "referencedDeclaration": 45, + "src": "3560:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + } + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 86, + "nodeType": "StructuredDocumentation", + "src": "3592:381:0", + "text": " @notice A new `LPIncentivizedHook` contract has been registered successfully.\n @dev If the registration fails the call will revert, so there will be no event.\n @param hooksContract This contract\n @param factory The factory (must be the allowed factory, or the call will revert)\n @param pool The pool on which the hook was registered" + }, + "eventSelector": "cbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b4", + "id": 94, + "name": "LPIncentivizedHookRegistered", + "nameLocation": "3985:28:0", + "nodeType": "EventDefinition", + "parameters": { + "id": 93, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 88, + "indexed": true, + "mutability": "mutable", + "name": "hooksContract", + "nameLocation": "4040:13:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4024:29:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 87, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4024:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 90, + "indexed": true, + "mutability": "mutable", + "name": "factory", + "nameLocation": "4080:7:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4064:23:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 89, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4064:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 92, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4114:4:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4098:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 91, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4098:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4013:112:0" + }, + "src": "3979:147:0" + }, + { + "anonymous": false, + "documentation": { + "id": 95, + "nodeType": "StructuredDocumentation", + "src": "4134:155:0", + "text": " @dev Event if rewards distributed successfully.\n @param LPAddress Liquidity provider address\n @param reward Earn rewards" + }, + "eventSelector": "e34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea6", + "id": 101, + "name": "RewardDistributed", + "nameLocation": "4301:17:0", + "nodeType": "EventDefinition", + "parameters": { + "id": 100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 97, + "indexed": true, + "mutability": "mutable", + "name": "LPAddress", + "nameLocation": "4345:9:0", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "4329:25:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 96, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4329:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "indexed": false, + "mutability": "mutable", + "name": "reward", + "nameLocation": "4373:6:0", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "4365:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4365:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4318:68:0" + }, + "src": "4295:92:0" + }, + { + "body": { + "id": 141, + "nodeType": "Block", + "src": "4566:178:0", + "statements": [ + { + "expression": { + "id": 125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 123, + "name": "_allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "4577:15:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 124, + "name": "allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 106, + "src": "4595:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4577:32:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 126, + "nodeType": "ExpressionStatement", + "src": "4577:32:0" + }, + { + "expression": { + "id": 129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 127, + "name": "_trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "4620:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 128, + "name": "trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "4637:13:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4620:30:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 130, + "nodeType": "ExpressionStatement", + "src": "4620:30:0" + }, + { + "expression": { + "id": 135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 131, + "name": "_lpRWD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "4661:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 133, + "name": "lpRWD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 108, + "src": "4677:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 132, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "4670:6:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$3506_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4670:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "src": "4661:22:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 136, + "nodeType": "ExpressionStatement", + "src": "4661:22:0" + }, + { + "expression": { + "id": 139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 137, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "4694:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 138, + "name": "_lpIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113, + "src": "4718:18:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor memory" + } + }, + "src": "4694:42:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 140, + "nodeType": "ExpressionStatement", + "src": "4694:42:0" + } + ] + }, + "id": 142, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 116, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 104, + "src": "4539:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + } + ], + "id": 117, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 115, + "name": "VaultGuard", + "nameLocations": [ + "4528:10:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3110, + "src": "4528:10:0" + }, + "nodeType": "ModifierInvocation", + "src": "4528:17:0" + }, + { + "arguments": [ + { + "expression": { + "id": 119, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "4554:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4558:6:0", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4554:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 121, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 118, + "name": "Ownable", + "nameLocations": [ + "4546:7:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3258, + "src": "4546:7:0" + }, + "nodeType": "ModifierInvocation", + "src": "4546:19:0" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 114, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 104, + "mutability": "mutable", + "name": "vault", + "nameLocation": "4414:5:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4407:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 103, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 102, + "name": "IVault", + "nameLocations": [ + "4407:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "4407:6:0" + }, + "referencedDeclaration": 1181, + "src": "4407:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 106, + "mutability": "mutable", + "name": "allowedFactory", + "nameLocation": "4429:14:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4421:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 105, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4421:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 108, + "mutability": "mutable", + "name": "lpRWD", + "nameLocation": "4453:5:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4445:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 107, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4445:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 110, + "mutability": "mutable", + "name": "trustedRouter", + "nameLocation": "4468:13:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4460:21:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 109, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4460:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 113, + "mutability": "mutable", + "name": "_lpIncentiveFactor", + "nameLocation": "4508:18:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4483:43:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + }, + "typeName": { + "id": 112, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 111, + "name": "LPIncentiveFactor", + "nameLocations": [ + "4483:17:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50, + "src": "4483:17:0" + }, + "referencedDeclaration": 50, + "src": "4483:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + } + }, + "visibility": "internal" + } + ], + "src": "4406:121:0" + }, + "returnParameters": { + "id": 122, + "nodeType": "ParameterList", + "parameters": [], + "src": "4566:0:0" + }, + "scope": 484, + "src": "4395:349:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2860 + ], + "body": { + "id": 162, + "nodeType": "Block", + "src": "4862:121:0", + "statements": [ + { + "expression": { + "id": 154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 150, + "name": "hookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "4873:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags memory" + } + }, + "id": 152, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4883:27:0", + "memberName": "shouldCallAfterAddLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 2567, + "src": "4873:37:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4913:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4873:44:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 155, + "nodeType": "ExpressionStatement", + "src": "4873:44:0" + }, + { + "expression": { + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 156, + "name": "hookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "4928:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags memory" + } + }, + "id": 158, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4938:30:0", + "memberName": "shouldCallAfterRemoveLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 2571, + "src": "4928:40:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4971:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4928:47:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 161, + "nodeType": "ExpressionStatement", + "src": "4928:47:0" + } + ] + }, + "documentation": { + "id": 143, + "nodeType": "StructuredDocumentation", + "src": "4752:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "d77153a7", + "id": 163, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getHookFlags", + "nameLocation": "4789:12:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 145, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4816:8:0" + }, + "parameters": { + "id": 144, + "nodeType": "ParameterList", + "parameters": [], + "src": "4801:2:0" + }, + "returnParameters": { + "id": 149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 148, + "mutability": "mutable", + "name": "hookFlags", + "nameLocation": "4851:9:0", + "nodeType": "VariableDeclaration", + "scope": 163, + "src": "4834:26:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags" + }, + "typeName": { + "id": 147, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 146, + "name": "HookFlags", + "nameLocations": [ + "4834:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2572, + "src": "4834:9:0" + }, + "referencedDeclaration": 2572, + "src": "4834:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_storage_ptr", + "typeString": "struct HookFlags" + } + }, + "visibility": "internal" + } + ], + "src": "4833:28:0" + }, + "scope": 484, + "src": "4780:203:0", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2853 + ], + "body": { + "id": 203, + "nodeType": "Block", + "src": "5206:551:0", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "id": 186, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "5629:4:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_LPIncentivizedHook_$484", + "typeString": "contract LPIncentivizedHook" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_LPIncentivizedHook_$484", + "typeString": "contract LPIncentivizedHook" + } + ], + "id": 185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5621:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 184, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5621:7:0", + "typeDescriptions": {} + } + }, + "id": 187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5621:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 188, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5636:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 189, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 168, + "src": "5645:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 183, + "name": "LPIncentivizedHookRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 94, + "src": "5592:28:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address,address)" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5592:58:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 191, + "nodeType": "EmitStatement", + "src": "5587:63:0" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 192, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5670:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 193, + "name": "_allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "5681:15:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5670:26:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [ + { + "id": 199, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 168, + "src": "5744:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 196, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5717:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 195, + "name": "IBasePoolFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 570, + "src": "5700:16:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBasePoolFactory_$570_$", + "typeString": "type(contract IBasePoolFactory)" + } + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5700:25:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBasePoolFactory_$570", + "typeString": "contract IBasePoolFactory" + } + }, + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5726:17:0", + "memberName": "isPoolFromFactory", + "nodeType": "MemberAccess", + "referencedDeclaration": 551, + "src": "5700:43:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view external returns (bool)" + } + }, + "id": 200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5700:49:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5670:79:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 182, + "id": 202, + "nodeType": "Return", + "src": "5663:86:0" + } + ] + }, + "documentation": { + "id": 164, + "nodeType": "StructuredDocumentation", + "src": "4991:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "0b89f182", + "id": 204, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 179, + "kind": "modifierInvocation", + "modifierName": { + "id": 178, + "name": "onlyVault", + "nameLocations": [ + "5181:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3089, + "src": "5181:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "5181:9:0" + } + ], + "name": "onRegister", + "nameLocation": "5028:10:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 177, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5172:8:0" + }, + "parameters": { + "id": 176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 166, + "mutability": "mutable", + "name": "factory", + "nameLocation": "5057:7:0", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5049:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5049:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 168, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5083:4:0", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5075:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 167, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5075:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 172, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5098:20:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 170, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 169, + "name": "TokenConfig", + "nameLocations": [ + "5098:11:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "5098:11:0" + }, + "referencedDeclaration": 2639, + "src": "5098:11:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 171, + "nodeType": "ArrayTypeName", + "src": "5098:13:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 175, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5129:28:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_calldata_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 174, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 173, + "name": "LiquidityManagement", + "nameLocations": [ + "5129:19:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "5129:19:0" + }, + "referencedDeclaration": 2525, + "src": "5129:19:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "5038:126:0" + }, + "returnParameters": { + "id": 182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 181, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5200:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 180, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5200:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5199:6:0" + }, + "scope": 484, + "src": "5019:738:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2950 + ], + "body": { + "id": 336, + "nodeType": "Block", + "src": "6192:1025:0", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 236, + "name": "router", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "6209:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 237, + "name": "_trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "6219:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6209:24:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 244, + "nodeType": "IfStatement", + "src": "6205:191:0", + "trueBody": { + "id": 243, + "nodeType": "Block", + "src": "6235:161:0", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6364:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 240, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6371:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 241, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6363:21:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 235, + "id": 242, + "nodeType": "Return", + "src": "6356:28:0" + } + ] + } + }, + { + "assignments": [ + 246 + ], + "declarations": [ + { + "constant": false, + "id": 246, + "mutability": "mutable", + "name": "sender", + "nameLocation": "6416:6:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6408:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6408:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 252, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 248, + "name": "router", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "6439:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 247, + "name": "IRouterCommon", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "6425:13:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRouterCommon_$1144_$", + "typeString": "type(contract IRouterCommon)" + } + }, + "id": 249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6425:21:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRouterCommon_$1144", + "typeString": "contract IRouterCommon" + } + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6447:9:0", + "memberName": "getSender", + "nodeType": "MemberAccess", + "referencedDeclaration": 1098, + "src": "6425:31:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6425:33:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6408:50:0" + }, + { + "assignments": [ + 254 + ], + "declarations": [ + { + "constant": false, + "id": 254, + "mutability": "mutable", + "name": "_totalLiquidity", + "nameLocation": "6477:15:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6469:23:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 253, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6469:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 256, + "initialValue": { + "hexValue": "30", + "id": 255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6495:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6469:27:0" + }, + { + "assignments": [ + 261 + ], + "declarations": [ + { + "constant": false, + "id": 261, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6523:6:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6507:22:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 259, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 258, + "name": "IERC20", + "nameLocations": [ + "6507:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6507:6:0" + }, + "referencedDeclaration": 3506, + "src": "6507:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 260, + "nodeType": "ArrayTypeName", + "src": "6507:8:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "id": 266, + "initialValue": { + "arguments": [ + { + "id": 264, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "6553:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 262, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3071, + "src": "6532:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6539:13:0", + "memberName": "getPoolTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 2123, + "src": "6532:20:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr_$", + "typeString": "function (address) view external returns (contract IERC20[] memory)" + } + }, + "id": 265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6532:26:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6507:51:0" + }, + { + "assignments": [ + 268 + ], + "declarations": [ + { + "constant": false, + "id": 268, + "mutability": "mutable", + "name": "_amountBaseReward", + "nameLocation": "6577:17:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6569:25:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6569:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 270, + "initialValue": { + "hexValue": "30", + "id": 269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6597:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6569:29:0" + }, + { + "body": { + "id": 330, + "nodeType": "Block", + "src": "6661:501:0", + "statements": [ + { + "expression": { + "id": 286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 282, + "name": "_totalLiquidity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 254, + "src": "6680:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 283, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6698:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 285, + "indexExpression": { + "id": 284, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6711:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6698:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6680:33:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 287, + "nodeType": "ExpressionStatement", + "src": "6680:33:0" + }, + { + "assignments": [ + 290 + ], + "declarations": [ + { + "constant": false, + "id": 290, + "mutability": "mutable", + "name": "info", + "nameLocation": "6747:4:0", + "nodeType": "VariableDeclaration", + "scope": 330, + "src": "6732:19:0", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 289, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 288, + "name": "LPInfo", + "nameLocations": [ + "6732:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "6732:6:0" + }, + "referencedDeclaration": 45, + "src": "6732:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 298, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 291, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "6754:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 293, + "indexExpression": { + "id": 292, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 246, + "src": "6762:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6754:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 297, + "indexExpression": { + "baseExpression": { + "id": 294, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "6770:6:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 296, + "indexExpression": { + "id": 295, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6777:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6770:9:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6754:26:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6732:48:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 299, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "6886:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 300, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6891:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "6886:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6909:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6886:24:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 311, + "nodeType": "IfStatement", + "src": "6882:114:0", + "trueBody": { + "id": 310, + "nodeType": "Block", + "src": "6912:84:0", + "statements": [ + { + "expression": { + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 303, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "6935:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 305, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6940:18:0", + "memberName": "liquidityStartTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 42, + "src": "6935:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 306, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "6961:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6967:9:0", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6961:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6935:41:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "6935:41:0" + } + ] + } + }, + { + "expression": { + "id": 319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 312, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "7016:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 314, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "7021:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "7016:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "id": 317, + "name": "_totalLiquidity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 254, + "src": "7047:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7039:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 315, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7039:7:0", + "typeDescriptions": {} + } + }, + "id": 318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7039:24:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7016:47:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 320, + "nodeType": "ExpressionStatement", + "src": "7016:47:0" + }, + { + "expression": { + "id": 328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 321, + "name": "_amountBaseReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 268, + "src": "7084:17:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "id": 323, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 246, + "src": "7133:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 324, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "7140:6:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 326, + "indexExpression": { + "id": 325, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "7147:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7140:9:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + ], + "id": 322, + "name": "_calculateAmountBaseRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 427, + "src": "7105:27:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$3506_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) returns (uint256)" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7105:45:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7084:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 329, + "nodeType": "ExpressionStatement", + "src": "7084:66:0" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 275, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6631:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 276, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6635:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6648:6:0", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6635:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6631:23:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 331, + "initializationExpression": { + "assignments": [ + 272 + ], + "declarations": [ + { + "constant": false, + "id": 272, + "mutability": "mutable", + "name": "i", + "nameLocation": "6624:1:0", + "nodeType": "VariableDeclaration", + "scope": 331, + "src": "6616:9:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 271, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6616:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 274, + "initialValue": { + "hexValue": "30", + "id": 273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6628:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6616:13:0" + }, + "isSimpleCounterLoop": true, + "loopExpression": { + "expression": { + "id": 280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "6656:3:0", + "subExpression": { + "id": 279, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6656:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 281, + "nodeType": "ExpressionStatement", + "src": "6656:3:0" + }, + "nodeType": "ForStatement", + "src": "6611:551:0" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7190:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 333, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "7196:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 334, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7189:20:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 235, + "id": 335, + "nodeType": "Return", + "src": "7182:27:0" + } + ] + }, + "documentation": { + "id": 205, + "nodeType": "StructuredDocumentation", + "src": "5765:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "976907cc", + "id": 337, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 229, + "kind": "modifierInvocation", + "modifierName": { + "id": 228, + "name": "onlyVault", + "nameLocations": [ + "6117:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3089, + "src": "6117:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "6117:9:0" + } + ], + "name": "onAfterAddLiquidity", + "nameLocation": "5802:19:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 227, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6108:8:0" + }, + "parameters": { + "id": 226, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 207, + "mutability": "mutable", + "name": "router", + "nameLocation": "5840:6:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5832:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5832:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 209, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5865:4:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5857:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 208, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5857:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 212, + "mutability": "mutable", + "name": "kind", + "nameLocation": "5897:4:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5880:21:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 211, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 210, + "name": "AddLiquidityKind", + "nameLocations": [ + "5880:16:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "5880:16:0" + }, + "referencedDeclaration": 2752, + "src": "5880:16:0", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 215, + "mutability": "mutable", + "name": "amountsInScaled18", + "nameLocation": "5929:17:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5912:34:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5912:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 214, + "nodeType": "ArrayTypeName", + "src": "5912:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 218, + "mutability": "mutable", + "name": "amountsInRaw", + "nameLocation": "5974:12:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5957:29:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5957:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 217, + "nodeType": "ArrayTypeName", + "src": "5957:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 220, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "6005:12:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5997:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5997:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 223, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "6045:16:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6028:33:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6028:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 222, + "nodeType": "ArrayTypeName", + "src": "6028:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 225, + "mutability": "mutable", + "name": "userData", + "nameLocation": "6085:8:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6072:21:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 224, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6072:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5821:279:0" + }, + "returnParameters": { + "id": 235, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 231, + "mutability": "mutable", + "name": "success", + "nameLocation": "6141:7:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6136:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 230, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6136:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 234, + "mutability": "mutable", + "name": "hookAdjustedAmountsInRaw", + "nameLocation": "6167:24:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6150:41:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6150:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 233, + "nodeType": "ArrayTypeName", + "src": "6150:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6135:57:0" + }, + "scope": 484, + "src": "5793:1424:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 356, + "nodeType": "Block", + "src": "8049:203:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 347, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8068:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 348, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8090:19:0", + "memberName": "amountBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 47, + "src": "8068:41:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416d6f756e7420426173652052657761726473206973206e6f7420636f6e6669677572656420666f72207468697320486f6f6b2e", + "id": 349, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8110:54:0", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1b67d99abc4da4796a057c6980cb1dd9a385615b987b28bf660caf10a566f8e8", + "typeString": "literal_string \"Amount Base Rewards is not configured for this Hook.\"" + }, + "value": "Amount Base Rewards is not configured for this Hook." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1b67d99abc4da4796a057c6980cb1dd9a385615b987b28bf660caf10a566f8e8", + "typeString": "literal_string \"Amount Base Rewards is not configured for this Hook.\"" + } + ], + "id": 346, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "8060:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8060:105:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 351, + "nodeType": "ExpressionStatement", + "src": "8060:105:0" + }, + { + "expression": { + "id": 354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 352, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "8176:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 353, + "name": "_amountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 341, + "src": "8214:30:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_memory_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters memory" + } + }, + "src": "8176:68:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 355, + "nodeType": "ExpressionStatement", + "src": "8176:68:0" + } + ] + }, + "documentation": { + "id": 338, + "nodeType": "StructuredDocumentation", + "src": "7689:224:0", + "text": " @dev Sets the Amount based liquidity rewards parameters for the hook\n This function must be permissioned.\n @param _amountBaseLiquidityParameters The amount base liquidity parameters" + }, + "functionSelector": "ec93c2d2", + "id": 357, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 344, + "kind": "modifierInvocation", + "modifierName": { + "id": 343, + "name": "onlyOwner", + "nameLocations": [ + "8039:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "8039:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "8039:9:0" + } + ], + "name": "setAmountBaseLiquidityParameters", + "nameLocation": "7928:32:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 341, + "mutability": "mutable", + "name": "_amountBaseLiquidityParameters", + "nameLocation": "7998:30:0", + "nodeType": "VariableDeclaration", + "scope": 357, + "src": "7961:67:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_memory_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + }, + "typeName": { + "id": 340, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 339, + "name": "AmountBaseLiquidityParameters", + "nameLocations": [ + "7961:29:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 59, + "src": "7961:29:0" + }, + "referencedDeclaration": 59, + "src": "7961:29:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + } + }, + "visibility": "internal" + } + ], + "src": "7960:69:0" + }, + "returnParameters": { + "id": 345, + "nodeType": "ParameterList", + "parameters": [], + "src": "8049:0:0" + }, + "scope": 484, + "src": "7919:333:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 376, + "nodeType": "Block", + "src": "8608:195:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 367, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8627:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 368, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8649:17:0", + "memberName": "timeBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 49, + "src": "8627:39:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "54696d6520426173652052657761726473206973206e6f7420636f6e6669677572656420666f72207468697320486f6f6b2e", + "id": 369, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8667:52:0", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8547d7d0e4f07cab9978e2dabd7f51512e4e009423b0221a8c8bdd100a7cb24a", + "typeString": "literal_string \"Time Base Rewards is not configured for this Hook.\"" + }, + "value": "Time Base Rewards is not configured for this Hook." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8547d7d0e4f07cab9978e2dabd7f51512e4e009423b0221a8c8bdd100a7cb24a", + "typeString": "literal_string \"Time Base Rewards is not configured for this Hook.\"" + } + ], + "id": 366, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "8619:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8619:101:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 371, + "nodeType": "ExpressionStatement", + "src": "8619:101:0" + }, + { + "expression": { + "id": 374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 372, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "8731:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 373, + "name": "_timeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 361, + "src": "8767:28:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_memory_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters memory" + } + }, + "src": "8731:64:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 375, + "nodeType": "ExpressionStatement", + "src": "8731:64:0" + } + ] + }, + "documentation": { + "id": 358, + "nodeType": "StructuredDocumentation", + "src": "8260:218:0", + "text": " @dev Sets the Time based liquidity rewards parameters for the hook\n This function must be permissioned.\n @param _timeBaseLiquidityParameters The time base liquidity parameters" + }, + "functionSelector": "6683635f", + "id": 377, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 364, + "kind": "modifierInvocation", + "modifierName": { + "id": 363, + "name": "onlyOwner", + "nameLocations": [ + "8598:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "8598:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "8598:9:0" + } + ], + "name": "setTimeBaseLiquidityParameters", + "nameLocation": "8493:30:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 361, + "mutability": "mutable", + "name": "_timeBaseLiquidityParameters", + "nameLocation": "8559:28:0", + "nodeType": "VariableDeclaration", + "scope": 377, + "src": "8524:63:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_memory_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + }, + "typeName": { + "id": 360, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 359, + "name": "TimeBaseLiquidityParameters", + "nameLocations": [ + "8524:27:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 68, + "src": "8524:27:0" + }, + "referencedDeclaration": 68, + "src": "8524:27:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + } + }, + "visibility": "internal" + } + ], + "src": "8523:65:0" + }, + "returnParameters": { + "id": 365, + "nodeType": "ParameterList", + "parameters": [], + "src": "8608:0:0" + }, + "scope": 484, + "src": "8484:319:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 426, + "nodeType": "Block", + "src": "8902:612:0", + "statements": [ + { + "condition": { + "id": 389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8916:42:0", + "subExpression": { + "expression": { + "id": 387, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8917:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 388, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8939:19:0", + "memberName": "amountBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 47, + "src": "8917:41:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 393, + "nodeType": "IfStatement", + "src": "8913:81:0", + "trueBody": { + "id": 392, + "nodeType": "Block", + "src": "8959:35:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8981:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 386, + "id": 391, + "nodeType": "Return", + "src": "8974:8:0" + } + ] + } + }, + { + "assignments": [ + 396 + ], + "declarations": [ + { + "constant": false, + "id": 396, + "mutability": "mutable", + "name": "info", + "nameLocation": "9020:4:0", + "nodeType": "VariableDeclaration", + "scope": 426, + "src": "9006:18:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 395, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 394, + "name": "LPInfo", + "nameLocations": [ + "9006:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "9006:6:0" + }, + "referencedDeclaration": 45, + "src": "9006:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 402, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 397, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9027:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 399, + "indexExpression": { + "id": 398, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 379, + "src": "9035:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9027:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 401, + "indexExpression": { + "id": 400, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 382, + "src": "9043:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9027:22:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9006:43:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 403, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "9073:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 404, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9078:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "9073:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 405, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9095:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 406, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9131:28:0", + "memberName": "higherLiquidityAmountTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 54, + "src": "9095:64:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9073:86:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 412, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "9273:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 413, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9278:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "9273:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 414, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9295:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 415, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9331:28:0", + "memberName": "mediumLiquidityAmountTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 52, + "src": "9295:64:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9273:86:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 423, + "nodeType": "Block", + "src": "9470:37:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 421, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9494:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 386, + "id": 422, + "nodeType": "Return", + "src": "9487:8:0" + } + ] + }, + "id": 424, + "nodeType": "IfStatement", + "src": "9270:237:0", + "trueBody": { + "id": 420, + "nodeType": "Block", + "src": "9360:104:0", + "statements": [ + { + "expression": { + "expression": { + "id": 417, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9384:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 418, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9420:30:0", + "memberName": "mediumLiquidityAmountRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 56, + "src": "9384:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 386, + "id": 419, + "nodeType": "Return", + "src": "9377:73:0" + } + ] + } + }, + "id": 425, + "nodeType": "IfStatement", + "src": "9070:437:0", + "trueBody": { + "id": 411, + "nodeType": "Block", + "src": "9160:104:0", + "statements": [ + { + "expression": { + "expression": { + "id": 408, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9184:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9220:30:0", + "memberName": "higherLiquidityAmountRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 58, + "src": "9184:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 386, + "id": 410, + "nodeType": "Return", + "src": "9177:73:0" + } + ] + } + } + ] + }, + "id": 427, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calculateAmountBaseRewards", + "nameLocation": "8820:27:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 383, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 379, + "mutability": "mutable", + "name": "sender", + "nameLocation": "8856:6:0", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8848:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 378, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8848:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 382, + "mutability": "mutable", + "name": "token", + "nameLocation": "8871:5:0", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8864:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 381, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 380, + "name": "IERC20", + "nameLocations": [ + "8864:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "8864:6:0" + }, + "referencedDeclaration": 3506, + "src": "8864:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "8847:30:0" + }, + "returnParameters": { + "id": 386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 385, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8894:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8894:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8893:9:0" + }, + "scope": 484, + "src": "8811:703:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 482, + "nodeType": "Block", + "src": "9611:645:0", + "statements": [ + { + "condition": { + "id": 439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9625:40:0", + "subExpression": { + "expression": { + "id": 437, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "9626:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 438, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9648:17:0", + "memberName": "timeBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 49, + "src": "9626:39:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 443, + "nodeType": "IfStatement", + "src": "9622:79:0", + "trueBody": { + "id": 442, + "nodeType": "Block", + "src": "9666:35:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9688:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 436, + "id": 441, + "nodeType": "Return", + "src": "9681:8:0" + } + ] + } + }, + { + "assignments": [ + 446 + ], + "declarations": [ + { + "constant": false, + "id": 446, + "mutability": "mutable", + "name": "info", + "nameLocation": "9727:4:0", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "9713:18:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 445, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 444, + "name": "LPInfo", + "nameLocations": [ + "9713:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "9713:6:0" + }, + "referencedDeclaration": 45, + "src": "9713:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 452, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 447, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9734:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 449, + "indexExpression": { + "id": 448, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 429, + "src": "9742:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9734:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 451, + "indexExpression": { + "id": 450, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "9750:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9734:22:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9713:43:0" + }, + { + "assignments": [ + 454 + ], + "declarations": [ + { + "constant": false, + "id": 454, + "mutability": "mutable", + "name": "duration", + "nameLocation": "9777:8:0", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "9769:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 453, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9769:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 460, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 455, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "9788:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9794:9:0", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "9788:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 457, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 446, + "src": "9806:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 458, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9811:18:0", + "memberName": "liquidityStartTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 42, + "src": "9806:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9788:41:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9769:60:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 461, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 454, + "src": "9853:8:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 462, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "9864:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 463, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9898:26:0", + "memberName": "higherLiquidityTimeTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 63, + "src": "9864:60:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9853:71:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 469, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 454, + "src": "10034:8:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 470, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "10045:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10079:26:0", + "memberName": "mediumLiquidityTimeTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 61, + "src": "10045:60:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10034:71:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 479, + "nodeType": "Block", + "src": "10212:37:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10236:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 436, + "id": 478, + "nodeType": "Return", + "src": "10229:8:0" + } + ] + }, + "id": 480, + "nodeType": "IfStatement", + "src": "10031:218:0", + "trueBody": { + "id": 476, + "nodeType": "Block", + "src": "10106:100:0", + "statements": [ + { + "expression": { + "expression": { + "id": 473, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "10130:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 474, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10164:28:0", + "memberName": "mediumLiquidityTimeRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 65, + "src": "10130:62:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 436, + "id": 475, + "nodeType": "Return", + "src": "10123:69:0" + } + ] + } + }, + "id": 481, + "nodeType": "IfStatement", + "src": "9850:399:0", + "trueBody": { + "id": 468, + "nodeType": "Block", + "src": "9925:100:0", + "statements": [ + { + "expression": { + "expression": { + "id": 465, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "9949:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 466, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9983:28:0", + "memberName": "higherLiquidityTimeRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 67, + "src": "9949:62:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 436, + "id": 467, + "nodeType": "Return", + "src": "9942:69:0" + } + ] + } + } + ] + }, + "id": 483, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calculateTimeBaseRewards", + "nameLocation": "9531:25:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 429, + "mutability": "mutable", + "name": "sender", + "nameLocation": "9565:6:0", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9557:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 428, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9557:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 432, + "mutability": "mutable", + "name": "token", + "nameLocation": "9580:5:0", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9573:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 431, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 430, + "name": "IERC20", + "nameLocations": [ + "9573:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "9573:6:0" + }, + "referencedDeclaration": 3506, + "src": "9573:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "9556:30:0" + }, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9603:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9603:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9602:9:0" + }, + "scope": 484, + "src": "9522:734:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 485, + "src": "1684:8575:0", + "usedErrors": [ + 1686, + 3124, + 3129 + ], + "usedEvents": [ + 94, + 101, + 3135 + ] + } + ], + "src": "48:10213:0" + }, + "id": 0 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "exportedSymbols": { + "IAuthentication": [ + 499 + ] + }, + "id": 500, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 486, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:1" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IAuthentication", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 487, + "nodeType": "StructuredDocumentation", + "src": "76:78:1", + "text": "@notice Simple interface for permissioned calling of external functions." + }, + "fullyImplemented": false, + "id": 499, + "linearizedBaseContracts": [ + 499 + ], + "name": "IAuthentication", + "nameLocation": "164:15:1", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 488, + "nodeType": "StructuredDocumentation", + "src": "187:67:1", + "text": "@notice The sender does not have permission to call a function." + }, + "errorSelector": "23dada53", + "id": 490, + "name": "SenderNotAllowed", + "nameLocation": "266:16:1", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 489, + "nodeType": "ParameterList", + "parameters": [], + "src": "282:2:1" + }, + "src": "260:25:1" + }, + { + "documentation": { + "id": 491, + "nodeType": "StructuredDocumentation", + "src": "293:241:1", + "text": " @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId" + }, + "functionSelector": "851c1bb3", + "id": 498, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nameLocation": "549:11:1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 494, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 493, + "mutability": "mutable", + "name": "selector", + "nameLocation": "568:8:1", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "561:15:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 492, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "561:6:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "560:17:1" + }, + "returnParameters": { + "id": 497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 496, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "601:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 495, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "601:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "600:9:1" + }, + "scope": 499, + "src": "540:70:1", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 500, + "src": "154:459:1", + "usedErrors": [ + 490 + ], + "usedEvents": [] + } + ], + "src": "48:567:1" + }, + "id": 1 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol", + "exportedSymbols": { + "IRateProvider": [ + 509 + ] + }, + "id": 510, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 501, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:2" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IRateProvider", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 502, + "nodeType": "StructuredDocumentation", + "src": "76:57:2", + "text": "@notice General interface for token exchange rates." + }, + "fullyImplemented": false, + "id": 509, + "linearizedBaseContracts": [ + 509 + ], + "name": "IRateProvider", + "nameLocation": "143:13:2", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 503, + "nodeType": "StructuredDocumentation", + "src": "164:194:2", + "text": " @dev Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying\n token. The meaning of this rate depends on the context." + }, + "functionSelector": "679aefce", + "id": 508, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRate", + "nameLocation": "373:7:2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 504, + "nodeType": "ParameterList", + "parameters": [], + "src": "380:2:2" + }, + "returnParameters": { + "id": 507, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 506, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 508, + "src": "406:7:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 505, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "406:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "405:9:2" + }, + "scope": 509, + "src": "364:51:2", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 510, + "src": "133:285:2", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:372:2" + }, + "id": 2 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol", + "exportedSymbols": { + "IAuthorizer": [ + 525 + ] + }, + "id": 526, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 511, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:3" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IAuthorizer", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 512, + "nodeType": "StructuredDocumentation", + "src": "76:57:3", + "text": "@notice Interface to the Vault's permission system." + }, + "fullyImplemented": false, + "id": 525, + "linearizedBaseContracts": [ + 525 + ], + "name": "IAuthorizer", + "nameLocation": "143:11:3", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 513, + "nodeType": "StructuredDocumentation", + "src": "162:360:3", + "text": " @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted" + }, + "functionSelector": "9be2a884", + "id": 524, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "canPerform", + "nameLocation": "537:10:3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 520, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 515, + "mutability": "mutable", + "name": "actionId", + "nameLocation": "556:8:3", + "nodeType": "VariableDeclaration", + "scope": 524, + "src": "548:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 514, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "548:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 517, + "mutability": "mutable", + "name": "account", + "nameLocation": "574:7:3", + "nodeType": "VariableDeclaration", + "scope": 524, + "src": "566:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 516, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "566:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 519, + "mutability": "mutable", + "name": "where", + "nameLocation": "591:5:3", + "nodeType": "VariableDeclaration", + "scope": 524, + "src": "583:13:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 518, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "583:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "547:50:3" + }, + "returnParameters": { + "id": 523, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 522, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 524, + "src": "621:4:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 521, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "621:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "620:6:3" + }, + "scope": 525, + "src": "528:99:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 526, + "src": "133:497:3", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:584:3" + }, + "id": 3 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol", + "exportedSymbols": { + "IAuthentication": [ + 499 + ], + "IBasePoolFactory": [ + 570 + ] + }, + "id": 571, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 527, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:4" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 529, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 571, + "sourceUnit": 500, + "src": "76:80:4", + "symbolAliases": [ + { + "foreign": { + "id": 528, + "name": "IAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "85:15:4", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 531, + "name": "IAuthentication", + "nameLocations": [ + "465:15:4" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 499, + "src": "465:15:4" + }, + "id": 532, + "nodeType": "InheritanceSpecifier", + "src": "465:15:4" + } + ], + "canonicalName": "IBasePoolFactory", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 530, + "nodeType": "StructuredDocumentation", + "src": "160:273:4", + "text": " @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)." + }, + "fullyImplemented": false, + "id": 570, + "linearizedBaseContracts": [ + 570, + 499 + ], + "name": "IBasePoolFactory", + "nameLocation": "445:16:4", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 533, + "nodeType": "StructuredDocumentation", + "src": "488:97:4", + "text": " @notice A pool was deployed.\n @param pool The address of the new pool" + }, + "eventSelector": "83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc", + "id": 537, + "name": "PoolCreated", + "nameLocation": "597:11:4", + "nodeType": "EventDefinition", + "parameters": { + "id": 536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 535, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "625:4:4", + "nodeType": "VariableDeclaration", + "scope": 537, + "src": "609:20:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 534, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "609:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "608:22:4" + }, + "src": "591:40:4" + }, + { + "anonymous": false, + "documentation": { + "id": 538, + "nodeType": "StructuredDocumentation", + "src": "639:51:4", + "text": "@notice The factory was disabled by governance." + }, + "eventSelector": "432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50", + "id": 540, + "name": "FactoryDisabled", + "nameLocation": "702:15:4", + "nodeType": "EventDefinition", + "parameters": { + "id": 539, + "nodeType": "ParameterList", + "parameters": [], + "src": "717:2:4" + }, + "src": "696:24:4" + }, + { + "documentation": { + "id": 541, + "nodeType": "StructuredDocumentation", + "src": "728:67:4", + "text": "@notice Attempted pool creation after the factory was disabled." + }, + "errorSelector": "75884cda", + "id": 543, + "name": "Disabled", + "nameLocation": "807:8:4", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 542, + "nodeType": "ParameterList", + "parameters": [], + "src": "815:2:4" + }, + "src": "801:17:4" + }, + { + "documentation": { + "id": 544, + "nodeType": "StructuredDocumentation", + "src": "826:184:4", + "text": " @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory" + }, + "functionSelector": "6634b753", + "id": 551, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolFromFactory", + "nameLocation": "1025:17:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 547, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 546, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1051:4:4", + "nodeType": "VariableDeclaration", + "scope": 551, + "src": "1043:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 545, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1043:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1042:14:4" + }, + "returnParameters": { + "id": 550, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 549, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 551, + "src": "1080:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 548, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1080:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1079:6:4" + }, + "scope": 570, + "src": "1016:70:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 552, + "nodeType": "StructuredDocumentation", + "src": "1094:258:4", + "text": " @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt" + }, + "functionSelector": "337d4010", + "id": 559, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDeploymentAddress", + "nameLocation": "1367:20:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 555, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 554, + "mutability": "mutable", + "name": "salt", + "nameLocation": "1396:4:4", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "1388:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 553, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1388:7:4", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1387:14:4" + }, + "returnParameters": { + "id": 558, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 557, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 559, + "src": "1425:7:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 556, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1425:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1424:9:4" + }, + "scope": 570, + "src": "1358:76:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 560, + "nodeType": "StructuredDocumentation", + "src": "1442:146:4", + "text": " @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled" + }, + "functionSelector": "6c57f5a9", + "id": 565, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isDisabled", + "nameLocation": "1603:10:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 561, + "nodeType": "ParameterList", + "parameters": [], + "src": "1613:2:4" + }, + "returnParameters": { + "id": 564, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 563, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 565, + "src": "1639:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 562, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1639:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1638:6:4" + }, + "scope": 570, + "src": "1594:51:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 566, + "nodeType": "StructuredDocumentation", + "src": "1653:185:4", + "text": " @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled." + }, + "functionSelector": "2f2770db", + "id": 569, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "disable", + "nameLocation": "1853:7:4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 567, + "nodeType": "ParameterList", + "parameters": [], + "src": "1860:2:4" + }, + "returnParameters": { + "id": 568, + "nodeType": "ParameterList", + "parameters": [], + "src": "1871:0:4" + }, + "scope": 570, + "src": "1844:28:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 571, + "src": "435:1440:4", + "usedErrors": [ + 490, + 543 + ], + "usedEvents": [ + 537, + 540 + ] + } + ], + "src": "48:1829:4" + }, + "id": 4 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AfterSwapParams": [ + 2746 + ], + "HookFlags": [ + 2572 + ], + "IHooks": [ + 772 + ], + "LiquidityManagement": [ + 2525 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "SwapKind": [ + 2680 + ], + "TokenConfig": [ + 2639 + ] + }, + "id": 773, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 572, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:5" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "./VaultTypes.sol", + "id": 581, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 773, + "sourceUnit": 2819, + "src": "295:202:5", + "symbolAliases": [ + { + "foreign": { + "id": 573, + "name": "TokenConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2639, + "src": "309:11:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 574, + "name": "LiquidityManagement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2525, + "src": "327:19:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 575, + "name": "PoolSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2717, + "src": "353:14:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 576, + "name": "AfterSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2746, + "src": "374:15:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 577, + "name": "HookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "396:9:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 578, + "name": "AddLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "412:16:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 579, + "name": "RemoveLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "435:19:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 580, + "name": "SwapKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2680, + "src": "461:8:5", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IHooks", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 582, + "nodeType": "StructuredDocumentation", + "src": "501:496:5", + "text": " @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)" + }, + "fullyImplemented": false, + "id": 772, + "linearizedBaseContracts": [ + 772 + ], + "name": "IHooks", + "nameLocation": "1009:6:5", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 583, + "nodeType": "StructuredDocumentation", + "src": "1234:780:5", + "text": " @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise" + }, + "functionSelector": "0b89f182", + "id": 599, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onRegister", + "nameLocation": "2029:10:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 595, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 585, + "mutability": "mutable", + "name": "factory", + "nameLocation": "2058:7:5", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "2050:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2050:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 587, + "mutability": "mutable", + "name": "pool", + "nameLocation": "2084:4:5", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "2076:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 586, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2076:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 591, + "mutability": "mutable", + "name": "tokenConfig", + "nameLocation": "2120:11:5", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "2099:32:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 589, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 588, + "name": "TokenConfig", + "nameLocations": [ + "2099:11:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "2099:11:5" + }, + "referencedDeclaration": 2639, + "src": "2099:11:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 590, + "nodeType": "ArrayTypeName", + "src": "2099:13:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 594, + "mutability": "mutable", + "name": "liquidityManagement", + "nameLocation": "2171:19:5", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "2142:48:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_calldata_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 593, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 592, + "name": "LiquidityManagement", + "nameLocations": [ + "2142:19:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "2142:19:5" + }, + "referencedDeclaration": 2525, + "src": "2142:19:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "2039:158:5" + }, + "returnParameters": { + "id": 598, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 597, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 599, + "src": "2216:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 596, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2216:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2215:6:5" + }, + "scope": 772, + "src": "2020:202:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 600, + "nodeType": "StructuredDocumentation", + "src": "2230:419:5", + "text": " @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports" + }, + "functionSelector": "d77153a7", + "id": 606, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getHookFlags", + "nameLocation": "2664:12:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 601, + "nodeType": "ParameterList", + "parameters": [], + "src": "2676:2:5" + }, + "returnParameters": { + "id": 605, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 604, + "mutability": "mutable", + "name": "hookFlags", + "nameLocation": "2719:9:5", + "nodeType": "VariableDeclaration", + "scope": 606, + "src": "2702:26:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags" + }, + "typeName": { + "id": 603, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 602, + "name": "HookFlags", + "nameLocations": [ + "2702:9:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2572, + "src": "2702:9:5" + }, + "referencedDeclaration": 2572, + "src": "2702:9:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_storage_ptr", + "typeString": "struct HookFlags" + } + }, + "visibility": "internal" + } + ], + "src": "2701:28:5" + }, + "scope": 772, + "src": "2655:75:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 607, + "nodeType": "StructuredDocumentation", + "src": "2951:492:5", + "text": " @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization" + }, + "functionSelector": "1c149e28", + "id": 617, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onBeforeInitialize", + "nameLocation": "3458:18:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 613, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 610, + "mutability": "mutable", + "name": "exactAmountsIn", + "nameLocation": "3494:14:5", + "nodeType": "VariableDeclaration", + "scope": 617, + "src": "3477:31:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 608, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3477:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 609, + "nodeType": "ArrayTypeName", + "src": "3477:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 612, + "mutability": "mutable", + "name": "userData", + "nameLocation": "3523:8:5", + "nodeType": "VariableDeclaration", + "scope": 617, + "src": "3510:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 611, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3510:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3476:56:5" + }, + "returnParameters": { + "id": 616, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 615, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 617, + "src": "3551:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 614, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3551:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3550:6:5" + }, + "scope": 772, + "src": "3449:108:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 618, + "nodeType": "StructuredDocumentation", + "src": "3565:572:5", + "text": " @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results" + }, + "functionSelector": "38be241d", + "id": 630, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onAfterInitialize", + "nameLocation": "4152:17:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 626, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 621, + "mutability": "mutable", + "name": "exactAmountsIn", + "nameLocation": "4197:14:5", + "nodeType": "VariableDeclaration", + "scope": 630, + "src": "4180:31:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 619, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4180:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 620, + "nodeType": "ArrayTypeName", + "src": "4180:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 623, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "4230:12:5", + "nodeType": "VariableDeclaration", + "scope": 630, + "src": "4222:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 622, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4222:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 625, + "mutability": "mutable", + "name": "userData", + "nameLocation": "4266:8:5", + "nodeType": "VariableDeclaration", + "scope": 630, + "src": "4253:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 624, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4253:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4169:112:5" + }, + "returnParameters": { + "id": 629, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 628, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 630, + "src": "4300:4:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 627, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4300:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4299:6:5" + }, + "scope": 772, + "src": "4143:163:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 631, + "nodeType": "StructuredDocumentation", + "src": "4530:969:5", + "text": " @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\n @param kind The type of add liquidity operation (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement" + }, + "functionSelector": "45421ec7", + "id": 653, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onBeforeAddLiquidity", + "nameLocation": "5514:20:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 649, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 633, + "mutability": "mutable", + "name": "router", + "nameLocation": "5553:6:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5545:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 632, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5545:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 635, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5578:4:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5570:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 634, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5570:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 638, + "mutability": "mutable", + "name": "kind", + "nameLocation": "5610:4:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5593:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 637, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 636, + "name": "AddLiquidityKind", + "nameLocations": [ + "5593:16:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "5593:16:5" + }, + "referencedDeclaration": 2752, + "src": "5593:16:5", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 641, + "mutability": "mutable", + "name": "maxAmountsInScaled18", + "nameLocation": "5642:20:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5625:37:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 639, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5625:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 640, + "nodeType": "ArrayTypeName", + "src": "5625:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 643, + "mutability": "mutable", + "name": "minBptAmountOut", + "nameLocation": "5681:15:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5673:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 642, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5673:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 646, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "5724:16:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5707:33:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 644, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5707:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 645, + "nodeType": "ArrayTypeName", + "src": "5707:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 648, + "mutability": "mutable", + "name": "userData", + "nameLocation": "5764:8:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5751:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 647, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5751:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5534:245:5" + }, + "returnParameters": { + "id": 652, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 651, + "mutability": "mutable", + "name": "success", + "nameLocation": "5803:7:5", + "nodeType": "VariableDeclaration", + "scope": 653, + "src": "5798:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 650, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5798:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5797:14:5" + }, + "scope": 772, + "src": "5505:307:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 654, + "nodeType": "StructuredDocumentation", + "src": "5820:1269:5", + "text": " @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\n @param kind The type of add liquidity operation (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook" + }, + "functionSelector": "976907cc", + "id": 682, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onAfterAddLiquidity", + "nameLocation": "7104:19:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 656, + "mutability": "mutable", + "name": "router", + "nameLocation": "7142:6:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7134:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 655, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7134:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 658, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7167:4:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7159:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 657, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7159:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 661, + "mutability": "mutable", + "name": "kind", + "nameLocation": "7199:4:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7182:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 660, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 659, + "name": "AddLiquidityKind", + "nameLocations": [ + "7182:16:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "7182:16:5" + }, + "referencedDeclaration": 2752, + "src": "7182:16:5", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 664, + "mutability": "mutable", + "name": "amountsInScaled18", + "nameLocation": "7231:17:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7214:34:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7214:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 663, + "nodeType": "ArrayTypeName", + "src": "7214:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 667, + "mutability": "mutable", + "name": "amountsInRaw", + "nameLocation": "7276:12:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7259:29:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 665, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7259:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 666, + "nodeType": "ArrayTypeName", + "src": "7259:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 669, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "7307:12:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7299:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 668, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7299:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 672, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "7347:16:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7330:33:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 670, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7330:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 671, + "nodeType": "ArrayTypeName", + "src": "7330:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 674, + "mutability": "mutable", + "name": "userData", + "nameLocation": "7387:8:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7374:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 673, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7374:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7123:279:5" + }, + "returnParameters": { + "id": 681, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 677, + "mutability": "mutable", + "name": "success", + "nameLocation": "7426:7:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7421:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 676, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7421:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 680, + "mutability": "mutable", + "name": "hookAdjustedAmountsInRaw", + "nameLocation": "7452:24:5", + "nodeType": "VariableDeclaration", + "scope": 682, + "src": "7435:41:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 678, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7435:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 679, + "nodeType": "ArrayTypeName", + "src": "7435:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "7420:57:5" + }, + "scope": 772, + "src": "7095:383:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 683, + "nodeType": "StructuredDocumentation", + "src": "7703:1005:5", + "text": " @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement" + }, + "functionSelector": "ba5f9f40", + "id": 705, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onBeforeRemoveLiquidity", + "nameLocation": "8723:23:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 701, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 685, + "mutability": "mutable", + "name": "router", + "nameLocation": "8765:6:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8757:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 684, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8757:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 687, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8790:4:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8782:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 686, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8782:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 690, + "mutability": "mutable", + "name": "kind", + "nameLocation": "8825:4:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8805:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 689, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 688, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "8805:19:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "8805:19:5" + }, + "referencedDeclaration": 2773, + "src": "8805:19:5", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 692, + "mutability": "mutable", + "name": "maxBptAmountIn", + "nameLocation": "8848:14:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8840:22:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8840:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 695, + "mutability": "mutable", + "name": "minAmountsOutScaled18", + "nameLocation": "8890:21:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8873:38:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8873:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 694, + "nodeType": "ArrayTypeName", + "src": "8873:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 698, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "8939:16:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8922:33:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 696, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8922:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 697, + "nodeType": "ArrayTypeName", + "src": "8922:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 700, + "mutability": "mutable", + "name": "userData", + "nameLocation": "8979:8:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "8966:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 699, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8966:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "8746:248:5" + }, + "returnParameters": { + "id": 704, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 703, + "mutability": "mutable", + "name": "success", + "nameLocation": "9018:7:5", + "nodeType": "VariableDeclaration", + "scope": 705, + "src": "9013:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 702, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9013:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9012:14:5" + }, + "scope": 772, + "src": "8714:313:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 706, + "nodeType": "StructuredDocumentation", + "src": "9035:1292:5", + "text": " @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook" + }, + "functionSelector": "2754888d", + "id": 734, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onAfterRemoveLiquidity", + "nameLocation": "10342:22:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 727, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 708, + "mutability": "mutable", + "name": "router", + "nameLocation": "10383:6:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10375:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 707, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10375:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 710, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10408:4:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10400:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 709, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10400:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 713, + "mutability": "mutable", + "name": "kind", + "nameLocation": "10443:4:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10423:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 712, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 711, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "10423:19:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "10423:19:5" + }, + "referencedDeclaration": 2773, + "src": "10423:19:5", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 715, + "mutability": "mutable", + "name": "bptAmountIn", + "nameLocation": "10466:11:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10458:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 714, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10458:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 718, + "mutability": "mutable", + "name": "amountsOutScaled18", + "nameLocation": "10505:18:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10488:35:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 716, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10488:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 717, + "nodeType": "ArrayTypeName", + "src": "10488:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 721, + "mutability": "mutable", + "name": "amountsOutRaw", + "nameLocation": "10551:13:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10534:30:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 719, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10534:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 720, + "nodeType": "ArrayTypeName", + "src": "10534:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 724, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "10592:16:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10575:33:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10575:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 723, + "nodeType": "ArrayTypeName", + "src": "10575:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 726, + "mutability": "mutable", + "name": "userData", + "nameLocation": "10632:8:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10619:21:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 725, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10619:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "10364:283:5" + }, + "returnParameters": { + "id": 733, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 729, + "mutability": "mutable", + "name": "success", + "nameLocation": "10671:7:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10666:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 728, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10666:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 732, + "mutability": "mutable", + "name": "hookAdjustedAmountsOutRaw", + "nameLocation": "10697:25:5", + "nodeType": "VariableDeclaration", + "scope": 734, + "src": "10680:42:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10680:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 731, + "nodeType": "ArrayTypeName", + "src": "10680:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "10665:58:5" + }, + "scope": 772, + "src": "10333:391:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 735, + "nodeType": "StructuredDocumentation", + "src": "10940:564:5", + "text": " @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement" + }, + "functionSelector": "5211fa77", + "id": 745, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onBeforeSwap", + "nameLocation": "11519:12:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 741, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 738, + "mutability": "mutable", + "name": "params", + "nameLocation": "11556:6:5", + "nodeType": "VariableDeclaration", + "scope": 745, + "src": "11532:30:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_calldata_ptr", + "typeString": "struct PoolSwapParams" + }, + "typeName": { + "id": 737, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 736, + "name": "PoolSwapParams", + "nameLocations": [ + "11532:14:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2717, + "src": "11532:14:5" + }, + "referencedDeclaration": 2717, + "src": "11532:14:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_storage_ptr", + "typeString": "struct PoolSwapParams" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 740, + "mutability": "mutable", + "name": "pool", + "nameLocation": "11572:4:5", + "nodeType": "VariableDeclaration", + "scope": 745, + "src": "11564:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 739, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11564:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11531:46:5" + }, + "returnParameters": { + "id": 744, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 743, + "mutability": "mutable", + "name": "success", + "nameLocation": "11601:7:5", + "nodeType": "VariableDeclaration", + "scope": 745, + "src": "11596:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 742, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11596:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "11595:14:5" + }, + "scope": 772, + "src": "11510:100:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 746, + "nodeType": "StructuredDocumentation", + "src": "11618:680:5", + "text": " @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook" + }, + "functionSelector": "18b6eb55", + "id": 756, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onAfterSwap", + "nameLocation": "12313:11:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 749, + "mutability": "mutable", + "name": "params", + "nameLocation": "12360:6:5", + "nodeType": "VariableDeclaration", + "scope": 756, + "src": "12335:31:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AfterSwapParams_$2746_calldata_ptr", + "typeString": "struct AfterSwapParams" + }, + "typeName": { + "id": 748, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 747, + "name": "AfterSwapParams", + "nameLocations": [ + "12335:15:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2746, + "src": "12335:15:5" + }, + "referencedDeclaration": 2746, + "src": "12335:15:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AfterSwapParams_$2746_storage_ptr", + "typeString": "struct AfterSwapParams" + } + }, + "visibility": "internal" + } + ], + "src": "12324:49:5" + }, + "returnParameters": { + "id": 755, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 752, + "mutability": "mutable", + "name": "success", + "nameLocation": "12397:7:5", + "nodeType": "VariableDeclaration", + "scope": 756, + "src": "12392:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 751, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12392:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 754, + "mutability": "mutable", + "name": "hookAdjustedAmountCalculatedRaw", + "nameLocation": "12414:31:5", + "nodeType": "VariableDeclaration", + "scope": 756, + "src": "12406:39:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12406:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12391:55:5" + }, + "scope": 772, + "src": "12304:143:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 757, + "nodeType": "StructuredDocumentation", + "src": "12455:805:5", + "text": " @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value" + }, + "functionSelector": "a0e8f5ac", + "id": 771, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onComputeDynamicSwapFeePercentage", + "nameLocation": "13275:33:5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 765, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 760, + "mutability": "mutable", + "name": "params", + "nameLocation": "13343:6:5", + "nodeType": "VariableDeclaration", + "scope": 771, + "src": "13319:30:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_calldata_ptr", + "typeString": "struct PoolSwapParams" + }, + "typeName": { + "id": 759, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 758, + "name": "PoolSwapParams", + "nameLocations": [ + "13319:14:5" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2717, + "src": "13319:14:5" + }, + "referencedDeclaration": 2717, + "src": "13319:14:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_storage_ptr", + "typeString": "struct PoolSwapParams" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 762, + "mutability": "mutable", + "name": "pool", + "nameLocation": "13368:4:5", + "nodeType": "VariableDeclaration", + "scope": 771, + "src": "13360:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 761, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13360:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 764, + "mutability": "mutable", + "name": "staticSwapFeePercentage", + "nameLocation": "13391:23:5", + "nodeType": "VariableDeclaration", + "scope": 771, + "src": "13383:31:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 763, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13383:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13308:113:5" + }, + "returnParameters": { + "id": 770, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 767, + "mutability": "mutable", + "name": "success", + "nameLocation": "13450:7:5", + "nodeType": "VariableDeclaration", + "scope": 771, + "src": "13445:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 766, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13445:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 769, + "mutability": "mutable", + "name": "dynamicSwapFeePercentage", + "nameLocation": "13467:24:5", + "nodeType": "VariableDeclaration", + "scope": 771, + "src": "13459:32:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 768, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13459:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13444:48:5" + }, + "scope": 772, + "src": "13266:227:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 773, + "src": "999:12497:5", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:13450:5" + }, + "id": 5 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol", + "exportedSymbols": { + "IERC20": [ + 3506 + ], + "IProtocolFeeController": [ + 1048 + ], + "IVault": [ + 1181 + ] + }, + "id": 1049, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 774, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:6" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 776, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1049, + "sourceUnit": 3507, + "src": "76:137:6", + "symbolAliases": [ + { + "foreign": { + "id": 775, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:6", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 778, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1049, + "sourceUnit": 1182, + "src": "217:38:6", + "symbolAliases": [ + { + "foreign": { + "id": 777, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "226:6:6", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IProtocolFeeController", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 779, + "nodeType": "StructuredDocumentation", + "src": "259:81:6", + "text": "@notice Contract that handles protocol and pool creator fees for the Vault." + }, + "fullyImplemented": false, + "id": 1048, + "linearizedBaseContracts": [ + 1048 + ], + "name": "IProtocolFeeController", + "nameLocation": "350:22:6", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 780, + "nodeType": "StructuredDocumentation", + "src": "380:160:6", + "text": " @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage" + }, + "eventSelector": "bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d", + "id": 784, + "name": "GlobalProtocolSwapFeePercentageChanged", + "nameLocation": "552:38:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 783, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 782, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "599:17:6", + "nodeType": "VariableDeclaration", + "scope": 784, + "src": "591:25:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "591:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "590:27:6" + }, + "src": "546:72:6" + }, + { + "anonymous": false, + "documentation": { + "id": 785, + "nodeType": "StructuredDocumentation", + "src": "626:163:6", + "text": " @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage" + }, + "eventSelector": "48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6", + "id": 789, + "name": "GlobalProtocolYieldFeePercentageChanged", + "nameLocation": "801:39:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 787, + "indexed": false, + "mutability": "mutable", + "name": "yieldFeePercentage", + "nameLocation": "849:18:6", + "nodeType": "VariableDeclaration", + "scope": 789, + "src": "841:26:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "841:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "840:28:6" + }, + "src": "795:74:6" + }, + { + "anonymous": false, + "documentation": { + "id": 790, + "nodeType": "StructuredDocumentation", + "src": "877:249:6", + "text": " @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage" + }, + "eventSelector": "97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e", + "id": 796, + "name": "ProtocolSwapFeePercentageChanged", + "nameLocation": "1138:32:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 795, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 792, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1187:4:6", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "1171:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 791, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1171:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 794, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "1201:17:6", + "nodeType": "VariableDeclaration", + "scope": 796, + "src": "1193:25:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1193:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1170:49:6" + }, + "src": "1132:88:6" + }, + { + "anonymous": false, + "documentation": { + "id": 797, + "nodeType": "StructuredDocumentation", + "src": "1228:253:6", + "text": " @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage" + }, + "eventSelector": "af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd", + "id": 803, + "name": "ProtocolYieldFeePercentageChanged", + "nameLocation": "1493:33:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 799, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1543:4:6", + "nodeType": "VariableDeclaration", + "scope": 803, + "src": "1527:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 798, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1527:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 801, + "indexed": false, + "mutability": "mutable", + "name": "yieldFeePercentage", + "nameLocation": "1557:18:6", + "nodeType": "VariableDeclaration", + "scope": 803, + "src": "1549:26:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 800, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1549:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1526:50:6" + }, + "src": "1487:90:6" + }, + { + "anonymous": false, + "documentation": { + "id": 804, + "nodeType": "StructuredDocumentation", + "src": "1585:198:6", + "text": " @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool" + }, + "eventSelector": "b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c", + "id": 810, + "name": "PoolCreatorSwapFeePercentageChanged", + "nameLocation": "1795:35:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 809, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 806, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1847:4:6", + "nodeType": "VariableDeclaration", + "scope": 810, + "src": "1831:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 805, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1831:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 808, + "indexed": false, + "mutability": "mutable", + "name": "poolCreatorSwapFeePercentage", + "nameLocation": "1861:28:6", + "nodeType": "VariableDeclaration", + "scope": 810, + "src": "1853:36:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1853:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1830:60:6" + }, + "src": "1789:102:6" + }, + { + "anonymous": false, + "documentation": { + "id": 811, + "nodeType": "StructuredDocumentation", + "src": "1899:201:6", + "text": " @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool" + }, + "eventSelector": "47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34", + "id": 817, + "name": "PoolCreatorYieldFeePercentageChanged", + "nameLocation": "2112:36:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 816, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 813, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "2165:4:6", + "nodeType": "VariableDeclaration", + "scope": 817, + "src": "2149:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 812, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2149:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 815, + "indexed": false, + "mutability": "mutable", + "name": "poolCreatorYieldFeePercentage", + "nameLocation": "2179:29:6", + "nodeType": "VariableDeclaration", + "scope": 817, + "src": "2171:37:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 814, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2171:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2148:61:6" + }, + "src": "2106:104:6" + }, + { + "anonymous": false, + "documentation": { + "id": 818, + "nodeType": "StructuredDocumentation", + "src": "2218:569:6", + "text": " @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees" + }, + "eventSelector": "ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f", + "id": 827, + "name": "ProtocolSwapFeeCollected", + "nameLocation": "2799:24:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 826, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 820, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "2840:4:6", + "nodeType": "VariableDeclaration", + "scope": 827, + "src": "2824:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 819, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2824:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 823, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "2861:5:6", + "nodeType": "VariableDeclaration", + "scope": 827, + "src": "2846:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 822, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 821, + "name": "IERC20", + "nameLocations": [ + "2846:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2846:6:6" + }, + "referencedDeclaration": 3506, + "src": "2846:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 825, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "2876:6:6", + "nodeType": "VariableDeclaration", + "scope": 827, + "src": "2868:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 824, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2868:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2823:60:6" + }, + "src": "2793:91:6" + }, + { + "anonymous": false, + "documentation": { + "id": 828, + "nodeType": "StructuredDocumentation", + "src": "2892:573:6", + "text": " @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees" + }, + "eventSelector": "e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2", + "id": 837, + "name": "ProtocolYieldFeeCollected", + "nameLocation": "3477:25:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 836, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 830, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "3519:4:6", + "nodeType": "VariableDeclaration", + "scope": 837, + "src": "3503:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 829, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3503:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 833, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "3540:5:6", + "nodeType": "VariableDeclaration", + "scope": 837, + "src": "3525:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 832, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 831, + "name": "IERC20", + "nameLocations": [ + "3525:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3525:6:6" + }, + "referencedDeclaration": 3506, + "src": "3525:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 835, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "3555:6:6", + "nodeType": "VariableDeclaration", + "scope": 837, + "src": "3547:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 834, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3547:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3502:60:6" + }, + "src": "3471:92:6" + }, + { + "anonymous": false, + "documentation": { + "id": 838, + "nodeType": "StructuredDocumentation", + "src": "3571:339:6", + "text": " @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn" + }, + "eventSelector": "1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5", + "id": 849, + "name": "ProtocolFeesWithdrawn", + "nameLocation": "3922:21:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 848, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 840, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "3960:4:6", + "nodeType": "VariableDeclaration", + "scope": 849, + "src": "3944:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 839, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3944:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 843, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "3981:5:6", + "nodeType": "VariableDeclaration", + "scope": 849, + "src": "3966:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 842, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 841, + "name": "IERC20", + "nameLocations": [ + "3966:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3966:6:6" + }, + "referencedDeclaration": 3506, + "src": "3966:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 845, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nameLocation": "4004:9:6", + "nodeType": "VariableDeclaration", + "scope": 849, + "src": "3988:25:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 844, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3988:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 847, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "4023:6:6", + "nodeType": "VariableDeclaration", + "scope": 849, + "src": "4015:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 846, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4015:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3943:87:6" + }, + "src": "3916:115:6" + }, + { + "anonymous": false, + "documentation": { + "id": 850, + "nodeType": "StructuredDocumentation", + "src": "4039:404:6", + "text": " @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn" + }, + "eventSelector": "938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9", + "id": 861, + "name": "PoolCreatorFeesWithdrawn", + "nameLocation": "4455:24:6", + "nodeType": "EventDefinition", + "parameters": { + "id": 860, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 852, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4506:4:6", + "nodeType": "VariableDeclaration", + "scope": 861, + "src": "4490:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 851, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4490:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 855, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "4536:5:6", + "nodeType": "VariableDeclaration", + "scope": 861, + "src": "4521:20:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 854, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 853, + "name": "IERC20", + "nameLocations": [ + "4521:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "4521:6:6" + }, + "referencedDeclaration": 3506, + "src": "4521:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 857, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nameLocation": "4568:9:6", + "nodeType": "VariableDeclaration", + "scope": 861, + "src": "4552:25:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 856, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4552:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 859, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "4596:6:6", + "nodeType": "VariableDeclaration", + "scope": 861, + "src": "4588:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 858, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4588:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4479:130:6" + }, + "src": "4449:161:6" + }, + { + "documentation": { + "id": 862, + "nodeType": "StructuredDocumentation", + "src": "4618:222:6", + "text": " @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages." + }, + "errorSelector": "7e6eb7fb", + "id": 864, + "name": "ProtocolSwapFeePercentageTooHigh", + "nameLocation": "4852:32:6", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 863, + "nodeType": "ParameterList", + "parameters": [], + "src": "4884:2:6" + }, + "src": "4846:41:6" + }, + { + "documentation": { + "id": 865, + "nodeType": "StructuredDocumentation", + "src": "4895:223:6", + "text": " @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages." + }, + "errorSelector": "a7849e8e", + "id": 867, + "name": "ProtocolYieldFeePercentageTooHigh", + "nameLocation": "5130:33:6", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 866, + "nodeType": "ParameterList", + "parameters": [], + "src": "5163:2:6" + }, + "src": "5124:42:6" + }, + { + "documentation": { + "id": 868, + "nodeType": "StructuredDocumentation", + "src": "5174:159:6", + "text": " @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator" + }, + "errorSelector": "8bcbf353", + "id": 872, + "name": "PoolCreatorNotRegistered", + "nameLocation": "5345:24:6", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 871, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 870, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5378:4:6", + "nodeType": "VariableDeclaration", + "scope": 872, + "src": "5370:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 869, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5370:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5369:14:6" + }, + "src": "5339:45:6" + }, + { + "documentation": { + "id": 873, + "nodeType": "StructuredDocumentation", + "src": "5392:240:6", + "text": " @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from" + }, + "errorSelector": "fbecdbf4", + "id": 879, + "name": "CallerIsNotPoolCreator", + "nameLocation": "5644:22:6", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 878, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 875, + "mutability": "mutable", + "name": "caller", + "nameLocation": "5675:6:6", + "nodeType": "VariableDeclaration", + "scope": 879, + "src": "5667:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 874, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5667:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 877, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5691:4:6", + "nodeType": "VariableDeclaration", + "scope": 879, + "src": "5683:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 876, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5683:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5666:30:6" + }, + "src": "5638:59:6" + }, + { + "documentation": { + "id": 880, + "nodeType": "StructuredDocumentation", + "src": "5705:110:6", + "text": "@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value." + }, + "errorSelector": "0370da74", + "id": 882, + "name": "PoolCreatorFeePercentageTooHigh", + "nameLocation": "5827:31:6", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 881, + "nodeType": "ParameterList", + "parameters": [], + "src": "5858:2:6" + }, + "src": "5821:40:6" + }, + { + "documentation": { + "id": 883, + "nodeType": "StructuredDocumentation", + "src": "5869:112:6", + "text": " @notice Get the address of the main Vault contract.\n @return vault The Vault address" + }, + "functionSelector": "fbfa77cf", + "id": 889, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nameLocation": "5996:5:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 884, + "nodeType": "ParameterList", + "parameters": [], + "src": "6001:2:6" + }, + "returnParameters": { + "id": 888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 887, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 889, + "src": "6027:6:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 886, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 885, + "name": "IVault", + "nameLocations": [ + "6027:6:6" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "6027:6:6" + }, + "referencedDeclaration": 1181, + "src": "6027:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "6026:8:6" + }, + "scope": 1048, + "src": "5987:48:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 890, + "nodeType": "StructuredDocumentation", + "src": "6043:134:6", + "text": " @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees" + }, + "functionSelector": "8f4ab9ca", + "id": 895, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collectAggregateFees", + "nameLocation": "6192:20:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 892, + "mutability": "mutable", + "name": "pool", + "nameLocation": "6221:4:6", + "nodeType": "VariableDeclaration", + "scope": 895, + "src": "6213:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 891, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6213:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6212:14:6" + }, + "returnParameters": { + "id": 894, + "nodeType": "ParameterList", + "parameters": [], + "src": "6235:0:6" + }, + "scope": 1048, + "src": "6183:53:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 896, + "nodeType": "StructuredDocumentation", + "src": "6244:159:6", + "text": " @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage" + }, + "functionSelector": "7869ee18", + "id": 901, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGlobalProtocolSwapFeePercentage", + "nameLocation": "6418:34:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 897, + "nodeType": "ParameterList", + "parameters": [], + "src": "6452:2:6" + }, + "returnParameters": { + "id": 900, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 899, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 901, + "src": "6478:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 898, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6478:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6477:9:6" + }, + "scope": 1048, + "src": "6409:78:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 902, + "nodeType": "StructuredDocumentation", + "src": "6495:162:6", + "text": " @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage" + }, + "functionSelector": "55fb76af", + "id": 907, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getGlobalProtocolYieldFeePercentage", + "nameLocation": "6672:35:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 903, + "nodeType": "ParameterList", + "parameters": [], + "src": "6707:2:6" + }, + "returnParameters": { + "id": 906, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 905, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 907, + "src": "6733:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 904, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6733:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6732:9:6" + }, + "scope": 1048, + "src": "6663:79:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 908, + "nodeType": "StructuredDocumentation", + "src": "6750:285:6", + "text": " @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The global protocol swap fee percentage\n @return isOverride True if the protocol fee has been overridden" + }, + "functionSelector": "5c15a0b4", + "id": 917, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolProtocolSwapFeeInfo", + "nameLocation": "7050:26:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 911, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 910, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7085:4:6", + "nodeType": "VariableDeclaration", + "scope": 917, + "src": "7077:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 909, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7077:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7076:14:6" + }, + "returnParameters": { + "id": 916, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 913, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 917, + "src": "7114:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 912, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7114:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 915, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 917, + "src": "7123:4:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 914, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7123:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7113:15:6" + }, + "scope": 1048, + "src": "7041:88:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 918, + "nodeType": "StructuredDocumentation", + "src": "7137:288:6", + "text": " @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The global protocol yield fee percentage\n @return isOverride True if the protocol fee has been overridden" + }, + "functionSelector": "7a2b97dc", + "id": 927, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolProtocolYieldFeeInfo", + "nameLocation": "7440:27:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 921, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 920, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7476:4:6", + "nodeType": "VariableDeclaration", + "scope": 927, + "src": "7468:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7468:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7467:14:6" + }, + "returnParameters": { + "id": 926, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 923, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 927, + "src": "7505:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 922, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7505:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 925, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 927, + "src": "7514:4:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 924, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7514:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7504:15:6" + }, + "scope": 1048, + "src": "7431:89:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 928, + "nodeType": "StructuredDocumentation", + "src": "7528:349:6", + "text": " @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order" + }, + "functionSelector": "8df44c54", + "id": 936, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeeAmounts", + "nameLocation": "7892:21:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 931, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 930, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7922:4:6", + "nodeType": "VariableDeclaration", + "scope": 936, + "src": "7914:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 929, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7914:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7913:14:6" + }, + "returnParameters": { + "id": 935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 934, + "mutability": "mutable", + "name": "feeAmounts", + "nameLocation": "7968:10:6", + "nodeType": "VariableDeclaration", + "scope": 936, + "src": "7951:27:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 932, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7951:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 933, + "nodeType": "ArrayTypeName", + "src": "7951:9:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "7950:29:6" + }, + "scope": 1048, + "src": "7883:97:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 937, + "nodeType": "StructuredDocumentation", + "src": "7988:353:6", + "text": " @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order" + }, + "functionSelector": "9e95f3fd", + "id": 945, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolCreatorFeeAmounts", + "nameLocation": "8356:24:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 940, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 939, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8389:4:6", + "nodeType": "VariableDeclaration", + "scope": 945, + "src": "8381:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 938, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8381:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8380:14:6" + }, + "returnParameters": { + "id": 944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 943, + "mutability": "mutable", + "name": "feeAmounts", + "nameLocation": "8435:10:6", + "nodeType": "VariableDeclaration", + "scope": 945, + "src": "8418:27:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 941, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8418:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 942, + "nodeType": "ArrayTypeName", + "src": "8418:9:6", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "8417:29:6" + }, + "scope": 1048, + "src": "8347:100:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 946, + "nodeType": "StructuredDocumentation", + "src": "8455:1249:6", + "text": " @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation.\n Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees.\n Since aggregate fees are stored in the Vault with 24-bit precision, this will revert if greater\n precision would be required.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage" + }, + "functionSelector": "0ddd60c6", + "id": 955, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "computeAggregateFeePercentage", + "nameLocation": "9719:29:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 951, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 948, + "mutability": "mutable", + "name": "protocolFeePercentage", + "nameLocation": "9767:21:6", + "nodeType": "VariableDeclaration", + "scope": 955, + "src": "9759:29:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 947, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9759:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 950, + "mutability": "mutable", + "name": "poolCreatorFeePercentage", + "nameLocation": "9807:24:6", + "nodeType": "VariableDeclaration", + "scope": 955, + "src": "9799:32:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 949, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9799:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9748:90:6" + }, + "returnParameters": { + "id": 954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 953, + "mutability": "mutable", + "name": "aggregateFeePercentage", + "nameLocation": "9870:22:6", + "nodeType": "VariableDeclaration", + "scope": 955, + "src": "9862:30:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 952, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9862:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9861:32:6" + }, + "scope": 1048, + "src": "9710:184:6", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 956, + "nodeType": "StructuredDocumentation", + "src": "9902:404:6", + "text": " @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee" + }, + "functionSelector": "71ecc8fb", + "id": 961, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateProtocolSwapFeePercentage", + "nameLocation": "10321:31:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 958, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10361:4:6", + "nodeType": "VariableDeclaration", + "scope": 961, + "src": "10353:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10353:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10352:14:6" + }, + "returnParameters": { + "id": 960, + "nodeType": "ParameterList", + "parameters": [], + "src": "10375:0:6" + }, + "scope": 1048, + "src": "10312:64:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 962, + "nodeType": "StructuredDocumentation", + "src": "10384:406:6", + "text": " @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee" + }, + "functionSelector": "71447ea8", + "id": 967, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateProtocolYieldFeePercentage", + "nameLocation": "10805:32:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 965, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 964, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10846:4:6", + "nodeType": "VariableDeclaration", + "scope": 967, + "src": "10838:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 963, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10838:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10837:14:6" + }, + "returnParameters": { + "id": 966, + "nodeType": "ParameterList", + "parameters": [], + "src": "10860:0:6" + }, + "scope": 1048, + "src": "10796:65:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 968, + "nodeType": "StructuredDocumentation", + "src": "11091:837:6", + "text": " @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage" + }, + "functionSelector": "77ff76e7", + "id": 981, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerPool", + "nameLocation": "11943:12:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 970, + "mutability": "mutable", + "name": "pool", + "nameLocation": "11974:4:6", + "nodeType": "VariableDeclaration", + "scope": 981, + "src": "11966:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 969, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11966:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 972, + "mutability": "mutable", + "name": "poolCreator", + "nameLocation": "11997:11:6", + "nodeType": "VariableDeclaration", + "scope": 981, + "src": "11989:19:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 971, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11989:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 974, + "mutability": "mutable", + "name": "protocolFeeExempt", + "nameLocation": "12024:17:6", + "nodeType": "VariableDeclaration", + "scope": 981, + "src": "12019:22:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 973, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12019:4:6", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "11955:93:6" + }, + "returnParameters": { + "id": 980, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 977, + "mutability": "mutable", + "name": "aggregateSwapFeePercentage", + "nameLocation": "12075:26:6", + "nodeType": "VariableDeclaration", + "scope": 981, + "src": "12067:34:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 976, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12067:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 979, + "mutability": "mutable", + "name": "aggregateYieldFeePercentage", + "nameLocation": "12111:27:6", + "nodeType": "VariableDeclaration", + "scope": 981, + "src": "12103:35:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 978, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12103:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12066:73:6" + }, + "scope": 1048, + "src": "11934:206:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 982, + "nodeType": "StructuredDocumentation", + "src": "12148:178:6", + "text": " @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage" + }, + "functionSelector": "8a3c5c69", + "id": 987, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setGlobalProtocolSwapFeePercentage", + "nameLocation": "12341:34:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 985, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 984, + "mutability": "mutable", + "name": "newProtocolSwapFeePercentage", + "nameLocation": "12384:28:6", + "nodeType": "VariableDeclaration", + "scope": 987, + "src": "12376:36:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12376:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12375:38:6" + }, + "returnParameters": { + "id": 986, + "nodeType": "ParameterList", + "parameters": [], + "src": "12422:0:6" + }, + "scope": 1048, + "src": "12332:91:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 988, + "nodeType": "StructuredDocumentation", + "src": "12431:181:6", + "text": " @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage" + }, + "functionSelector": "a93df2a4", + "id": 993, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setGlobalProtocolYieldFeePercentage", + "nameLocation": "12627:35:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 990, + "mutability": "mutable", + "name": "newProtocolYieldFeePercentage", + "nameLocation": "12671:29:6", + "nodeType": "VariableDeclaration", + "scope": 993, + "src": "12663:37:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 989, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12663:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12662:39:6" + }, + "returnParameters": { + "id": 992, + "nodeType": "ParameterList", + "parameters": [], + "src": "12710:0:6" + }, + "scope": 1048, + "src": "12618:93:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 994, + "nodeType": "StructuredDocumentation", + "src": "12719:276:6", + "text": " @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool" + }, + "functionSelector": "fd267f39", + "id": 1001, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setProtocolSwapFeePercentage", + "nameLocation": "13010:28:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 999, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 996, + "mutability": "mutable", + "name": "pool", + "nameLocation": "13047:4:6", + "nodeType": "VariableDeclaration", + "scope": 1001, + "src": "13039:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 995, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13039:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 998, + "mutability": "mutable", + "name": "newProtocolSwapFeePercentage", + "nameLocation": "13061:28:6", + "nodeType": "VariableDeclaration", + "scope": 1001, + "src": "13053:36:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 997, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13053:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13038:52:6" + }, + "returnParameters": { + "id": 1000, + "nodeType": "ParameterList", + "parameters": [], + "src": "13099:0:6" + }, + "scope": 1048, + "src": "13001:99:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1002, + "nodeType": "StructuredDocumentation", + "src": "13108:280:6", + "text": " @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool" + }, + "functionSelector": "abaa3356", + "id": 1009, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setProtocolYieldFeePercentage", + "nameLocation": "13403:29:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1007, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1004, + "mutability": "mutable", + "name": "pool", + "nameLocation": "13441:4:6", + "nodeType": "VariableDeclaration", + "scope": 1009, + "src": "13433:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1003, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13433:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1006, + "mutability": "mutable", + "name": "newProtocolYieldFeePercentage", + "nameLocation": "13455:29:6", + "nodeType": "VariableDeclaration", + "scope": 1009, + "src": "13447:37:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1005, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13447:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13432:53:6" + }, + "returnParameters": { + "id": 1008, + "nodeType": "ParameterList", + "parameters": [], + "src": "13494:0:6" + }, + "scope": 1048, + "src": "13394:101:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1010, + "nodeType": "StructuredDocumentation", + "src": "13503:295:6", + "text": " @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool" + }, + "functionSelector": "1377c16c", + "id": 1017, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPoolCreatorSwapFeePercentage", + "nameLocation": "13813:31:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1012, + "mutability": "mutable", + "name": "pool", + "nameLocation": "13853:4:6", + "nodeType": "VariableDeclaration", + "scope": 1017, + "src": "13845:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1011, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13845:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1014, + "mutability": "mutable", + "name": "poolCreatorSwapFeePercentage", + "nameLocation": "13867:28:6", + "nodeType": "VariableDeclaration", + "scope": 1017, + "src": "13859:36:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1013, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13859:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13844:52:6" + }, + "returnParameters": { + "id": 1016, + "nodeType": "ParameterList", + "parameters": [], + "src": "13905:0:6" + }, + "scope": 1048, + "src": "13804:102:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1018, + "nodeType": "StructuredDocumentation", + "src": "13914:298:6", + "text": " @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool" + }, + "functionSelector": "3af52712", + "id": 1025, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPoolCreatorYieldFeePercentage", + "nameLocation": "14227:32:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1020, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14268:4:6", + "nodeType": "VariableDeclaration", + "scope": 1025, + "src": "14260:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1019, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14260:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1022, + "mutability": "mutable", + "name": "poolCreatorYieldFeePercentage", + "nameLocation": "14282:29:6", + "nodeType": "VariableDeclaration", + "scope": 1025, + "src": "14274:37:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1021, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14274:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14259:53:6" + }, + "returnParameters": { + "id": 1024, + "nodeType": "ParameterList", + "parameters": [], + "src": "14321:0:6" + }, + "scope": 1048, + "src": "14218:104:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1026, + "nodeType": "StructuredDocumentation", + "src": "14330:288:6", + "text": " @notice Withdraw collected protocol fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens" + }, + "functionSelector": "cf7b287f", + "id": 1033, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawProtocolFees", + "nameLocation": "14633:20:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1031, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1028, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14662:4:6", + "nodeType": "VariableDeclaration", + "scope": 1033, + "src": "14654:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1027, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14654:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1030, + "mutability": "mutable", + "name": "recipient", + "nameLocation": "14676:9:6", + "nodeType": "VariableDeclaration", + "scope": 1033, + "src": "14668:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1029, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14668:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14653:33:6" + }, + "returnParameters": { + "id": 1032, + "nodeType": "ParameterList", + "parameters": [], + "src": "14695:0:6" + }, + "scope": 1048, + "src": "14624:72:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1034, + "nodeType": "StructuredDocumentation", + "src": "14704:296:6", + "text": " @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens" + }, + "functionSelector": "f7061445", + "id": 1041, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawPoolCreatorFees", + "nameLocation": "15015:23:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1039, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1036, + "mutability": "mutable", + "name": "pool", + "nameLocation": "15047:4:6", + "nodeType": "VariableDeclaration", + "scope": 1041, + "src": "15039:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1035, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15039:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1038, + "mutability": "mutable", + "name": "recipient", + "nameLocation": "15061:9:6", + "nodeType": "VariableDeclaration", + "scope": 1041, + "src": "15053:17:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1037, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15053:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15038:33:6" + }, + "returnParameters": { + "id": 1040, + "nodeType": "ParameterList", + "parameters": [], + "src": "15080:0:6" + }, + "scope": 1048, + "src": "15006:75:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1042, + "nodeType": "StructuredDocumentation", + "src": "15089:224:6", + "text": " @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator.\n @param pool The pool on which fees were collected" + }, + "functionSelector": "52f125f0", + "id": 1047, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawPoolCreatorFees", + "nameLocation": "15328:23:6", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1045, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1044, + "mutability": "mutable", + "name": "pool", + "nameLocation": "15360:4:6", + "nodeType": "VariableDeclaration", + "scope": 1047, + "src": "15352:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1043, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15352:7:6", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15351:14:6" + }, + "returnParameters": { + "id": 1046, + "nodeType": "ParameterList", + "parameters": [], + "src": "15374:0:6" + }, + "scope": 1048, + "src": "15319:56:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1049, + "src": "340:15038:6", + "usedErrors": [ + 864, + 867, + 872, + 879, + 882 + ], + "usedEvents": [ + 784, + 789, + 796, + 803, + 810, + 817, + 827, + 837, + 849, + 861 + ] + } + ], + "src": "48:15332:6" + }, + "id": 6 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "IAllowanceTransfer": [ + 3774 + ], + "IRouterCommon": [ + 1144 + ], + "RemoveLiquidityKind": [ + 2773 + ] + }, + "id": 1145, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1050, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:7" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol", + "id": 1052, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1145, + "sourceUnit": 3775, + "src": "76:139:7", + "symbolAliases": [ + { + "foreign": { + "id": 1051, + "name": "IAllowanceTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3774, + "src": "85:18:7", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "./VaultTypes.sol", + "id": 1055, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1145, + "sourceUnit": 2819, + "src": "217:73:7", + "symbolAliases": [ + { + "foreign": { + "id": 1053, + "name": "AddLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "226:16:7", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 1054, + "name": "RemoveLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "244:19:7", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IRouterCommon", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1056, + "nodeType": "StructuredDocumentation", + "src": "294:83:7", + "text": "@notice Interface for funtions shared between the `Router` and `BatchRouter`." + }, + "fullyImplemented": false, + "id": 1144, + "linearizedBaseContracts": [ + 1144 + ], + "name": "IRouterCommon", + "nameLocation": "387:13:7", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IRouterCommon.AddLiquidityHookParams", + "documentation": { + "id": 1057, + "nodeType": "StructuredDocumentation", + "src": "408:626:7", + "text": " @notice Data for the add liquidity hook.\n @param sender Account originating the add liquidity operation\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param kind Type of join (e.g., single or multi-token)\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity" + }, + "id": 1074, + "members": [ + { + "constant": false, + "id": 1059, + "mutability": "mutable", + "name": "sender", + "nameLocation": "1089:6:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1081:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1058, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1081:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1061, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1114:4:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1106:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1060, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1106:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1064, + "mutability": "mutable", + "name": "maxAmountsIn", + "nameLocation": "1139:12:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1129:22:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1062, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1129:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1063, + "nodeType": "ArrayTypeName", + "src": "1129:9:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1066, + "mutability": "mutable", + "name": "minBptAmountOut", + "nameLocation": "1170:15:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1162:23:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1065, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1162:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1069, + "mutability": "mutable", + "name": "kind", + "nameLocation": "1213:4:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1196:21:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 1068, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1067, + "name": "AddLiquidityKind", + "nameLocations": [ + "1196:16:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "1196:16:7" + }, + "referencedDeclaration": 2752, + "src": "1196:16:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1071, + "mutability": "mutable", + "name": "wethIsEth", + "nameLocation": "1233:9:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1228:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1070, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1228:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1073, + "mutability": "mutable", + "name": "userData", + "nameLocation": "1259:8:7", + "nodeType": "VariableDeclaration", + "scope": 1074, + "src": "1253:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1072, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1253:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "AddLiquidityHookParams", + "nameLocation": "1047:22:7", + "nodeType": "StructDefinition", + "scope": 1144, + "src": "1040:235:7", + "visibility": "public" + }, + { + "canonicalName": "IRouterCommon.RemoveLiquidityHookParams", + "documentation": { + "id": 1075, + "nodeType": "StructuredDocumentation", + "src": "1283:632:7", + "text": " @notice Data for the remove liquidity hook.\n @param sender Account originating the remove liquidity operation\n @param pool Address of the liquidity pool\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param kind Type of exit (e.g., single or multi-token)\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity" + }, + "id": 1092, + "members": [ + { + "constant": false, + "id": 1077, + "mutability": "mutable", + "name": "sender", + "nameLocation": "1973:6:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "1965:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1076, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1965:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1079, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1998:4:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "1990:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1078, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1990:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1082, + "mutability": "mutable", + "name": "minAmountsOut", + "nameLocation": "2023:13:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "2013:23:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1080, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2013:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1081, + "nodeType": "ArrayTypeName", + "src": "2013:9:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1084, + "mutability": "mutable", + "name": "maxBptAmountIn", + "nameLocation": "2055:14:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "2047:22:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1083, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2047:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1087, + "mutability": "mutable", + "name": "kind", + "nameLocation": "2100:4:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "2080:24:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 1086, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1085, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "2080:19:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "2080:19:7" + }, + "referencedDeclaration": 2773, + "src": "2080:19:7", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1089, + "mutability": "mutable", + "name": "wethIsEth", + "nameLocation": "2120:9:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "2115:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1088, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2115:4:7", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1091, + "mutability": "mutable", + "name": "userData", + "nameLocation": "2146:8:7", + "nodeType": "VariableDeclaration", + "scope": 1092, + "src": "2140:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1090, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2140:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "RemoveLiquidityHookParams", + "nameLocation": "1928:25:7", + "nodeType": "StructDefinition", + "scope": 1144, + "src": "1921:241:7", + "visibility": "public" + }, + { + "documentation": { + "id": 1093, + "nodeType": "StructuredDocumentation", + "src": "2170:130:7", + "text": " @notice Get the first sender which initialized the call to Router.\n @return address The sender address" + }, + "functionSelector": "5e01eb5a", + "id": 1098, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getSender", + "nameLocation": "2315:9:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1094, + "nodeType": "ParameterList", + "parameters": [], + "src": "2324:2:7" + }, + "returnParameters": { + "id": 1097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1096, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1098, + "src": "2350:7:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1095, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2350:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2349:9:7" + }, + "scope": 1144, + "src": "2306:53:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IRouterCommon.PermitApproval", + "id": 1111, + "members": [ + { + "constant": false, + "id": 1100, + "mutability": "mutable", + "name": "token", + "nameLocation": "2630:5:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2622:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1099, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2622:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1102, + "mutability": "mutable", + "name": "owner", + "nameLocation": "2654:5:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2646:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1101, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2646:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1104, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2678:7:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2670:15:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1103, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2670:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1106, + "mutability": "mutable", + "name": "amount", + "nameLocation": "2704:6:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2696:14:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1105, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2696:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1108, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "2729:5:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2721:13:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1107, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2721:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1110, + "mutability": "mutable", + "name": "deadline", + "nameLocation": "2753:8:7", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "2745:16:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1109, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2745:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PermitApproval", + "nameLocation": "2596:14:7", + "nodeType": "StructDefinition", + "scope": 1144, + "src": "2589:180:7", + "visibility": "public" + }, + { + "documentation": { + "id": 1112, + "nodeType": "StructuredDocumentation", + "src": "2777:695:7", + "text": " @notice Permits multiple allowances and executes a batch of function calls on this contract.\n @param permitBatch An array of `PermitApproval` structs, each representing an ERC20 permit request\n @param permitSignatures An array of bytes, corresponding to the permit request signature in `permitBatch`\n @param permit2Batch A batch of permit2 approvals\n @param permit2Signature A permit2 signature for the batch approval\n @param multicallData An array of bytes arrays, each representing an encoded function call on this contract\n @return results Array of bytes arrays, each representing the return data from each function call executed" + }, + "functionSelector": "19c6989f", + "id": 1133, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permitBatchAndCall", + "nameLocation": "3487:18:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1116, + "mutability": "mutable", + "name": "permitBatch", + "nameLocation": "3542:11:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3516:37:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PermitApproval_$1111_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct IRouterCommon.PermitApproval[]" + }, + "typeName": { + "baseType": { + "id": 1114, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1113, + "name": "PermitApproval", + "nameLocations": [ + "3516:14:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1111, + "src": "3516:14:7" + }, + "referencedDeclaration": 1111, + "src": "3516:14:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitApproval_$1111_storage_ptr", + "typeString": "struct IRouterCommon.PermitApproval" + } + }, + "id": 1115, + "nodeType": "ArrayTypeName", + "src": "3516:16:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PermitApproval_$1111_storage_$dyn_storage_ptr", + "typeString": "struct IRouterCommon.PermitApproval[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1119, + "mutability": "mutable", + "name": "permitSignatures", + "nameLocation": "3581:16:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3564:33:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 1117, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3564:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 1118, + "nodeType": "ArrayTypeName", + "src": "3564:7:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1122, + "mutability": "mutable", + "name": "permit2Batch", + "nameLocation": "3648:12:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3608:52:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitBatch_$3661_calldata_ptr", + "typeString": "struct IAllowanceTransfer.PermitBatch" + }, + "typeName": { + "id": 1121, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1120, + "name": "IAllowanceTransfer.PermitBatch", + "nameLocations": [ + "3608:18:7", + "3627:11:7" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3661, + "src": "3608:30:7" + }, + "referencedDeclaration": 3661, + "src": "3608:30:7", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitBatch_$3661_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitBatch" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1124, + "mutability": "mutable", + "name": "permit2Signature", + "nameLocation": "3686:16:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3671:31:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1123, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3671:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1127, + "mutability": "mutable", + "name": "multicallData", + "nameLocation": "3730:13:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3713:30:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 1125, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3713:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 1126, + "nodeType": "ArrayTypeName", + "src": "3713:7:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "3505:245:7" + }, + "returnParameters": { + "id": 1132, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1131, + "mutability": "mutable", + "name": "results", + "nameLocation": "3792:7:7", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "3777:22:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 1129, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3777:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 1130, + "nodeType": "ArrayTypeName", + "src": "3777:7:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "3776:24:7" + }, + "scope": 1144, + "src": "3478:323:7", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1134, + "nodeType": "StructuredDocumentation", + "src": "3809:268:7", + "text": " @notice Executes a batch of function calls on this contract.\n @param data Encoded function calls to be executed in the batch.\n @return results Array of bytes arrays, each representing the return data from each function call executed." + }, + "functionSelector": "ac9650d8", + "id": 1143, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "multicall", + "nameLocation": "4092:9:7", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1138, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1137, + "mutability": "mutable", + "name": "data", + "nameLocation": "4119:4:7", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4102:21:7", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 1135, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4102:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 1136, + "nodeType": "ArrayTypeName", + "src": "4102:7:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "4101:23:7" + }, + "returnParameters": { + "id": 1142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1141, + "mutability": "mutable", + "name": "results", + "nameLocation": "4158:7:7", + "nodeType": "VariableDeclaration", + "scope": 1143, + "src": "4143:22:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 1139, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4143:5:7", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 1140, + "nodeType": "ArrayTypeName", + "src": "4143:7:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "4142:24:7" + }, + "scope": 1144, + "src": "4083:84:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1145, + "src": "377:3793:7", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:4124:7" + }, + "id": 7 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "exportedSymbols": { + "IAuthentication": [ + 499 + ], + "IVault": [ + 1181 + ], + "IVaultAdmin": [ + 1453 + ], + "IVaultErrors": [ + 1807 + ], + "IVaultEvents": [ + 1995 + ], + "IVaultExtension": [ + 2388 + ], + "IVaultMain": [ + 2507 + ] + }, + "id": 1182, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1146, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:8" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 1148, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 500, + "src": "76:80:8", + "symbolAliases": [ + { + "foreign": { + "id": 1147, + "name": "IAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "85:15:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol", + "file": "./IVaultAdmin.sol", + "id": 1150, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 1454, + "src": "158:48:8", + "symbolAliases": [ + { + "foreign": { + "id": 1149, + "name": "IVaultAdmin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1453, + "src": "167:11:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol", + "file": "./IVaultExtension.sol", + "id": 1152, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 2389, + "src": "208:56:8", + "symbolAliases": [ + { + "foreign": { + "id": 1151, + "name": "IVaultExtension", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2388, + "src": "217:15:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol", + "file": "./IVaultMain.sol", + "id": 1154, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 2508, + "src": "266:46:8", + "symbolAliases": [ + { + "foreign": { + "id": 1153, + "name": "IVaultMain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2507, + "src": "275:10:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol", + "file": "./IVaultErrors.sol", + "id": 1156, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 1808, + "src": "314:50:8", + "symbolAliases": [ + { + "foreign": { + "id": 1155, + "name": "IVaultErrors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1807, + "src": "323:12:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol", + "file": "./IVaultEvents.sol", + "id": 1158, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1182, + "sourceUnit": 1996, + "src": "366:50:8", + "symbolAliases": [ + { + "foreign": { + "id": 1157, + "name": "IVaultEvents", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1995, + "src": "375:12:8", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1159, + "name": "IVaultMain", + "nameLocations": [ + "440:10:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2507, + "src": "440:10:8" + }, + "id": 1160, + "nodeType": "InheritanceSpecifier", + "src": "440:10:8" + }, + { + "baseName": { + "id": 1161, + "name": "IVaultExtension", + "nameLocations": [ + "452:15:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2388, + "src": "452:15:8" + }, + "id": 1162, + "nodeType": "InheritanceSpecifier", + "src": "452:15:8" + }, + { + "baseName": { + "id": 1163, + "name": "IVaultAdmin", + "nameLocations": [ + "469:11:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1453, + "src": "469:11:8" + }, + "id": 1164, + "nodeType": "InheritanceSpecifier", + "src": "469:11:8" + }, + { + "baseName": { + "id": 1165, + "name": "IVaultErrors", + "nameLocations": [ + "482:12:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1807, + "src": "482:12:8" + }, + "id": 1166, + "nodeType": "InheritanceSpecifier", + "src": "482:12:8" + }, + { + "baseName": { + "id": 1167, + "name": "IVaultEvents", + "nameLocations": [ + "496:12:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1995, + "src": "496:12:8" + }, + "id": 1168, + "nodeType": "InheritanceSpecifier", + "src": "496:12:8" + }, + { + "baseName": { + "id": 1169, + "name": "IAuthentication", + "nameLocations": [ + "510:15:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 499, + "src": "510:15:8" + }, + "id": 1170, + "nodeType": "InheritanceSpecifier", + "src": "510:15:8" + } + ], + "canonicalName": "IVault", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1181, + "linearizedBaseContracts": [ + 1181, + 499, + 1995, + 1807, + 1453, + 2388, + 2507 + ], + "name": "IVault", + "nameLocation": "430:6:8", + "nodeType": "ContractDefinition", + "nodes": [ + { + "baseFunctions": [ + 1199, + 2016 + ], + "documentation": { + "id": 1171, + "nodeType": "StructuredDocumentation", + "src": "533:40:8", + "text": "@dev Returns the main Vault address." + }, + "functionSelector": "fbfa77cf", + "id": 1180, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nameLocation": "588:5:8", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 1175, + "nodeType": "OverrideSpecifier", + "overrides": [ + { + "id": 1173, + "name": "IVaultAdmin", + "nameLocations": [ + "619:11:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1453, + "src": "619:11:8" + }, + { + "id": 1174, + "name": "IVaultExtension", + "nameLocations": [ + "632:15:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2388, + "src": "632:15:8" + } + ], + "src": "610:38:8" + }, + "parameters": { + "id": 1172, + "nodeType": "ParameterList", + "parameters": [], + "src": "593:2:8" + }, + "returnParameters": { + "id": 1179, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1178, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1180, + "src": "658:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 1177, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1176, + "name": "IVault", + "nameLocations": [ + "658:6:8" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "658:6:8" + }, + "referencedDeclaration": 1181, + "src": "658:6:8", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "657:8:8" + }, + "scope": 1181, + "src": "579:87:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1182, + "src": "420:249:8", + "usedErrors": [ + 490, + 1465, + 1470, + 1475, + 1480, + 1489, + 1495, + 1498, + 1501, + 1504, + 1507, + 1510, + 1519, + 1522, + 1525, + 1528, + 1531, + 1534, + 1537, + 1540, + 1543, + 1546, + 1549, + 1552, + 1555, + 1558, + 1561, + 1567, + 1574, + 1581, + 1584, + 1587, + 1597, + 1607, + 1614, + 1617, + 1620, + 1623, + 1633, + 1643, + 1650, + 1653, + 1656, + 1659, + 1662, + 1665, + 1668, + 1671, + 1676, + 1681, + 1686, + 1689, + 1692, + 1695, + 1698, + 1701, + 1706, + 1711, + 1716, + 1722, + 1728, + 1731, + 1739, + 1745, + 1751, + 1754, + 1757, + 1760, + 1765, + 1775, + 1785, + 1788, + 1791, + 1794, + 1797, + 1800, + 1803, + 1806 + ], + "usedEvents": [ + 1845, + 1850, + 1872, + 1885, + 1898, + 1908, + 1913, + 1916, + 1923, + 1930, + 1937, + 1943, + 1949, + 1959, + 1969, + 1979, + 1989, + 1994 + ] + } + ], + "src": "48:623:8" + }, + "id": 8 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol", + "exportedSymbols": { + "IAuthorizer": [ + 525 + ], + "IERC4626": [ + 3428 + ], + "IProtocolFeeController": [ + 1048 + ], + "IVault": [ + 1181 + ], + "IVaultAdmin": [ + 1453 + ] + }, + "id": 1454, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1183, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:9" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "id": 1185, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1454, + "sourceUnit": 3429, + "src": "76:140:9", + "symbolAliases": [ + { + "foreign": { + "id": 1184, + "name": "IERC4626", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3428, + "src": "85:8:9", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol", + "file": "./IProtocolFeeController.sol", + "id": 1187, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1454, + "sourceUnit": 1049, + "src": "220:70:9", + "symbolAliases": [ + { + "foreign": { + "id": 1186, + "name": "IProtocolFeeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "229:22:9", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1189, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1454, + "sourceUnit": 526, + "src": "292:48:9", + "symbolAliases": [ + { + "foreign": { + "id": 1188, + "name": "IAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 525, + "src": "301:11:9", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 1191, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1454, + "sourceUnit": 1182, + "src": "342:38:9", + "symbolAliases": [ + { + "foreign": { + "id": 1190, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "351:6:9", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IVaultAdmin", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1192, + "nodeType": "StructuredDocumentation", + "src": "384:280:9", + "text": " @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here." + }, + "fullyImplemented": false, + "id": 1453, + "linearizedBaseContracts": [ + 1453 + ], + "name": "IVaultAdmin", + "nameLocation": "676:11:9", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1193, + "nodeType": "StructuredDocumentation", + "src": "926:210:9", + "text": " @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault" + }, + "functionSelector": "fbfa77cf", + "id": 1199, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nameLocation": "1151:5:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1194, + "nodeType": "ParameterList", + "parameters": [], + "src": "1156:2:9" + }, + "returnParameters": { + "id": 1198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1197, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1199, + "src": "1182:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 1196, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1195, + "name": "IVault", + "nameLocations": [ + "1182:6:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "1182:6:9" + }, + "referencedDeclaration": 1181, + "src": "1182:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1181:8:9" + }, + "scope": 1453, + "src": "1142:48:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1200, + "nodeType": "StructuredDocumentation", + "src": "1198:299:9", + "text": " @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends" + }, + "functionSelector": "8a8d123a", + "id": 1205, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPauseWindowEndTime", + "nameLocation": "1512:21:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1201, + "nodeType": "ParameterList", + "parameters": [], + "src": "1533:2:9" + }, + "returnParameters": { + "id": 1204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1203, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1205, + "src": "1559:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1202, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1559:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "1558:8:9" + }, + "scope": 1453, + "src": "1503:64:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1206, + "nodeType": "StructuredDocumentation", + "src": "1575:380:9", + "text": " @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused.\n @return bufferPeriodDuration The length of the buffer period in seconds" + }, + "functionSelector": "20c1fb7a", + "id": 1211, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferPeriodDuration", + "nameLocation": "1970:23:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1207, + "nodeType": "ParameterList", + "parameters": [], + "src": "1993:2:9" + }, + "returnParameters": { + "id": 1210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1209, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1211, + "src": "2019:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1208, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2019:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2018:8:9" + }, + "scope": 1453, + "src": "1961:66:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1212, + "nodeType": "StructuredDocumentation", + "src": "2035:278:9", + "text": " @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused" + }, + "functionSelector": "cd51c12f", + "id": 1217, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferPeriodEndTime", + "nameLocation": "2328:22:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1213, + "nodeType": "ParameterList", + "parameters": [], + "src": "2350:2:9" + }, + "returnParameters": { + "id": 1216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1215, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1217, + "src": "2376:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1214, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "2376:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "2375:8:9" + }, + "scope": 1453, + "src": "2319:65:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1218, + "nodeType": "StructuredDocumentation", + "src": "2392:197:9", + "text": " @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool" + }, + "functionSelector": "a8175b27", + "id": 1223, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMinimumPoolTokens", + "nameLocation": "2604:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1219, + "nodeType": "ParameterList", + "parameters": [], + "src": "2624:2:9" + }, + "returnParameters": { + "id": 1222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1221, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1223, + "src": "2650:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2650:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2649:9:9" + }, + "scope": 1453, + "src": "2595:64:9", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1224, + "nodeType": "StructuredDocumentation", + "src": "2667:132:9", + "text": " @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool" + }, + "functionSelector": "2e42f4d5", + "id": 1229, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMaximumPoolTokens", + "nameLocation": "2814:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1225, + "nodeType": "ParameterList", + "parameters": [], + "src": "2834:2:9" + }, + "returnParameters": { + "id": 1228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1227, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1229, + "src": "2860:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2860:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2859:9:9" + }, + "scope": 1453, + "src": "2805:64:9", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1230, + "nodeType": "StructuredDocumentation", + "src": "2877:441:9", + "text": " @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return minimumTotalSupply The minimum total supply a pool can have after initialization" + }, + "functionSelector": "d0965a6b", + "id": 1235, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolMinimumTotalSupply", + "nameLocation": "3333:25:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1231, + "nodeType": "ParameterList", + "parameters": [], + "src": "3358:2:9" + }, + "returnParameters": { + "id": 1234, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1233, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1235, + "src": "3384:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3384:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3383:9:9" + }, + "scope": 1453, + "src": "3324:69:9", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1236, + "nodeType": "StructuredDocumentation", + "src": "3401:503:9", + "text": " @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return minimumTotalSupply The minimum total supply a buffer can have after initialization" + }, + "functionSelector": "26a8a991", + "id": 1241, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferMinimumTotalSupply", + "nameLocation": "3919:27:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1237, + "nodeType": "ParameterList", + "parameters": [], + "src": "3946:2:9" + }, + "returnParameters": { + "id": 1240, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1239, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1241, + "src": "3972:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1238, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3972:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3971:9:9" + }, + "scope": 1453, + "src": "3910:71:9", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1242, + "nodeType": "StructuredDocumentation", + "src": "3989:295:9", + "text": " @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number" + }, + "functionSelector": "e2cb0ba0", + "id": 1247, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMinimumTradeAmount", + "nameLocation": "4299:21:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1243, + "nodeType": "ParameterList", + "parameters": [], + "src": "4320:2:9" + }, + "returnParameters": { + "id": 1246, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1245, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1247, + "src": "4346:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4346:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4345:9:9" + }, + "scope": 1453, + "src": "4290:65:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1248, + "nodeType": "StructuredDocumentation", + "src": "4363:275:9", + "text": " @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals" + }, + "functionSelector": "53956aa2", + "id": 1253, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getMinimumWrapAmount", + "nameLocation": "4653:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1249, + "nodeType": "ParameterList", + "parameters": [], + "src": "4673:2:9" + }, + "returnParameters": { + "id": 1252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1251, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1253, + "src": "4699:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4699:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4698:9:9" + }, + "scope": 1453, + "src": "4644:64:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1254, + "nodeType": "StructuredDocumentation", + "src": "4941:216:9", + "text": " @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations will revert.\n @return paused True if the Vault is paused" + }, + "functionSelector": "098401f5", + "id": 1259, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isVaultPaused", + "nameLocation": "5172:13:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1255, + "nodeType": "ParameterList", + "parameters": [], + "src": "5185:2:9" + }, + "returnParameters": { + "id": 1258, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1257, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1259, + "src": "5211:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1256, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5211:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5210:6:9" + }, + "scope": 1453, + "src": "5163:54:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1260, + "nodeType": "StructuredDocumentation", + "src": "5225:355:9", + "text": " @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @return paused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period" + }, + "functionSelector": "85c8c015", + "id": 1269, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVaultPausedState", + "nameLocation": "5595:19:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1261, + "nodeType": "ParameterList", + "parameters": [], + "src": "5614:2:9" + }, + "returnParameters": { + "id": 1268, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1263, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1269, + "src": "5640:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1262, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5640:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1265, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1269, + "src": "5646:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1264, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5646:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1267, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1269, + "src": "5654:6:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1266, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5654:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "src": "5639:22:9" + }, + "scope": 1453, + "src": "5586:76:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1270, + "nodeType": "StructuredDocumentation", + "src": "5670:234:9", + "text": " @notice Pause the Vault: an emergency action which disables all operational state-changing functions.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment." + }, + "functionSelector": "9e0879c2", + "id": 1273, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "pauseVault", + "nameLocation": "5919:10:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1271, + "nodeType": "ParameterList", + "parameters": [], + "src": "5929:2:9" + }, + "returnParameters": { + "id": 1272, + "nodeType": "ParameterList", + "parameters": [], + "src": "5940:0:9" + }, + "scope": 1453, + "src": "5910:31:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1274, + "nodeType": "StructuredDocumentation", + "src": "5949:323:9", + "text": " @notice Reverse a `pause` operation, and restore the Vault to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires." + }, + "functionSelector": "0b7562be", + "id": 1277, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unpauseVault", + "nameLocation": "6287:12:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1275, + "nodeType": "ParameterList", + "parameters": [], + "src": "6299:2:9" + }, + "returnParameters": { + "id": 1276, + "nodeType": "ParameterList", + "parameters": [], + "src": "6310:0:9" + }, + "scope": 1453, + "src": "6278:33:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1278, + "nodeType": "StructuredDocumentation", + "src": "6543:282:9", + "text": " @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused" + }, + "functionSelector": "55aca1ec", + "id": 1283, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "pausePool", + "nameLocation": "6840:9:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1280, + "mutability": "mutable", + "name": "pool", + "nameLocation": "6858:4:9", + "nodeType": "VariableDeclaration", + "scope": 1283, + "src": "6850:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1279, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6850:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6849:14:9" + }, + "returnParameters": { + "id": 1282, + "nodeType": "ParameterList", + "parameters": [], + "src": "6872:0:9" + }, + "scope": 1453, + "src": "6831:42:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1284, + "nodeType": "StructuredDocumentation", + "src": "6881:372:9", + "text": " @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused" + }, + "functionSelector": "f21c38cd", + "id": 1289, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unpausePool", + "nameLocation": "7268:11:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1287, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1286, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7288:4:9", + "nodeType": "VariableDeclaration", + "scope": 1289, + "src": "7280:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1285, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7280:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7279:14:9" + }, + "returnParameters": { + "id": 1288, + "nodeType": "ParameterList", + "parameters": [], + "src": "7302:0:9" + }, + "scope": 1453, + "src": "7259:44:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1290, + "nodeType": "StructuredDocumentation", + "src": "7526:528:9", + "text": " @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool" + }, + "functionSelector": "d15126ba", + "id": 1297, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setStaticSwapFeePercentage", + "nameLocation": "8069:26:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1295, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1292, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8104:4:9", + "nodeType": "VariableDeclaration", + "scope": 1297, + "src": "8096:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1291, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8096:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1294, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "8118:17:9", + "nodeType": "VariableDeclaration", + "scope": 1297, + "src": "8110:25:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1293, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8110:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8095:41:9" + }, + "returnParameters": { + "id": 1296, + "nodeType": "ParameterList", + "parameters": [], + "src": "8145:0:9" + }, + "scope": 1453, + "src": "8060:86:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1298, + "nodeType": "StructuredDocumentation", + "src": "8154:469:9", + "text": " @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order" + }, + "functionSelector": "8f4ab9ca", + "id": 1309, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "collectAggregateFees", + "nameLocation": "8638:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1300, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8677:4:9", + "nodeType": "VariableDeclaration", + "scope": 1309, + "src": "8669:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1299, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8669:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8658:30:9" + }, + "returnParameters": { + "id": 1308, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1304, + "mutability": "mutable", + "name": "swapFeeAmounts", + "nameLocation": "8724:14:9", + "nodeType": "VariableDeclaration", + "scope": 1309, + "src": "8707:31:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8707:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1303, + "nodeType": "ArrayTypeName", + "src": "8707:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1307, + "mutability": "mutable", + "name": "yieldFeeAmounts", + "nameLocation": "8757:15:9", + "nodeType": "VariableDeclaration", + "scope": 1309, + "src": "8740:32:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1305, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8740:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1306, + "nodeType": "ArrayTypeName", + "src": "8740:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "8706:67:9" + }, + "scope": 1453, + "src": "8629:145:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1310, + "nodeType": "StructuredDocumentation", + "src": "8782:563:9", + "text": " @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\n @param pool The pool whose fee will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage" + }, + "functionSelector": "5e0b06f4", + "id": 1317, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateAggregateSwapFeePercentage", + "nameLocation": "9360:32:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1312, + "mutability": "mutable", + "name": "pool", + "nameLocation": "9401:4:9", + "nodeType": "VariableDeclaration", + "scope": 1317, + "src": "9393:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1311, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9393:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1314, + "mutability": "mutable", + "name": "newAggregateSwapFeePercentage", + "nameLocation": "9415:29:9", + "nodeType": "VariableDeclaration", + "scope": 1317, + "src": "9407:37:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1313, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9407:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9392:53:9" + }, + "returnParameters": { + "id": 1316, + "nodeType": "ParameterList", + "parameters": [], + "src": "9454:0:9" + }, + "scope": 1453, + "src": "9351:104:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1318, + "nodeType": "StructuredDocumentation", + "src": "9463:566:9", + "text": " @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE.\n @param pool The pool whose fee will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage" + }, + "functionSelector": "e253670a", + "id": 1325, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateAggregateYieldFeePercentage", + "nameLocation": "10044:33:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1320, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10086:4:9", + "nodeType": "VariableDeclaration", + "scope": 1325, + "src": "10078:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10078:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1322, + "mutability": "mutable", + "name": "newAggregateYieldFeePercentage", + "nameLocation": "10100:30:9", + "nodeType": "VariableDeclaration", + "scope": 1325, + "src": "10092:38:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1321, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10092:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10077:54:9" + }, + "returnParameters": { + "id": 1324, + "nodeType": "ParameterList", + "parameters": [], + "src": "10140:0:9" + }, + "scope": 1453, + "src": "10035:106:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1326, + "nodeType": "StructuredDocumentation", + "src": "10149:253:9", + "text": " @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller" + }, + "functionSelector": "2d771389", + "id": 1332, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setProtocolFeeController", + "nameLocation": "10417:24:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1330, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1329, + "mutability": "mutable", + "name": "newProtocolFeeController", + "nameLocation": "10465:24:9", + "nodeType": "VariableDeclaration", + "scope": 1332, + "src": "10442:47:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + }, + "typeName": { + "id": 1328, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1327, + "name": "IProtocolFeeController", + "nameLocations": [ + "10442:22:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1048, + "src": "10442:22:9" + }, + "referencedDeclaration": 1048, + "src": "10442:22:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + } + }, + "visibility": "internal" + } + ], + "src": "10441:49:9" + }, + "returnParameters": { + "id": 1331, + "nodeType": "ParameterList", + "parameters": [], + "src": "10499:0:9" + }, + "scope": 1453, + "src": "10408:92:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1333, + "nodeType": "StructuredDocumentation", + "src": "10733:325:9", + "text": " @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, live balances cannot be updated while in Recovery Mode.\n @param pool The address of the pool" + }, + "functionSelector": "dc3f574e", + "id": 1338, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "enableRecoveryMode", + "nameLocation": "11073:18:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1336, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1335, + "mutability": "mutable", + "name": "pool", + "nameLocation": "11100:4:9", + "nodeType": "VariableDeclaration", + "scope": 1338, + "src": "11092:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1334, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11092:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11091:14:9" + }, + "returnParameters": { + "id": 1337, + "nodeType": "ParameterList", + "parameters": [], + "src": "11114:0:9" + }, + "scope": 1453, + "src": "11064:51:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1339, + "nodeType": "StructuredDocumentation", + "src": "11123:416:9", + "text": " @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool" + }, + "functionSelector": "bffb78b2", + "id": 1344, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "disableRecoveryMode", + "nameLocation": "11554:19:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1341, + "mutability": "mutable", + "name": "pool", + "nameLocation": "11582:4:9", + "nodeType": "VariableDeclaration", + "scope": 1344, + "src": "11574:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1340, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11574:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11573:14:9" + }, + "returnParameters": { + "id": 1343, + "nodeType": "ParameterList", + "parameters": [], + "src": "11596:0:9" + }, + "scope": 1453, + "src": "11545:52:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1345, + "nodeType": "StructuredDocumentation", + "src": "11824:90:9", + "text": "@notice Disables queries functionality on the Vault. Can only be called by governance." + }, + "functionSelector": "de1a36a6", + "id": 1348, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "disableQuery", + "nameLocation": "11929:12:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1346, + "nodeType": "ParameterList", + "parameters": [], + "src": "11941:2:9" + }, + "returnParameters": { + "id": 1347, + "nodeType": "ParameterList", + "parameters": [], + "src": "11952:0:9" + }, + "scope": 1453, + "src": "11920:33:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1349, + "nodeType": "StructuredDocumentation", + "src": "12186:312:9", + "text": " @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible.\n @return buffersPaused True if the Vault buffers are paused" + }, + "functionSelector": "55cba7fe", + "id": 1354, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "areBuffersPaused", + "nameLocation": "12513:16:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1350, + "nodeType": "ParameterList", + "parameters": [], + "src": "12529:2:9" + }, + "returnParameters": { + "id": 1353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1352, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 1354, + "src": "12555:4:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1351, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12555:4:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12554:6:9" + }, + "scope": 1453, + "src": "12504:57:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1355, + "nodeType": "StructuredDocumentation", + "src": "12569:441:9", + "text": " @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`)." + }, + "functionSelector": "e085c5a8", + "id": 1358, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "pauseVaultBuffers", + "nameLocation": "13025:17:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1356, + "nodeType": "ParameterList", + "parameters": [], + "src": "13042:2:9" + }, + "returnParameters": { + "id": 1357, + "nodeType": "ParameterList", + "parameters": [], + "src": "13053:0:9" + }, + "scope": 1453, + "src": "13016:38:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1359, + "nodeType": "StructuredDocumentation", + "src": "13062:323:9", + "text": " @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity.\n This is a permissioned call." + }, + "functionSelector": "b9212b49", + "id": 1362, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unpauseVaultBuffers", + "nameLocation": "13400:19:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1360, + "nodeType": "ParameterList", + "parameters": [], + "src": "13419:2:9" + }, + "returnParameters": { + "id": 1361, + "nodeType": "ParameterList", + "parameters": [], + "src": "13430:0:9" + }, + "scope": 1453, + "src": "13391:40:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1363, + "nodeType": "StructuredDocumentation", + "src": "13439:733:9", + "text": " @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + }, + "functionSelector": "40058e35", + "id": 1377, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initializeBuffer", + "nameLocation": "14187:16:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1373, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1366, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "14223:12:9", + "nodeType": "VariableDeclaration", + "scope": 1377, + "src": "14214:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1365, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1364, + "name": "IERC4626", + "nameLocations": [ + "14214:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "14214:8:9" + }, + "referencedDeclaration": 3428, + "src": "14214:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1368, + "mutability": "mutable", + "name": "amountUnderlyingRaw", + "nameLocation": "14254:19:9", + "nodeType": "VariableDeclaration", + "scope": 1377, + "src": "14246:27:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1367, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14246:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1370, + "mutability": "mutable", + "name": "amountWrappedRaw", + "nameLocation": "14292:16:9", + "nodeType": "VariableDeclaration", + "scope": 1377, + "src": "14284:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1369, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14284:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1372, + "mutability": "mutable", + "name": "sharesOwner", + "nameLocation": "14327:11:9", + "nodeType": "VariableDeclaration", + "scope": 1377, + "src": "14319:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1371, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14319:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14203:142:9" + }, + "returnParameters": { + "id": 1376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1375, + "mutability": "mutable", + "name": "issuedShares", + "nameLocation": "14372:12:9", + "nodeType": "VariableDeclaration", + "scope": 1377, + "src": "14364:20:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1374, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14364:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14363:22:9" + }, + "scope": 1453, + "src": "14178:208:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1378, + "nodeType": "StructuredDocumentation", + "src": "14394:804:9", + "text": " @notice Adds liquidity to an internal ERC4626 buffer in the Vault.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals." + }, + "functionSelector": "1a2e575e", + "id": 1392, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addLiquidityToBuffer", + "nameLocation": "15213:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1388, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1381, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "15253:12:9", + "nodeType": "VariableDeclaration", + "scope": 1392, + "src": "15244:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1380, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1379, + "name": "IERC4626", + "nameLocations": [ + "15244:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "15244:8:9" + }, + "referencedDeclaration": 3428, + "src": "15244:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1383, + "mutability": "mutable", + "name": "amountUnderlyingRaw", + "nameLocation": "15284:19:9", + "nodeType": "VariableDeclaration", + "scope": 1392, + "src": "15276:27:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1382, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15276:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1385, + "mutability": "mutable", + "name": "amountWrappedRaw", + "nameLocation": "15322:16:9", + "nodeType": "VariableDeclaration", + "scope": 1392, + "src": "15314:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15314:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1387, + "mutability": "mutable", + "name": "sharesOwner", + "nameLocation": "15357:11:9", + "nodeType": "VariableDeclaration", + "scope": 1392, + "src": "15349:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1386, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15349:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15233:142:9" + }, + "returnParameters": { + "id": 1391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1390, + "mutability": "mutable", + "name": "issuedShares", + "nameLocation": "15402:12:9", + "nodeType": "VariableDeclaration", + "scope": 1392, + "src": "15394:20:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15394:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15393:22:9" + }, + "scope": 1453, + "src": "15204:212:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1393, + "nodeType": "StructuredDocumentation", + "src": "15424:1158:9", + "text": " @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals.\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user" + }, + "functionSelector": "35b60a19", + "id": 1405, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "removeLiquidityFromBuffer", + "nameLocation": "16597:25:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1396, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "16642:12:9", + "nodeType": "VariableDeclaration", + "scope": 1405, + "src": "16633:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1395, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1394, + "name": "IERC4626", + "nameLocations": [ + "16633:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "16633:8:9" + }, + "referencedDeclaration": 3428, + "src": "16633:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1398, + "mutability": "mutable", + "name": "sharesToRemove", + "nameLocation": "16673:14:9", + "nodeType": "VariableDeclaration", + "scope": 1405, + "src": "16665:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1397, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16665:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16622:72:9" + }, + "returnParameters": { + "id": 1404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1401, + "mutability": "mutable", + "name": "removedUnderlyingBalanceRaw", + "nameLocation": "16721:27:9", + "nodeType": "VariableDeclaration", + "scope": 1405, + "src": "16713:35:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1400, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16713:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1403, + "mutability": "mutable", + "name": "removedWrappedBalanceRaw", + "nameLocation": "16758:24:9", + "nodeType": "VariableDeclaration", + "scope": 1405, + "src": "16750:32:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1402, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16750:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16712:71:9" + }, + "scope": 1453, + "src": "16588:196:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1406, + "nodeType": "StructuredDocumentation", + "src": "16792:388:9", + "text": " @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized." + }, + "functionSelector": "0387587d", + "id": 1414, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferAsset", + "nameLocation": "17195:14:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1410, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1409, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "17219:12:9", + "nodeType": "VariableDeclaration", + "scope": 1414, + "src": "17210:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1408, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1407, + "name": "IERC4626", + "nameLocations": [ + "17210:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "17210:8:9" + }, + "referencedDeclaration": 3428, + "src": "17210:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "17209:23:9" + }, + "returnParameters": { + "id": 1413, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1412, + "mutability": "mutable", + "name": "underlyingToken", + "nameLocation": "17264:15:9", + "nodeType": "VariableDeclaration", + "scope": 1414, + "src": "17256:23:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1411, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17256:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17255:25:9" + }, + "scope": 1453, + "src": "17186:95:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1415, + "nodeType": "StructuredDocumentation", + "src": "17289:448:9", + "text": " @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals" + }, + "functionSelector": "9385e39a", + "id": 1425, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferOwnerShares", + "nameLocation": "17752:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1418, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "17792:12:9", + "nodeType": "VariableDeclaration", + "scope": 1425, + "src": "17783:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1417, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1416, + "name": "IERC4626", + "nameLocations": [ + "17783:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "17783:8:9" + }, + "referencedDeclaration": 3428, + "src": "17783:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1420, + "mutability": "mutable", + "name": "liquidityOwner", + "nameLocation": "17823:14:9", + "nodeType": "VariableDeclaration", + "scope": 1425, + "src": "17815:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1419, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17815:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "17772:72:9" + }, + "returnParameters": { + "id": 1424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1423, + "mutability": "mutable", + "name": "ownerShares", + "nameLocation": "17876:11:9", + "nodeType": "VariableDeclaration", + "scope": 1425, + "src": "17868:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17868:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17867:21:9" + }, + "scope": 1453, + "src": "17743:146:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1426, + "nodeType": "StructuredDocumentation", + "src": "17897:285:9", + "text": " @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals" + }, + "functionSelector": "f2784e07", + "id": 1434, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferTotalShares", + "nameLocation": "18197:20:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1429, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "18227:12:9", + "nodeType": "VariableDeclaration", + "scope": 1434, + "src": "18218:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1428, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1427, + "name": "IERC4626", + "nameLocations": [ + "18218:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "18218:8:9" + }, + "referencedDeclaration": 3428, + "src": "18218:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "18217:23:9" + }, + "returnParameters": { + "id": 1433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1432, + "mutability": "mutable", + "name": "bufferShares", + "nameLocation": "18272:12:9", + "nodeType": "VariableDeclaration", + "scope": 1434, + "src": "18264:20:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18264:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18263:22:9" + }, + "scope": 1453, + "src": "18188:98:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1435, + "nodeType": "StructuredDocumentation", + "src": "18294:527:9", + "text": " @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals" + }, + "functionSelector": "4021fe0f", + "id": 1445, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBufferBalance", + "nameLocation": "18836:16:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1439, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1438, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "18872:12:9", + "nodeType": "VariableDeclaration", + "scope": 1445, + "src": "18863:21:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1437, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1436, + "name": "IERC4626", + "nameLocations": [ + "18863:8:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "18863:8:9" + }, + "referencedDeclaration": 3428, + "src": "18863:8:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "18852:39:9" + }, + "returnParameters": { + "id": 1444, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1441, + "mutability": "mutable", + "name": "underlyingBalanceRaw", + "nameLocation": "18923:20:9", + "nodeType": "VariableDeclaration", + "scope": 1445, + "src": "18915:28:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1440, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18915:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1443, + "mutability": "mutable", + "name": "wrappedBalanceRaw", + "nameLocation": "18953:17:9", + "nodeType": "VariableDeclaration", + "scope": 1445, + "src": "18945:25:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1442, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18945:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18914:57:9" + }, + "scope": 1453, + "src": "18827:145:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1446, + "nodeType": "StructuredDocumentation", + "src": "19202:206:9", + "text": " @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer" + }, + "functionSelector": "058a628f", + "id": 1452, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setAuthorizer", + "nameLocation": "19423:13:9", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1450, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1449, + "mutability": "mutable", + "name": "newAuthorizer", + "nameLocation": "19449:13:9", + "nodeType": "VariableDeclaration", + "scope": 1452, + "src": "19437:25:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1448, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1447, + "name": "IAuthorizer", + "nameLocations": [ + "19437:11:9" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 525, + "src": "19437:11:9" + }, + "referencedDeclaration": 525, + "src": "19437:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "19436:27:9" + }, + "returnParameters": { + "id": 1451, + "nodeType": "ParameterList", + "parameters": [], + "src": "19472:0:9" + }, + "scope": 1453, + "src": "19414:59:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1454, + "src": "666:18810:9", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:19430:9" + }, + "id": 9 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol", + "exportedSymbols": { + "IERC20": [ + 3506 + ], + "IERC4626": [ + 3428 + ], + "IVaultErrors": [ + 1807 + ] + }, + "id": 1808, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1455, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:10" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 1457, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1808, + "sourceUnit": 3507, + "src": "76:137:10", + "symbolAliases": [ + { + "foreign": { + "id": 1456, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "id": 1459, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1808, + "sourceUnit": 3429, + "src": "215:140:10", + "symbolAliases": [ + { + "foreign": { + "id": 1458, + "name": "IERC4626", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3428, + "src": "224:8:10", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IVaultErrors", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1460, + "nodeType": "StructuredDocumentation", + "src": "359:95:10", + "text": "@notice Errors are declared inside an interface (namespace) to improve DX with Typechain." + }, + "fullyImplemented": true, + "id": 1807, + "linearizedBaseContracts": [ + 1807 + ], + "name": "IVaultErrors", + "nameLocation": "464:12:10", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1461, + "nodeType": "StructuredDocumentation", + "src": "719:152:10", + "text": " @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool" + }, + "errorSelector": "db771c80", + "id": 1465, + "name": "PoolAlreadyRegistered", + "nameLocation": "883:21:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1464, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1463, + "mutability": "mutable", + "name": "pool", + "nameLocation": "913:4:10", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "905:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1462, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "905:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "904:14:10" + }, + "src": "877:42:10" + }, + { + "documentation": { + "id": 1466, + "nodeType": "StructuredDocumentation", + "src": "927:152:10", + "text": " @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool" + }, + "errorSelector": "218e3747", + "id": 1470, + "name": "PoolAlreadyInitialized", + "nameLocation": "1091:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1469, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1468, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1122:4:10", + "nodeType": "VariableDeclaration", + "scope": 1470, + "src": "1114:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1467, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1114:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1113:14:10" + }, + "src": "1085:43:10" + }, + { + "documentation": { + "id": 1471, + "nodeType": "StructuredDocumentation", + "src": "1136:102:10", + "text": " @notice A pool has not been registered.\n @param pool The unregistered pool" + }, + "errorSelector": "9e51bd5c", + "id": 1475, + "name": "PoolNotRegistered", + "nameLocation": "1250:17:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1473, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1276:4:10", + "nodeType": "VariableDeclaration", + "scope": 1475, + "src": "1268:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1472, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1268:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1267:14:10" + }, + "src": "1244:38:10" + }, + { + "documentation": { + "id": 1476, + "nodeType": "StructuredDocumentation", + "src": "1290:115:10", + "text": " @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool" + }, + "errorSelector": "4bdace13", + "id": 1480, + "name": "PoolNotInitialized", + "nameLocation": "1417:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1478, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1444:4:10", + "nodeType": "VariableDeclaration", + "scope": 1480, + "src": "1436:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1477, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1436:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1435:14:10" + }, + "src": "1411:39:10" + }, + { + "documentation": { + "id": 1481, + "nodeType": "StructuredDocumentation", + "src": "1458:279:10", + "text": " @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory" + }, + "errorSelector": "fa93d814", + "id": 1489, + "name": "HookRegistrationFailed", + "nameLocation": "1749:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1488, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1483, + "mutability": "mutable", + "name": "poolHooksContract", + "nameLocation": "1780:17:10", + "nodeType": "VariableDeclaration", + "scope": 1489, + "src": "1772:25:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1482, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1772:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1485, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1807:4:10", + "nodeType": "VariableDeclaration", + "scope": 1489, + "src": "1799:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1484, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1799:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1487, + "mutability": "mutable", + "name": "poolFactory", + "nameLocation": "1821:11:10", + "nodeType": "VariableDeclaration", + "scope": 1489, + "src": "1813:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1486, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1813:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1771:62:10" + }, + "src": "1743:91:10" + }, + { + "documentation": { + "id": 1490, + "nodeType": "StructuredDocumentation", + "src": "1842:139:10", + "text": " @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token" + }, + "errorSelector": "4f4b634e", + "id": 1495, + "name": "TokenAlreadyRegistered", + "nameLocation": "1993:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1494, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1493, + "mutability": "mutable", + "name": "token", + "nameLocation": "2023:5:10", + "nodeType": "VariableDeclaration", + "scope": 1495, + "src": "2016:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1492, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1491, + "name": "IERC20", + "nameLocations": [ + "2016:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2016:6:10" + }, + "referencedDeclaration": 3506, + "src": "2016:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2015:14:10" + }, + "src": "1987:43:10" + }, + { + "documentation": { + "id": 1496, + "nodeType": "StructuredDocumentation", + "src": "2038:57:10", + "text": "@notice The token count is below the minimum allowed." + }, + "errorSelector": "5ed4ba8f", + "id": 1498, + "name": "MinTokens", + "nameLocation": "2107:9:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1497, + "nodeType": "ParameterList", + "parameters": [], + "src": "2116:2:10" + }, + "src": "2101:18:10" + }, + { + "documentation": { + "id": 1499, + "nodeType": "StructuredDocumentation", + "src": "2127:57:10", + "text": "@notice The token count is above the maximum allowed." + }, + "errorSelector": "707bdf58", + "id": 1501, + "name": "MaxTokens", + "nameLocation": "2196:9:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1500, + "nodeType": "ParameterList", + "parameters": [], + "src": "2205:2:10" + }, + "src": "2190:18:10" + }, + { + "documentation": { + "id": 1502, + "nodeType": "StructuredDocumentation", + "src": "2216:61:10", + "text": "@notice Invalid tokens (e.g., zero) cannot be registered." + }, + "errorSelector": "c1ab6dc1", + "id": 1504, + "name": "InvalidToken", + "nameLocation": "2289:12:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1503, + "nodeType": "ParameterList", + "parameters": [], + "src": "2301:2:10" + }, + "src": "2283:21:10" + }, + { + "documentation": { + "id": 1505, + "nodeType": "StructuredDocumentation", + "src": "2312:86:10", + "text": "@notice The token type given in a TokenConfig during pool registration is invalid." + }, + "errorSelector": "a1e9dd9d", + "id": 1507, + "name": "InvalidTokenType", + "nameLocation": "2410:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1506, + "nodeType": "ParameterList", + "parameters": [], + "src": "2426:2:10" + }, + "src": "2404:25:10" + }, + { + "documentation": { + "id": 1508, + "nodeType": "StructuredDocumentation", + "src": "2437:76:10", + "text": "@notice The data in a TokenConfig struct is inconsistent or unsupported." + }, + "errorSelector": "df450632", + "id": 1510, + "name": "InvalidTokenConfiguration", + "nameLocation": "2525:25:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1509, + "nodeType": "ParameterList", + "parameters": [], + "src": "2550:2:10" + }, + "src": "2519:34:10" + }, + { + "documentation": { + "id": 1511, + "nodeType": "StructuredDocumentation", + "src": "2561:292:10", + "text": " @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index" + }, + "errorSelector": "ffe261a1", + "id": 1519, + "name": "TokensMismatch", + "nameLocation": "2865:14:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1513, + "mutability": "mutable", + "name": "pool", + "nameLocation": "2888:4:10", + "nodeType": "VariableDeclaration", + "scope": 1519, + "src": "2880:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1512, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2880:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1515, + "mutability": "mutable", + "name": "expectedToken", + "nameLocation": "2902:13:10", + "nodeType": "VariableDeclaration", + "scope": 1519, + "src": "2894:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1514, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2894:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1517, + "mutability": "mutable", + "name": "actualToken", + "nameLocation": "2925:11:10", + "nodeType": "VariableDeclaration", + "scope": 1519, + "src": "2917:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1516, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2917:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2879:58:10" + }, + "src": "2859:79:10" + }, + { + "documentation": { + "id": 1520, + "nodeType": "StructuredDocumentation", + "src": "3175:85:10", + "text": "@notice A transient accounting operation completed with outstanding token deltas." + }, + "errorSelector": "20f1d86d", + "id": 1522, + "name": "BalanceNotSettled", + "nameLocation": "3272:17:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1521, + "nodeType": "ParameterList", + "parameters": [], + "src": "3289:2:10" + }, + "src": "3266:26:10" + }, + { + "documentation": { + "id": 1523, + "nodeType": "StructuredDocumentation", + "src": "3300:97:10", + "text": "@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context." + }, + "errorSelector": "c09ba736", + "id": 1525, + "name": "VaultIsNotUnlocked", + "nameLocation": "3409:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1524, + "nodeType": "ParameterList", + "parameters": [], + "src": "3427:2:10" + }, + "src": "3403:27:10" + }, + { + "documentation": { + "id": 1526, + "nodeType": "StructuredDocumentation", + "src": "3438:105:10", + "text": "@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + }, + "errorSelector": "53f976d4", + "id": 1528, + "name": "DynamicSwapFeeHookFailed", + "nameLocation": "3555:24:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1527, + "nodeType": "ParameterList", + "parameters": [], + "src": "3579:2:10" + }, + "src": "3549:33:10" + }, + { + "documentation": { + "id": 1529, + "nodeType": "StructuredDocumentation", + "src": "3590:105:10", + "text": "@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert." + }, + "errorSelector": "e91e17e7", + "id": 1531, + "name": "BeforeSwapHookFailed", + "nameLocation": "3707:20:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1530, + "nodeType": "ParameterList", + "parameters": [], + "src": "3727:2:10" + }, + "src": "3701:29:10" + }, + { + "documentation": { + "id": 1532, + "nodeType": "StructuredDocumentation", + "src": "3738:104:10", + "text": "@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert." + }, + "errorSelector": "15a29dec", + "id": 1534, + "name": "AfterSwapHookFailed", + "nameLocation": "3854:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1533, + "nodeType": "ParameterList", + "parameters": [], + "src": "3873:2:10" + }, + "src": "3848:28:10" + }, + { + "documentation": { + "id": 1535, + "nodeType": "StructuredDocumentation", + "src": "3884:111:10", + "text": "@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert." + }, + "errorSelector": "60612925", + "id": 1537, + "name": "BeforeInitializeHookFailed", + "nameLocation": "4007:26:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1536, + "nodeType": "ParameterList", + "parameters": [], + "src": "4033:2:10" + }, + "src": "4001:35:10" + }, + { + "documentation": { + "id": 1538, + "nodeType": "StructuredDocumentation", + "src": "4044:110:10", + "text": "@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert." + }, + "errorSelector": "0f23dbc6", + "id": 1540, + "name": "AfterInitializeHookFailed", + "nameLocation": "4166:25:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1539, + "nodeType": "ParameterList", + "parameters": [], + "src": "4191:2:10" + }, + "src": "4160:34:10" + }, + { + "documentation": { + "id": 1541, + "nodeType": "StructuredDocumentation", + "src": "4202:113:10", + "text": "@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert." + }, + "errorSelector": "0b2eb652", + "id": 1543, + "name": "BeforeAddLiquidityHookFailed", + "nameLocation": "4327:28:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1542, + "nodeType": "ParameterList", + "parameters": [], + "src": "4355:2:10" + }, + "src": "4321:37:10" + }, + { + "documentation": { + "id": 1544, + "nodeType": "StructuredDocumentation", + "src": "4366:112:10", + "text": "@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert." + }, + "errorSelector": "e1249165", + "id": 1546, + "name": "AfterAddLiquidityHookFailed", + "nameLocation": "4490:27:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1545, + "nodeType": "ParameterList", + "parameters": [], + "src": "4517:2:10" + }, + "src": "4484:36:10" + }, + { + "documentation": { + "id": 1547, + "nodeType": "StructuredDocumentation", + "src": "4528:116:10", + "text": "@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert." + }, + "errorSelector": "2aaf8866", + "id": 1549, + "name": "BeforeRemoveLiquidityHookFailed", + "nameLocation": "4656:31:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1548, + "nodeType": "ParameterList", + "parameters": [], + "src": "4687:2:10" + }, + "src": "4650:40:10" + }, + { + "documentation": { + "id": 1550, + "nodeType": "StructuredDocumentation", + "src": "4698:115:10", + "text": "@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert." + }, + "errorSelector": "1d3391d8", + "id": 1552, + "name": "AfterRemoveLiquidityHookFailed", + "nameLocation": "4825:30:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1551, + "nodeType": "ParameterList", + "parameters": [], + "src": "4855:2:10" + }, + "src": "4819:39:10" + }, + { + "documentation": { + "id": 1553, + "nodeType": "StructuredDocumentation", + "src": "4866:115:10", + "text": "@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)." + }, + "errorSelector": "e5d185cf", + "id": 1555, + "name": "RouterNotTrusted", + "nameLocation": "4993:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1554, + "nodeType": "ParameterList", + "parameters": [], + "src": "5009:2:10" + }, + "src": "4987:25:10" + }, + { + "documentation": { + "id": 1556, + "nodeType": "StructuredDocumentation", + "src": "5241:47:10", + "text": "@notice The user tried to swap zero tokens." + }, + "errorSelector": "57a456b7", + "id": 1558, + "name": "AmountGivenZero", + "nameLocation": "5300:15:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1557, + "nodeType": "ParameterList", + "parameters": [], + "src": "5315:2:10" + }, + "src": "5294:24:10" + }, + { + "documentation": { + "id": 1559, + "nodeType": "StructuredDocumentation", + "src": "5326:58:10", + "text": "@notice The user attempted to swap a token for itself." + }, + "errorSelector": "a54b181d", + "id": 1561, + "name": "CannotSwapSameToken", + "nameLocation": "5396:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1560, + "nodeType": "ParameterList", + "parameters": [], + "src": "5415:2:10" + }, + "src": "5390:28:10" + }, + { + "documentation": { + "id": 1562, + "nodeType": "StructuredDocumentation", + "src": "5426:140:10", + "text": " @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token" + }, + "errorSelector": "ddef98d7", + "id": 1567, + "name": "TokenNotRegistered", + "nameLocation": "5578:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1566, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1565, + "mutability": "mutable", + "name": "token", + "nameLocation": "5604:5:10", + "nodeType": "VariableDeclaration", + "scope": 1567, + "src": "5597:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1564, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1563, + "name": "IERC20", + "nameLocations": [ + "5597:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "5597:6:10" + }, + "referencedDeclaration": 3506, + "src": "5597:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "5596:14:10" + }, + "src": "5572:39:10" + }, + { + "documentation": { + "id": 1568, + "nodeType": "StructuredDocumentation", + "src": "5619:219:10", + "text": " @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded" + }, + "errorSelector": "e2ea151b", + "id": 1574, + "name": "SwapLimit", + "nameLocation": "5850:9:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1570, + "mutability": "mutable", + "name": "amount", + "nameLocation": "5868:6:10", + "nodeType": "VariableDeclaration", + "scope": 1574, + "src": "5860:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1569, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5860:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1572, + "mutability": "mutable", + "name": "limit", + "nameLocation": "5884:5:10", + "nodeType": "VariableDeclaration", + "scope": 1574, + "src": "5876:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5876:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5859:31:10" + }, + "src": "5844:47:10" + }, + { + "documentation": { + "id": 1575, + "nodeType": "StructuredDocumentation", + "src": "5899:232:10", + "text": " @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded" + }, + "errorSelector": "cc0e4a99", + "id": 1581, + "name": "HookAdjustedSwapLimit", + "nameLocation": "6143:21:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1580, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1577, + "mutability": "mutable", + "name": "amount", + "nameLocation": "6173:6:10", + "nodeType": "VariableDeclaration", + "scope": 1581, + "src": "6165:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1576, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6165:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1579, + "mutability": "mutable", + "name": "limit", + "nameLocation": "6189:5:10", + "nodeType": "VariableDeclaration", + "scope": 1581, + "src": "6181:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1578, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6181:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6164:31:10" + }, + "src": "6137:59:10" + }, + { + "documentation": { + "id": 1582, + "nodeType": "StructuredDocumentation", + "src": "6204:87:10", + "text": "@notice The amount given or calculated for an operation is below the minimum limit." + }, + "errorSelector": "1ed4d118", + "id": 1584, + "name": "TradeAmountTooSmall", + "nameLocation": "6303:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1583, + "nodeType": "ParameterList", + "parameters": [], + "src": "6322:2:10" + }, + "src": "6297:28:10" + }, + { + "documentation": { + "id": 1585, + "nodeType": "StructuredDocumentation", + "src": "6558:45:10", + "text": "@notice Add liquidity kind not supported." + }, + "errorSelector": "6c02b395", + "id": 1587, + "name": "InvalidAddLiquidityKind", + "nameLocation": "6615:23:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1586, + "nodeType": "ParameterList", + "parameters": [], + "src": "6638:2:10" + }, + "src": "6609:32:10" + }, + { + "documentation": { + "id": 1588, + "nodeType": "StructuredDocumentation", + "src": "6649:269:10", + "text": " @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded" + }, + "errorSelector": "8eda85e4", + "id": 1597, + "name": "AmountInAboveMax", + "nameLocation": "6930:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1591, + "mutability": "mutable", + "name": "tokenIn", + "nameLocation": "6954:7:10", + "nodeType": "VariableDeclaration", + "scope": 1597, + "src": "6947:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1590, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1589, + "name": "IERC20", + "nameLocations": [ + "6947:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6947:6:10" + }, + "referencedDeclaration": 3506, + "src": "6947:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1593, + "mutability": "mutable", + "name": "amountIn", + "nameLocation": "6971:8:10", + "nodeType": "VariableDeclaration", + "scope": 1597, + "src": "6963:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1592, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6963:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1595, + "mutability": "mutable", + "name": "maxAmountIn", + "nameLocation": "6989:11:10", + "nodeType": "VariableDeclaration", + "scope": 1597, + "src": "6981:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1594, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6981:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6946:55:10" + }, + "src": "6924:78:10" + }, + { + "documentation": { + "id": 1598, + "nodeType": "StructuredDocumentation", + "src": "7010:274:10", + "text": " @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded" + }, + "errorSelector": "cefa3afa", + "id": 1607, + "name": "HookAdjustedAmountInAboveMax", + "nameLocation": "7296:28:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1606, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1601, + "mutability": "mutable", + "name": "tokenIn", + "nameLocation": "7332:7:10", + "nodeType": "VariableDeclaration", + "scope": 1607, + "src": "7325:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1600, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1599, + "name": "IERC20", + "nameLocations": [ + "7325:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "7325:6:10" + }, + "referencedDeclaration": 3506, + "src": "7325:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1603, + "mutability": "mutable", + "name": "amountIn", + "nameLocation": "7349:8:10", + "nodeType": "VariableDeclaration", + "scope": 1607, + "src": "7341:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1602, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7341:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1605, + "mutability": "mutable", + "name": "maxAmountIn", + "nameLocation": "7367:11:10", + "nodeType": "VariableDeclaration", + "scope": 1607, + "src": "7359:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7359:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7324:55:10" + }, + "src": "7290:90:10" + }, + { + "documentation": { + "id": 1608, + "nodeType": "StructuredDocumentation", + "src": "7388:249:10", + "text": " @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded" + }, + "errorSelector": "8d261d5d", + "id": 1614, + "name": "BptAmountOutBelowMin", + "nameLocation": "7649:20:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1613, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1610, + "mutability": "mutable", + "name": "amountOut", + "nameLocation": "7678:9:10", + "nodeType": "VariableDeclaration", + "scope": 1614, + "src": "7670:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7670:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1612, + "mutability": "mutable", + "name": "minAmountOut", + "nameLocation": "7697:12:10", + "nodeType": "VariableDeclaration", + "scope": 1614, + "src": "7689:20:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1611, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7689:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7669:41:10" + }, + "src": "7643:68:10" + }, + { + "documentation": { + "id": 1615, + "nodeType": "StructuredDocumentation", + "src": "7719:75:10", + "text": "@notice Pool does not support adding liquidity with a customized input." + }, + "errorSelector": "4876c0bc", + "id": 1617, + "name": "DoesNotSupportAddLiquidityCustom", + "nameLocation": "7806:32:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1616, + "nodeType": "ParameterList", + "parameters": [], + "src": "7838:2:10" + }, + "src": "7800:41:10" + }, + { + "documentation": { + "id": 1618, + "nodeType": "StructuredDocumentation", + "src": "7849:68:10", + "text": "@notice Pool does not support adding liquidity through donation." + }, + "errorSelector": "efe0265d", + "id": 1620, + "name": "DoesNotSupportDonation", + "nameLocation": "7929:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1619, + "nodeType": "ParameterList", + "parameters": [], + "src": "7951:2:10" + }, + "src": "7923:31:10" + }, + { + "documentation": { + "id": 1621, + "nodeType": "StructuredDocumentation", + "src": "8190:48:10", + "text": "@notice Remove liquidity kind not supported." + }, + "errorSelector": "137a9a39", + "id": 1623, + "name": "InvalidRemoveLiquidityKind", + "nameLocation": "8250:26:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1622, + "nodeType": "ParameterList", + "parameters": [], + "src": "8276:2:10" + }, + "src": "8244:35:10" + }, + { + "documentation": { + "id": 1624, + "nodeType": "StructuredDocumentation", + "src": "8287:274:10", + "text": " @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded" + }, + "errorSelector": "2f785e46", + "id": 1633, + "name": "AmountOutBelowMin", + "nameLocation": "8573:17:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1632, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1627, + "mutability": "mutable", + "name": "tokenOut", + "nameLocation": "8598:8:10", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "8591:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1626, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1625, + "name": "IERC20", + "nameLocations": [ + "8591:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "8591:6:10" + }, + "referencedDeclaration": 3506, + "src": "8591:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1629, + "mutability": "mutable", + "name": "amountOut", + "nameLocation": "8616:9:10", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "8608:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8608:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1631, + "mutability": "mutable", + "name": "minAmountOut", + "nameLocation": "8635:12:10", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "8627:20:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1630, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8627:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8590:58:10" + }, + "src": "8567:82:10" + }, + { + "documentation": { + "id": 1634, + "nodeType": "StructuredDocumentation", + "src": "8657:281:10", + "text": " @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded" + }, + "errorSelector": "fbd8a724", + "id": 1643, + "name": "HookAdjustedAmountOutBelowMin", + "nameLocation": "8950:29:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1637, + "mutability": "mutable", + "name": "tokenOut", + "nameLocation": "8987:8:10", + "nodeType": "VariableDeclaration", + "scope": 1643, + "src": "8980:15:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1636, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1635, + "name": "IERC20", + "nameLocations": [ + "8980:6:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "8980:6:10" + }, + "referencedDeclaration": 3506, + "src": "8980:6:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1639, + "mutability": "mutable", + "name": "amountOut", + "nameLocation": "9005:9:10", + "nodeType": "VariableDeclaration", + "scope": 1643, + "src": "8997:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1638, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8997:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1641, + "mutability": "mutable", + "name": "minAmountOut", + "nameLocation": "9024:12:10", + "nodeType": "VariableDeclaration", + "scope": 1643, + "src": "9016:20:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1640, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9016:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8979:58:10" + }, + "src": "8944:94:10" + }, + { + "documentation": { + "id": 1644, + "nodeType": "StructuredDocumentation", + "src": "9046:232:10", + "text": " @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded" + }, + "errorSelector": "31d38e0b", + "id": 1650, + "name": "BptAmountInAboveMax", + "nameLocation": "9290:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1649, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1646, + "mutability": "mutable", + "name": "amountIn", + "nameLocation": "9318:8:10", + "nodeType": "VariableDeclaration", + "scope": 1650, + "src": "9310:16:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1645, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9310:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1648, + "mutability": "mutable", + "name": "maxAmountIn", + "nameLocation": "9336:11:10", + "nodeType": "VariableDeclaration", + "scope": 1650, + "src": "9328:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1647, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9328:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9309:39:10" + }, + "src": "9284:65:10" + }, + { + "documentation": { + "id": 1651, + "nodeType": "StructuredDocumentation", + "src": "9357:77:10", + "text": "@notice Pool does not support removing liquidity with a customized input." + }, + "errorSelector": "cf0a95c0", + "id": 1653, + "name": "DoesNotSupportRemoveLiquidityCustom", + "nameLocation": "9446:35:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1652, + "nodeType": "ParameterList", + "parameters": [], + "src": "9481:2:10" + }, + "src": "9440:44:10" + }, + { + "documentation": { + "id": 1654, + "nodeType": "StructuredDocumentation", + "src": "9709:337:10", + "text": " @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault." + }, + "errorSelector": "4c69ac5d", + "id": 1656, + "name": "ProtocolFeesExceedTotalCollected", + "nameLocation": "10058:32:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1655, + "nodeType": "ParameterList", + "parameters": [], + "src": "10090:2:10" + }, + "src": "10052:41:10" + }, + { + "documentation": { + "id": 1657, + "nodeType": "StructuredDocumentation", + "src": "10101:437:10", + "text": " @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits." + }, + "errorSelector": "bfb20688", + "id": 1659, + "name": "SwapFeePercentageTooLow", + "nameLocation": "10550:23:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1658, + "nodeType": "ParameterList", + "parameters": [], + "src": "10573:2:10" + }, + "src": "10544:32:10" + }, + { + "documentation": { + "id": 1660, + "nodeType": "StructuredDocumentation", + "src": "10584:440:10", + "text": " @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits." + }, + "errorSelector": "7f47834b", + "id": 1662, + "name": "SwapFeePercentageTooHigh", + "nameLocation": "11036:24:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1661, + "nodeType": "ParameterList", + "parameters": [], + "src": "11060:2:10" + }, + "src": "11030:33:10" + }, + { + "documentation": { + "id": 1663, + "nodeType": "StructuredDocumentation", + "src": "11071:653:10", + "text": " @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault." + }, + "errorSelector": "833fb3ce", + "id": 1665, + "name": "FeePrecisionTooHigh", + "nameLocation": "11736:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1664, + "nodeType": "ParameterList", + "parameters": [], + "src": "11755:2:10" + }, + "src": "11730:28:10" + }, + { + "documentation": { + "id": 1666, + "nodeType": "StructuredDocumentation", + "src": "11766:172:10", + "text": " @notice A given percentage is above the maximum (usually FixedPoint.ONE, or 1e18 wei).\n @dev Providing the value might be helpful for debugging." + }, + "errorSelector": "746e5940", + "id": 1668, + "name": "PercentageAboveMax", + "nameLocation": "11950:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1667, + "nodeType": "ParameterList", + "parameters": [], + "src": "11968:2:10" + }, + "src": "11944:27:10" + }, + { + "documentation": { + "id": 1669, + "nodeType": "StructuredDocumentation", + "src": "12198:78:10", + "text": "@notice A user tried to execute a query operation when they were disabled." + }, + "errorSelector": "7a198886", + "id": 1671, + "name": "QueriesDisabled", + "nameLocation": "12288:15:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1670, + "nodeType": "ParameterList", + "parameters": [], + "src": "12303:2:10" + }, + "src": "12282:24:10" + }, + { + "documentation": { + "id": 1672, + "nodeType": "StructuredDocumentation", + "src": "12535:107:10", + "text": " @notice Cannot enable recovery mode when already enabled.\n @param pool The pool" + }, + "errorSelector": "346d7607", + "id": 1676, + "name": "PoolInRecoveryMode", + "nameLocation": "12654:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1674, + "mutability": "mutable", + "name": "pool", + "nameLocation": "12681:4:10", + "nodeType": "VariableDeclaration", + "scope": 1676, + "src": "12673:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1673, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12673:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12672:14:10" + }, + "src": "12648:39:10" + }, + { + "documentation": { + "id": 1677, + "nodeType": "StructuredDocumentation", + "src": "12695:104:10", + "text": " @notice Cannot disable recovery mode when not enabled.\n @param pool The pool" + }, + "errorSelector": "ef029adf", + "id": 1681, + "name": "PoolNotInRecoveryMode", + "nameLocation": "12811:21:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1680, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1679, + "mutability": "mutable", + "name": "pool", + "nameLocation": "12841:4:10", + "nodeType": "VariableDeclaration", + "scope": 1681, + "src": "12833:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1678, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12833:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12832:14:10" + }, + "src": "12805:42:10" + }, + { + "documentation": { + "id": 1682, + "nodeType": "StructuredDocumentation", + "src": "13077:209:10", + "text": " @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function" + }, + "errorSelector": "089676d5", + "id": 1686, + "name": "SenderIsNotVault", + "nameLocation": "13298:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1685, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1684, + "mutability": "mutable", + "name": "sender", + "nameLocation": "13323:6:10", + "nodeType": "VariableDeclaration", + "scope": 1686, + "src": "13315:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1683, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13315:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "13314:16:10" + }, + "src": "13292:39:10" + }, + { + "documentation": { + "id": 1687, + "nodeType": "StructuredDocumentation", + "src": "13562:79:10", + "text": "@notice The caller specified a pause window period longer than the maximum." + }, + "errorSelector": "cc0e8fe5", + "id": 1689, + "name": "VaultPauseWindowDurationTooLarge", + "nameLocation": "13653:32:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1688, + "nodeType": "ParameterList", + "parameters": [], + "src": "13685:2:10" + }, + "src": "13647:41:10" + }, + { + "documentation": { + "id": 1690, + "nodeType": "StructuredDocumentation", + "src": "13696:73:10", + "text": "@notice The caller specified a buffer period longer than the maximum." + }, + "errorSelector": "9ea4efee", + "id": 1692, + "name": "PauseBufferPeriodDurationTooLarge", + "nameLocation": "13781:33:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1691, + "nodeType": "ParameterList", + "parameters": [], + "src": "13814:2:10" + }, + "src": "13775:42:10" + }, + { + "documentation": { + "id": 1693, + "nodeType": "StructuredDocumentation", + "src": "13825:76:10", + "text": "@notice A user tried to perform an operation while the Vault was paused." + }, + "errorSelector": "da9f8b34", + "id": 1695, + "name": "VaultPaused", + "nameLocation": "13913:11:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1694, + "nodeType": "ParameterList", + "parameters": [], + "src": "13924:2:10" + }, + "src": "13907:20:10" + }, + { + "documentation": { + "id": 1696, + "nodeType": "StructuredDocumentation", + "src": "13935:73:10", + "text": "@notice Governance tried to unpause the Vault when it was not paused." + }, + "errorSelector": "f7ff4dca", + "id": 1698, + "name": "VaultNotPaused", + "nameLocation": "14020:14:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1697, + "nodeType": "ParameterList", + "parameters": [], + "src": "14034:2:10" + }, + "src": "14014:23:10" + }, + { + "documentation": { + "id": 1699, + "nodeType": "StructuredDocumentation", + "src": "14045:79:10", + "text": "@notice Governance tried to pause the Vault after the pause period expired." + }, + "errorSelector": "0e4460b7", + "id": 1701, + "name": "VaultPauseWindowExpired", + "nameLocation": "14136:23:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1700, + "nodeType": "ParameterList", + "parameters": [], + "src": "14159:2:10" + }, + "src": "14130:32:10" + }, + { + "documentation": { + "id": 1702, + "nodeType": "StructuredDocumentation", + "src": "14170:126:10", + "text": " @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool" + }, + "errorSelector": "d971f597", + "id": 1706, + "name": "PoolPaused", + "nameLocation": "14308:10:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1705, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1704, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14327:4:10", + "nodeType": "VariableDeclaration", + "scope": 1706, + "src": "14319:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1703, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14319:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14318:14:10" + }, + "src": "14302:31:10" + }, + { + "documentation": { + "id": 1707, + "nodeType": "StructuredDocumentation", + "src": "14341:127:10", + "text": " @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool" + }, + "errorSelector": "fdcd6894", + "id": 1711, + "name": "PoolNotPaused", + "nameLocation": "14480:13:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1710, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1709, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14502:4:10", + "nodeType": "VariableDeclaration", + "scope": 1711, + "src": "14494:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1708, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14494:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14493:14:10" + }, + "src": "14474:34:10" + }, + { + "documentation": { + "id": 1712, + "nodeType": "StructuredDocumentation", + "src": "14516:122:10", + "text": " @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool" + }, + "errorSelector": "eb5a1217", + "id": 1716, + "name": "PoolPauseWindowExpired", + "nameLocation": "14650:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1714, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14681:4:10", + "nodeType": "VariableDeclaration", + "scope": 1716, + "src": "14673:12:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1713, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14673:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14672:14:10" + }, + "src": "14644:43:10" + }, + { + "documentation": { + "id": 1717, + "nodeType": "StructuredDocumentation", + "src": "14924:166:10", + "text": " @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer" + }, + "errorSelector": "1690fa40", + "id": 1722, + "name": "BufferAlreadyInitialized", + "nameLocation": "15102:24:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1721, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1720, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "15136:12:10", + "nodeType": "VariableDeclaration", + "scope": 1722, + "src": "15127:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1719, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1718, + "name": "IERC4626", + "nameLocations": [ + "15127:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "15127:8:10" + }, + "referencedDeclaration": 3428, + "src": "15127:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "15126:23:10" + }, + "src": "15096:54:10" + }, + { + "documentation": { + "id": 1723, + "nodeType": "StructuredDocumentation", + "src": "15158:162:10", + "text": " @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer" + }, + "errorSelector": "85f41299", + "id": 1728, + "name": "BufferNotInitialized", + "nameLocation": "15332:20:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1727, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1726, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "15362:12:10", + "nodeType": "VariableDeclaration", + "scope": 1728, + "src": "15353:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1725, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1724, + "name": "IERC4626", + "nameLocations": [ + "15353:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "15353:8:10" + }, + "referencedDeclaration": 3428, + "src": "15353:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "15352:23:10" + }, + "src": "15326:50:10" + }, + { + "documentation": { + "id": 1729, + "nodeType": "StructuredDocumentation", + "src": "15384:90:10", + "text": "@notice The user is trying to remove more than their allocated shares from the buffer." + }, + "errorSelector": "98c5dbd6", + "id": 1731, + "name": "NotEnoughBufferShares", + "nameLocation": "15486:21:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1730, + "nodeType": "ParameterList", + "parameters": [], + "src": "15507:2:10" + }, + "src": "15480:30:10" + }, + { + "documentation": { + "id": 1732, + "nodeType": "StructuredDocumentation", + "src": "15518:443:10", + "text": " @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`" + }, + "errorSelector": "36b18d09", + "id": 1739, + "name": "WrongUnderlyingToken", + "nameLocation": "15973:20:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1738, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1735, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "16003:12:10", + "nodeType": "VariableDeclaration", + "scope": 1739, + "src": "15994:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1734, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1733, + "name": "IERC4626", + "nameLocations": [ + "15994:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "15994:8:10" + }, + "referencedDeclaration": 3428, + "src": "15994:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1737, + "mutability": "mutable", + "name": "underlyingToken", + "nameLocation": "16025:15:10", + "nodeType": "VariableDeclaration", + "scope": 1739, + "src": "16017:23:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1736, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16017:7:10", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15993:48:10" + }, + "src": "15967:75:10" + }, + { + "documentation": { + "id": 1740, + "nodeType": "StructuredDocumentation", + "src": "16050:328:10", + "text": " @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer" + }, + "errorSelector": "d407f9c5", + "id": 1745, + "name": "InvalidUnderlyingToken", + "nameLocation": "16390:22:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1744, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1743, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "16422:12:10", + "nodeType": "VariableDeclaration", + "scope": 1745, + "src": "16413:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1742, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1741, + "name": "IERC4626", + "nameLocations": [ + "16413:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "16413:8:10" + }, + "referencedDeclaration": 3428, + "src": "16413:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "16412:23:10" + }, + "src": "16384:52:10" + }, + { + "documentation": { + "id": 1746, + "nodeType": "StructuredDocumentation", + "src": "16444:186:10", + "text": " @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer" + }, + "errorSelector": "18fe7385", + "id": 1751, + "name": "WrapAmountTooSmall", + "nameLocation": "16642:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1749, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "16670:12:10", + "nodeType": "VariableDeclaration", + "scope": 1751, + "src": "16661:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1748, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1747, + "name": "IERC4626", + "nameLocations": [ + "16661:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "16661:8:10" + }, + "referencedDeclaration": 3428, + "src": "16661:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + } + ], + "src": "16660:23:10" + }, + "src": "16636:48:10" + }, + { + "documentation": { + "id": 1752, + "nodeType": "StructuredDocumentation", + "src": "16692:70:10", + "text": "@notice Buffer operation attempted while vault buffers are paused." + }, + "errorSelector": "0f27df09", + "id": 1754, + "name": "VaultBuffersArePaused", + "nameLocation": "16774:21:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1753, + "nodeType": "ParameterList", + "parameters": [], + "src": "16795:2:10" + }, + "src": "16768:30:10" + }, + { + "documentation": { + "id": 1755, + "nodeType": "StructuredDocumentation", + "src": "16806:58:10", + "text": "@notice Buffer shares were minted to the zero address." + }, + "errorSelector": "dbe6b10e", + "id": 1757, + "name": "BufferSharesInvalidReceiver", + "nameLocation": "16876:27:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1756, + "nodeType": "ParameterList", + "parameters": [], + "src": "16903:2:10" + }, + "src": "16870:36:10" + }, + { + "documentation": { + "id": 1758, + "nodeType": "StructuredDocumentation", + "src": "16914:60:10", + "text": "@notice Buffer shares were burned from the zero address." + }, + "errorSelector": "586d06df", + "id": 1760, + "name": "BufferSharesInvalidOwner", + "nameLocation": "16986:24:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1759, + "nodeType": "ParameterList", + "parameters": [], + "src": "17010:2:10" + }, + "src": "16980:33:10" + }, + { + "documentation": { + "id": 1761, + "nodeType": "StructuredDocumentation", + "src": "17021:176:10", + "text": " @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum" + }, + "errorSelector": "34bdbfaa", + "id": 1765, + "name": "BufferTotalSupplyTooLow", + "nameLocation": "17209:23:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1764, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1763, + "mutability": "mutable", + "name": "totalSupply", + "nameLocation": "17241:11:10", + "nodeType": "VariableDeclaration", + "scope": 1765, + "src": "17233:19:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1762, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17233:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17232:21:10" + }, + "src": "17203:51:10" + }, + { + "documentation": { + "id": 1766, + "nodeType": "StructuredDocumentation", + "src": "17262:97:10", + "text": "@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should." + }, + "errorSelector": "1c6a5375", + "id": 1775, + "name": "NotEnoughUnderlying", + "nameLocation": "17371:19:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1774, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1769, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "17400:12:10", + "nodeType": "VariableDeclaration", + "scope": 1775, + "src": "17391:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1768, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1767, + "name": "IERC4626", + "nameLocations": [ + "17391:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "17391:8:10" + }, + "referencedDeclaration": 3428, + "src": "17391:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1771, + "mutability": "mutable", + "name": "expectedUnderlyingAmount", + "nameLocation": "17422:24:10", + "nodeType": "VariableDeclaration", + "scope": 1775, + "src": "17414:32:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17414:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1773, + "mutability": "mutable", + "name": "actualUnderlyingAmount", + "nameLocation": "17456:22:10", + "nodeType": "VariableDeclaration", + "scope": 1775, + "src": "17448:30:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17448:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17390:89:10" + }, + "src": "17365:115:10" + }, + { + "documentation": { + "id": 1776, + "nodeType": "StructuredDocumentation", + "src": "17488:94:10", + "text": "@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should." + }, + "errorSelector": "1149424d", + "id": 1785, + "name": "NotEnoughWrapped", + "nameLocation": "17594:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1784, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1779, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "17620:12:10", + "nodeType": "VariableDeclaration", + "scope": 1785, + "src": "17611:21:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1778, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1777, + "name": "IERC4626", + "nameLocations": [ + "17611:8:10" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "17611:8:10" + }, + "referencedDeclaration": 3428, + "src": "17611:8:10", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1781, + "mutability": "mutable", + "name": "expectedWrappedAmount", + "nameLocation": "17642:21:10", + "nodeType": "VariableDeclaration", + "scope": 1785, + "src": "17634:29:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1780, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17634:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1783, + "mutability": "mutable", + "name": "actualWrappedAmount", + "nameLocation": "17673:19:10", + "nodeType": "VariableDeclaration", + "scope": 1785, + "src": "17665:27:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1782, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17665:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17610:83:10" + }, + "src": "17588:106:10" + }, + { + "documentation": { + "id": 1786, + "nodeType": "StructuredDocumentation", + "src": "17927:87:10", + "text": "@notice Pool does not support adding / removing liquidity with an unbalanced input." + }, + "errorSelector": "d4f5779c", + "id": 1788, + "name": "DoesNotSupportUnbalancedLiquidity", + "nameLocation": "18026:33:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1787, + "nodeType": "ParameterList", + "parameters": [], + "src": "18059:2:10" + }, + "src": "18020:42:10" + }, + { + "documentation": { + "id": 1789, + "nodeType": "StructuredDocumentation", + "src": "18070:48:10", + "text": "@notice The contract should not receive ETH." + }, + "errorSelector": "f2238896", + "id": 1791, + "name": "CannotReceiveEth", + "nameLocation": "18130:16:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1790, + "nodeType": "ParameterList", + "parameters": [], + "src": "18146:2:10" + }, + "src": "18124:25:10" + }, + { + "documentation": { + "id": 1792, + "nodeType": "StructuredDocumentation", + "src": "18157:159:10", + "text": " @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall." + }, + "errorSelector": "9fd25b36", + "id": 1794, + "name": "NotVaultDelegateCall", + "nameLocation": "18328:20:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1793, + "nodeType": "ParameterList", + "parameters": [], + "src": "18348:2:10" + }, + "src": "18322:29:10" + }, + { + "documentation": { + "id": 1795, + "nodeType": "StructuredDocumentation", + "src": "18359:89:10", + "text": "@notice The `VaultExtension` contract was configured with an incorrect Vault address." + }, + "errorSelector": "1ab9d9d0", + "id": 1797, + "name": "WrongVaultExtensionDeployment", + "nameLocation": "18460:29:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1796, + "nodeType": "ParameterList", + "parameters": [], + "src": "18489:2:10" + }, + "src": "18454:38:10" + }, + { + "documentation": { + "id": 1798, + "nodeType": "StructuredDocumentation", + "src": "18500:96:10", + "text": "@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address." + }, + "errorSelector": "1bbe95c7", + "id": 1800, + "name": "WrongProtocolFeeControllerDeployment", + "nameLocation": "18608:36:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1799, + "nodeType": "ParameterList", + "parameters": [], + "src": "18644:2:10" + }, + "src": "18602:45:10" + }, + { + "documentation": { + "id": 1801, + "nodeType": "StructuredDocumentation", + "src": "18655:85:10", + "text": "@notice The `VaultAdmin` contract was configured with an incorrect Vault address." + }, + "errorSelector": "82cc28b6", + "id": 1803, + "name": "WrongVaultAdminDeployment", + "nameLocation": "18752:25:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1802, + "nodeType": "ParameterList", + "parameters": [], + "src": "18777:2:10" + }, + "src": "18746:34:10" + }, + { + "documentation": { + "id": 1804, + "nodeType": "StructuredDocumentation", + "src": "18788:54:10", + "text": "@notice Quote reverted with a reserved error code." + }, + "errorSelector": "28f95541", + "id": 1806, + "name": "QuoteResultSpoofed", + "nameLocation": "18854:18:10", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 1805, + "nodeType": "ParameterList", + "parameters": [], + "src": "18872:2:10" + }, + "src": "18848:27:10" + } + ], + "scope": 1808, + "src": "454:18424:10", + "usedErrors": [ + 1465, + 1470, + 1475, + 1480, + 1489, + 1495, + 1498, + 1501, + 1504, + 1507, + 1510, + 1519, + 1522, + 1525, + 1528, + 1531, + 1534, + 1537, + 1540, + 1543, + 1546, + 1549, + 1552, + 1555, + 1558, + 1561, + 1567, + 1574, + 1581, + 1584, + 1587, + 1597, + 1607, + 1614, + 1617, + 1620, + 1623, + 1633, + 1643, + 1650, + 1653, + 1656, + 1659, + 1662, + 1665, + 1668, + 1671, + 1676, + 1681, + 1686, + 1689, + 1692, + 1695, + 1698, + 1701, + 1706, + 1711, + 1716, + 1722, + 1728, + 1731, + 1739, + 1745, + 1751, + 1754, + 1757, + 1760, + 1765, + 1775, + 1785, + 1788, + 1791, + 1794, + 1797, + 1800, + 1803, + 1806 + ], + "usedEvents": [] + } + ], + "src": "48:18832:10" + }, + "id": 10 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AddLiquidityParams": [ + 2768 + ], + "AfterSwapParams": [ + 2746 + ], + "BufferWrapOrUnwrapParams": [ + 2809 + ], + "FEE_BITLENGTH": [ + 2812 + ], + "FEE_SCALING_FACTOR": [ + 2818 + ], + "HookFlags": [ + 2572 + ], + "HooksConfig": [ + 2596 + ], + "IAuthorizer": [ + 525 + ], + "IERC20": [ + 3506 + ], + "IERC4626": [ + 3428 + ], + "IHooks": [ + 772 + ], + "IProtocolFeeController": [ + 1048 + ], + "IRateProvider": [ + 509 + ], + "IVaultEvents": [ + 1995 + ], + "LiquidityManagement": [ + 2525 + ], + "MAX_FEE_PERCENTAGE": [ + 2815 + ], + "PoolConfig": [ + 2550 + ], + "PoolConfigBits": [ + 2527 + ], + "PoolData": [ + 2674 + ], + "PoolRoleAccounts": [ + 2622 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "RemoveLiquidityParams": [ + 2789 + ], + "Rounding": [ + 2677 + ], + "SwapKind": [ + 2680 + ], + "SwapState": [ + 2606 + ], + "TokenConfig": [ + 2639 + ], + "TokenInfo": [ + 2649 + ], + "TokenType": [ + 2626 + ], + "VaultState": [ + 2614 + ], + "VaultSwapParams": [ + 2699 + ], + "WrappingDirection": [ + 2792 + ] + }, + "id": 1996, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1809, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:11" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 1811, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 3507, + "src": "76:137:11", + "symbolAliases": [ + { + "foreign": { + "id": 1810, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "id": 1813, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 3429, + "src": "215:140:11", + "symbolAliases": [ + { + "foreign": { + "id": 1812, + "name": "IERC4626", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3428, + "src": "224:8:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1815, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 526, + "src": "359:48:11", + "symbolAliases": [ + { + "foreign": { + "id": 1814, + "name": "IAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 525, + "src": "368:11:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "file": "./IHooks.sol", + "id": 1817, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 773, + "src": "409:38:11", + "symbolAliases": [ + { + "foreign": { + "id": 1816, + "name": "IHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 772, + "src": "418:6:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol", + "file": "./IProtocolFeeController.sol", + "id": 1819, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 1049, + "src": "449:70:11", + "symbolAliases": [ + { + "foreign": { + "id": 1818, + "name": "IProtocolFeeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "458:22:11", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "./VaultTypes.sol", + "id": 1820, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 1996, + "sourceUnit": 2819, + "src": "521:26:11", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IVaultEvents", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1821, + "nodeType": "StructuredDocumentation", + "src": "551:92:11", + "text": "@dev Events are declared inside an interface (namespace) to improve DX with Typechain." + }, + "fullyImplemented": true, + "id": 1995, + "linearizedBaseContracts": [ + 1995 + ], + "name": "IVaultEvents", + "nameLocation": "653:12:11", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 1822, + "nodeType": "StructuredDocumentation", + "src": "673:667:11", + "text": " @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags" + }, + "eventSelector": "bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad", + "id": 1845, + "name": "PoolRegistered", + "nameLocation": "1352:14:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1844, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1824, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1393:4:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1377:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1823, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1377:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1826, + "indexed": true, + "mutability": "mutable", + "name": "factory", + "nameLocation": "1424:7:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1408:23:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1825, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1408:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1830, + "indexed": false, + "mutability": "mutable", + "name": "tokenConfig", + "nameLocation": "1456:11:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1442:25:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 1828, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1827, + "name": "TokenConfig", + "nameLocations": [ + "1442:11:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "1442:11:11" + }, + "referencedDeclaration": 2639, + "src": "1442:11:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 1829, + "nodeType": "ArrayTypeName", + "src": "1442:13:11", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1832, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "1486:17:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1478:25:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1831, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1478:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1834, + "indexed": false, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nameLocation": "1521:18:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1514:25:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 1833, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1514:6:11", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1837, + "indexed": false, + "mutability": "mutable", + "name": "roleAccounts", + "nameLocation": "1567:12:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1550:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_memory_ptr", + "typeString": "struct PoolRoleAccounts" + }, + "typeName": { + "id": 1836, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1835, + "name": "PoolRoleAccounts", + "nameLocations": [ + "1550:16:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2622, + "src": "1550:16:11" + }, + "referencedDeclaration": 2622, + "src": "1550:16:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_storage_ptr", + "typeString": "struct PoolRoleAccounts" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1840, + "indexed": false, + "mutability": "mutable", + "name": "hooksConfig", + "nameLocation": "1602:11:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1590:23:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HooksConfig_$2596_memory_ptr", + "typeString": "struct HooksConfig" + }, + "typeName": { + "id": 1839, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1838, + "name": "HooksConfig", + "nameLocations": [ + "1590:11:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2596, + "src": "1590:11:11" + }, + "referencedDeclaration": 2596, + "src": "1590:11:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HooksConfig_$2596_storage_ptr", + "typeString": "struct HooksConfig" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1843, + "indexed": false, + "mutability": "mutable", + "name": "liquidityManagement", + "nameLocation": "1644:19:11", + "nodeType": "VariableDeclaration", + "scope": 1845, + "src": "1624:39:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_memory_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 1842, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1841, + "name": "LiquidityManagement", + "nameLocations": [ + "1624:19:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "1624:19:11" + }, + "referencedDeclaration": 2525, + "src": "1624:19:11", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "1366:304:11" + }, + "src": "1346:325:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1846, + "nodeType": "StructuredDocumentation", + "src": "1679:123:11", + "text": " @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized" + }, + "eventSelector": "cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3", + "id": 1850, + "name": "PoolInitialized", + "nameLocation": "1814:15:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1849, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1848, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "1846:4:11", + "nodeType": "VariableDeclaration", + "scope": 1850, + "src": "1830:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1847, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1830:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1829:22:11" + }, + "src": "1808:44:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1851, + "nodeType": "StructuredDocumentation", + "src": "1860:546:11", + "text": " @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid\n @param swapFeeToken Token the swap fee was paid in" + }, + "eventSelector": "1efd50759fcb888bf7046651f2598bfab23901342cea7244040f26f71729d7d3", + "id": 1872, + "name": "Swap", + "nameLocation": "2418:4:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1871, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1853, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "2449:4:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2433:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1852, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2433:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1856, + "indexed": true, + "mutability": "mutable", + "name": "tokenIn", + "nameLocation": "2479:7:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2464:22:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1855, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1854, + "name": "IERC20", + "nameLocations": [ + "2464:6:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2464:6:11" + }, + "referencedDeclaration": 3506, + "src": "2464:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1859, + "indexed": true, + "mutability": "mutable", + "name": "tokenOut", + "nameLocation": "2512:8:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2497:23:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1858, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1857, + "name": "IERC20", + "nameLocations": [ + "2497:6:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2497:6:11" + }, + "referencedDeclaration": 3506, + "src": "2497:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1861, + "indexed": false, + "mutability": "mutable", + "name": "amountIn", + "nameLocation": "2539:8:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2531:16:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1860, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2531:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1863, + "indexed": false, + "mutability": "mutable", + "name": "amountOut", + "nameLocation": "2566:9:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2558:17:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1862, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2558:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1865, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "2594:17:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2586:25:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1864, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2586:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1867, + "indexed": false, + "mutability": "mutable", + "name": "swapFeeAmount", + "nameLocation": "2630:13:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2622:21:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1866, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2622:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1870, + "indexed": false, + "mutability": "mutable", + "name": "swapFeeToken", + "nameLocation": "2661:12:11", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "2654:19:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1869, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1868, + "name": "IERC20", + "nameLocations": [ + "2654:6:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2654:6:11" + }, + "referencedDeclaration": 3506, + "src": "2654:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2422:258:11" + }, + "src": "2412:269:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1873, + "nodeType": "StructuredDocumentation", + "src": "2689:315:11", + "text": " @notice A wrap operation has occurred.\n @param underlyingToken The underlying token address\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted" + }, + "eventSelector": "764bd851d2423ff95fbc9b4db718c64299b808c0948fa9eec41c3b30001aea5e", + "id": 1885, + "name": "Wrap", + "nameLocation": "3016:4:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1884, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1876, + "indexed": true, + "mutability": "mutable", + "name": "underlyingToken", + "nameLocation": "3046:15:11", + "nodeType": "VariableDeclaration", + "scope": 1885, + "src": "3031:30:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1875, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1874, + "name": "IERC20", + "nameLocations": [ + "3031:6:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3031:6:11" + }, + "referencedDeclaration": 3506, + "src": "3031:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1879, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "3089:12:11", + "nodeType": "VariableDeclaration", + "scope": 1885, + "src": "3072:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1878, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1877, + "name": "IERC4626", + "nameLocations": [ + "3072:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "3072:8:11" + }, + "referencedDeclaration": 3428, + "src": "3072:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1881, + "indexed": false, + "mutability": "mutable", + "name": "depositedUnderlying", + "nameLocation": "3120:19:11", + "nodeType": "VariableDeclaration", + "scope": 1885, + "src": "3112:27:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1880, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3112:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1883, + "indexed": false, + "mutability": "mutable", + "name": "mintedShares", + "nameLocation": "3158:12:11", + "nodeType": "VariableDeclaration", + "scope": 1885, + "src": "3150:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1882, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3150:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3020:157:11" + }, + "src": "3010:168:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1886, + "nodeType": "StructuredDocumentation", + "src": "3186:318:11", + "text": " @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param underlyingToken The underlying token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn" + }, + "eventSelector": "844bdb9a38d1fd821344dfafdefc02959dbbcddd8e8f158cdebb56b561cb6702", + "id": 1898, + "name": "Unwrap", + "nameLocation": "3516:6:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1897, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1889, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "3550:12:11", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "3533:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1888, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1887, + "name": "IERC4626", + "nameLocations": [ + "3533:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "3533:8:11" + }, + "referencedDeclaration": 3428, + "src": "3533:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1892, + "indexed": true, + "mutability": "mutable", + "name": "underlyingToken", + "nameLocation": "3588:15:11", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "3573:30:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1891, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1890, + "name": "IERC20", + "nameLocations": [ + "3573:6:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3573:6:11" + }, + "referencedDeclaration": 3506, + "src": "3573:6:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1894, + "indexed": false, + "mutability": "mutable", + "name": "burnedShares", + "nameLocation": "3622:12:11", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "3614:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1893, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3614:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1896, + "indexed": false, + "mutability": "mutable", + "name": "withdrawnUnderlying", + "nameLocation": "3653:19:11", + "nodeType": "VariableDeclaration", + "scope": 1898, + "src": "3645:27:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1895, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3645:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3522:157:11" + }, + "src": "3510:170:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1899, + "nodeType": "StructuredDocumentation", + "src": "3688:306:11", + "text": " @notice Pool balances have changed (e.g., after initialization, add/remove liquidity).\n @param pool The pool being registered\n @param liquidityProvider The user performing the operation\n @param deltas The amount each token changed, sorted in the pool tokens' order" + }, + "eventSelector": "0d82cd00e63fe9bc4a4369e9e774a3d415ef739752dcc31e14616d40df074be3", + "id": 1908, + "name": "PoolBalanceChanged", + "nameLocation": "4006:18:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1907, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1901, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4041:4:11", + "nodeType": "VariableDeclaration", + "scope": 1908, + "src": "4025:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1900, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4025:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1903, + "indexed": true, + "mutability": "mutable", + "name": "liquidityProvider", + "nameLocation": "4063:17:11", + "nodeType": "VariableDeclaration", + "scope": 1908, + "src": "4047:33:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1902, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4047:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1906, + "indexed": false, + "mutability": "mutable", + "name": "deltas", + "nameLocation": "4091:6:11", + "nodeType": "VariableDeclaration", + "scope": 1908, + "src": "4082:15:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 1904, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4082:6:11", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1905, + "nodeType": "ArrayTypeName", + "src": "4082:8:11", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4024:74:11" + }, + "src": "4000:99:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1909, + "nodeType": "StructuredDocumentation", + "src": "4107:117:11", + "text": " @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused" + }, + "eventSelector": "e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02", + "id": 1913, + "name": "VaultPausedStateChanged", + "nameLocation": "4236:23:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1912, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1911, + "indexed": false, + "mutability": "mutable", + "name": "paused", + "nameLocation": "4265:6:11", + "nodeType": "VariableDeclaration", + "scope": 1913, + "src": "4260:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1910, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4260:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4259:13:11" + }, + "src": "4230:43:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1914, + "nodeType": "StructuredDocumentation", + "src": "4281:99:11", + "text": "@notice `disableQuery` has been called on the Vault, permanently disabling query functionality." + }, + "eventSelector": "bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625", + "id": 1916, + "name": "VaultQueriesDisabled", + "nameLocation": "4392:20:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1915, + "nodeType": "ParameterList", + "parameters": [], + "src": "4412:2:11" + }, + "src": "4386:29:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1917, + "nodeType": "StructuredDocumentation", + "src": "4423:175:11", + "text": " @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused" + }, + "eventSelector": "57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7", + "id": 1923, + "name": "PoolPausedStateChanged", + "nameLocation": "4610:22:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1922, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1919, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4649:4:11", + "nodeType": "VariableDeclaration", + "scope": 1923, + "src": "4633:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1918, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4633:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1921, + "indexed": false, + "mutability": "mutable", + "name": "paused", + "nameLocation": "4660:6:11", + "nodeType": "VariableDeclaration", + "scope": 1923, + "src": "4655:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1920, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4655:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4632:35:11" + }, + "src": "4604:64:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1924, + "nodeType": "StructuredDocumentation", + "src": "4676:161:11", + "text": " @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool" + }, + "eventSelector": "89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1", + "id": 1930, + "name": "SwapFeePercentageChanged", + "nameLocation": "4849:24:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1929, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1926, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4890:4:11", + "nodeType": "VariableDeclaration", + "scope": 1930, + "src": "4874:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1925, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4874:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1928, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "4904:17:11", + "nodeType": "VariableDeclaration", + "scope": 1930, + "src": "4896:25:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1927, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4896:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4873:49:11" + }, + "src": "4843:80:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1931, + "nodeType": "StructuredDocumentation", + "src": "4931:174:11", + "text": " @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled" + }, + "eventSelector": "c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9", + "id": 1937, + "name": "PoolRecoveryModeStateChanged", + "nameLocation": "5117:28:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1936, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1933, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5162:4:11", + "nodeType": "VariableDeclaration", + "scope": 1937, + "src": "5146:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1932, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5146:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1935, + "indexed": false, + "mutability": "mutable", + "name": "recoveryMode", + "nameLocation": "5173:12:11", + "nodeType": "VariableDeclaration", + "scope": 1937, + "src": "5168:17:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1934, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5168:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5145:41:11" + }, + "src": "5111:76:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1938, + "nodeType": "StructuredDocumentation", + "src": "5195:135:11", + "text": " @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer" + }, + "eventSelector": "94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef", + "id": 1943, + "name": "AuthorizerChanged", + "nameLocation": "5342:17:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1942, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1941, + "indexed": true, + "mutability": "mutable", + "name": "newAuthorizer", + "nameLocation": "5380:13:11", + "nodeType": "VariableDeclaration", + "scope": 1943, + "src": "5360:33:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1940, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1939, + "name": "IAuthorizer", + "nameLocations": [ + "5360:11:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 525, + "src": "5360:11:11" + }, + "referencedDeclaration": 525, + "src": "5360:11:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "5359:35:11" + }, + "src": "5336:59:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1944, + "nodeType": "StructuredDocumentation", + "src": "5403:183:11", + "text": " @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller" + }, + "eventSelector": "280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0", + "id": 1949, + "name": "ProtocolFeeControllerChanged", + "nameLocation": "5598:28:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1948, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1947, + "indexed": true, + "mutability": "mutable", + "name": "newProtocolFeeController", + "nameLocation": "5658:24:11", + "nodeType": "VariableDeclaration", + "scope": 1949, + "src": "5627:55:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + }, + "typeName": { + "id": 1946, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1945, + "name": "IProtocolFeeController", + "nameLocations": [ + "5627:22:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1048, + "src": "5627:22:11" + }, + "referencedDeclaration": 1048, + "src": "5627:22:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + } + }, + "visibility": "internal" + } + ], + "src": "5626:57:11" + }, + "src": "5592:92:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1950, + "nodeType": "StructuredDocumentation", + "src": "5692:458:11", + "text": " @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited" + }, + "eventSelector": "ef0c05c59bfc8e2d9c16cf4a50f0b316a07e272fb5e7f23e43e6cd25c7fe1317", + "id": 1959, + "name": "LiquidityAddedToBuffer", + "nameLocation": "6162:22:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1958, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1953, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "6202:12:11", + "nodeType": "VariableDeclaration", + "scope": 1959, + "src": "6185:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1952, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1951, + "name": "IERC4626", + "nameLocations": [ + "6185:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "6185:8:11" + }, + "referencedDeclaration": 3428, + "src": "6185:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1955, + "indexed": false, + "mutability": "mutable", + "name": "amountUnderlying", + "nameLocation": "6224:16:11", + "nodeType": "VariableDeclaration", + "scope": 1959, + "src": "6216:24:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6216:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1957, + "indexed": false, + "mutability": "mutable", + "name": "amountWrapped", + "nameLocation": "6250:13:11", + "nodeType": "VariableDeclaration", + "scope": 1959, + "src": "6242:21:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1956, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6242:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6184:80:11" + }, + "src": "6156:109:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1960, + "nodeType": "StructuredDocumentation", + "src": "6273:579:11", + "text": " @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created" + }, + "eventSelector": "d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34", + "id": 1969, + "name": "BufferSharesMinted", + "nameLocation": "6864:18:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1968, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1963, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "6900:12:11", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "6883:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1962, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1961, + "name": "IERC4626", + "nameLocations": [ + "6883:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "6883:8:11" + }, + "referencedDeclaration": 3428, + "src": "6883:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1965, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nameLocation": "6930:2:11", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "6914:18:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1964, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6914:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1967, + "indexed": false, + "mutability": "mutable", + "name": "issuedShares", + "nameLocation": "6942:12:11", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "6934:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1966, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6934:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6882:73:11" + }, + "src": "6858:98:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1970, + "nodeType": "StructuredDocumentation", + "src": "6964:580:11", + "text": " @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned" + }, + "eventSelector": "4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b", + "id": 1979, + "name": "BufferSharesBurned", + "nameLocation": "7556:18:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1978, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1973, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "7592:12:11", + "nodeType": "VariableDeclaration", + "scope": 1979, + "src": "7575:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1972, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1971, + "name": "IERC4626", + "nameLocations": [ + "7575:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "7575:8:11" + }, + "referencedDeclaration": 3428, + "src": "7575:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1975, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nameLocation": "7622:4:11", + "nodeType": "VariableDeclaration", + "scope": 1979, + "src": "7606:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1974, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7606:7:11", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1977, + "indexed": false, + "mutability": "mutable", + "name": "burnedShares", + "nameLocation": "7636:12:11", + "nodeType": "VariableDeclaration", + "scope": 1979, + "src": "7628:20:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1976, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7628:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7574:75:11" + }, + "src": "7550:100:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1980, + "nodeType": "StructuredDocumentation", + "src": "7658:421:11", + "text": " @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn" + }, + "eventSelector": "072703282edd253eef65be9f8b821186ce1c8a21841116dd8e9f315c000e4602", + "id": 1989, + "name": "LiquidityRemovedFromBuffer", + "nameLocation": "8091:26:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1983, + "indexed": true, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "8135:12:11", + "nodeType": "VariableDeclaration", + "scope": 1989, + "src": "8118:29:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 1982, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 1981, + "name": "IERC4626", + "nameLocations": [ + "8118:8:11" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "8118:8:11" + }, + "referencedDeclaration": 3428, + "src": "8118:8:11", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1985, + "indexed": false, + "mutability": "mutable", + "name": "amountUnderlying", + "nameLocation": "8157:16:11", + "nodeType": "VariableDeclaration", + "scope": 1989, + "src": "8149:24:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1984, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8149:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1987, + "indexed": false, + "mutability": "mutable", + "name": "amountWrapped", + "nameLocation": "8183:13:11", + "nodeType": "VariableDeclaration", + "scope": 1989, + "src": "8175:21:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8175:7:11", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8117:80:11" + }, + "src": "8085:113:11" + }, + { + "anonymous": false, + "documentation": { + "id": 1990, + "nodeType": "StructuredDocumentation", + "src": "8206:284:11", + "text": " @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused" + }, + "eventSelector": "300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5", + "id": 1994, + "name": "VaultBuffersPausedStateChanged", + "nameLocation": "8502:30:11", + "nodeType": "EventDefinition", + "parameters": { + "id": 1993, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1992, + "indexed": false, + "mutability": "mutable", + "name": "paused", + "nameLocation": "8538:6:11", + "nodeType": "VariableDeclaration", + "scope": 1994, + "src": "8533:11:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1991, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8533:4:11", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8532:13:11" + }, + "src": "8496:50:11" + } + ], + "scope": 1996, + "src": "643:7906:11", + "usedErrors": [], + "usedEvents": [ + 1845, + 1850, + 1872, + 1885, + 1898, + 1908, + 1913, + 1916, + 1923, + 1930, + 1937, + 1943, + 1949, + 1959, + 1969, + 1979, + 1989, + 1994 + ] + } + ], + "src": "48:8503:11" + }, + "id": 11 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AddLiquidityParams": [ + 2768 + ], + "AfterSwapParams": [ + 2746 + ], + "BufferWrapOrUnwrapParams": [ + 2809 + ], + "FEE_BITLENGTH": [ + 2812 + ], + "FEE_SCALING_FACTOR": [ + 2818 + ], + "HookFlags": [ + 2572 + ], + "HooksConfig": [ + 2596 + ], + "IERC20": [ + 3506 + ], + "IERC4626": [ + 3428 + ], + "IHooks": [ + 772 + ], + "IProtocolFeeController": [ + 1048 + ], + "IRateProvider": [ + 509 + ], + "IVault": [ + 1181 + ], + "IVaultExtension": [ + 2388 + ], + "LiquidityManagement": [ + 2525 + ], + "MAX_FEE_PERCENTAGE": [ + 2815 + ], + "PoolConfig": [ + 2550 + ], + "PoolConfigBits": [ + 2527 + ], + "PoolData": [ + 2674 + ], + "PoolRoleAccounts": [ + 2622 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "RemoveLiquidityParams": [ + 2789 + ], + "Rounding": [ + 2677 + ], + "SwapKind": [ + 2680 + ], + "SwapState": [ + 2606 + ], + "TokenConfig": [ + 2639 + ], + "TokenInfo": [ + 2649 + ], + "TokenType": [ + 2626 + ], + "VaultState": [ + 2614 + ], + "VaultSwapParams": [ + 2699 + ], + "WrappingDirection": [ + 2792 + ] + }, + "id": 2389, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1997, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:12" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 1999, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 3507, + "src": "76:137:12", + "symbolAliases": [ + { + "foreign": { + "id": 1998, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "id": 2001, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 3429, + "src": "215:140:12", + "symbolAliases": [ + { + "foreign": { + "id": 2000, + "name": "IERC4626", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3428, + "src": "224:8:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 2003, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 1182, + "src": "359:38:12", + "symbolAliases": [ + { + "foreign": { + "id": 2002, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "368:6:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "file": "./IHooks.sol", + "id": 2005, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 773, + "src": "399:38:12", + "symbolAliases": [ + { + "foreign": { + "id": 2004, + "name": "IHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 772, + "src": "408:6:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol", + "file": "./IProtocolFeeController.sol", + "id": 2007, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 1049, + "src": "439:70:12", + "symbolAliases": [ + { + "foreign": { + "id": 2006, + "name": "IProtocolFeeController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "448:22:12", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "./VaultTypes.sol", + "id": 2008, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2389, + "sourceUnit": 2819, + "src": "511:26:12", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IVaultExtension", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2009, + "nodeType": "StructuredDocumentation", + "src": "541:323:12", + "text": " @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations." + }, + "fullyImplemented": false, + "id": 2388, + "linearizedBaseContracts": [ + 2388 + ], + "name": "IVaultExtension", + "nameLocation": "876:15:12", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 2010, + "nodeType": "StructuredDocumentation", + "src": "1129:210:12", + "text": " @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault" + }, + "functionSelector": "fbfa77cf", + "id": 2016, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nameLocation": "1354:5:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2011, + "nodeType": "ParameterList", + "parameters": [], + "src": "1359:2:12" + }, + "returnParameters": { + "id": 2015, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2014, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2016, + "src": "1385:6:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2013, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2012, + "name": "IVault", + "nameLocations": [ + "1385:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "1385:6:12" + }, + "referencedDeclaration": 1181, + "src": "1385:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1384:8:12" + }, + "scope": 2388, + "src": "1345:48:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2017, + "nodeType": "StructuredDocumentation", + "src": "1401:206:12", + "text": " @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin" + }, + "functionSelector": "1ba0ae45", + "id": 2022, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVaultAdmin", + "nameLocation": "1622:13:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2018, + "nodeType": "ParameterList", + "parameters": [], + "src": "1635:2:12" + }, + "returnParameters": { + "id": 2021, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2020, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2022, + "src": "1661:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2019, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1661:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1660:9:12" + }, + "scope": 2388, + "src": "1613:57:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2023, + "nodeType": "StructuredDocumentation", + "src": "1904:258:12", + "text": " @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise" + }, + "functionSelector": "8380edb7", + "id": 2028, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isUnlocked", + "nameLocation": "2177:10:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2024, + "nodeType": "ParameterList", + "parameters": [], + "src": "2187:2:12" + }, + "returnParameters": { + "id": 2027, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2026, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2028, + "src": "2213:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2025, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2213:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2212:6:12" + }, + "scope": 2388, + "src": "2168:51:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2029, + "nodeType": "StructuredDocumentation", + "src": "2227:144:12", + "text": " @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`" + }, + "functionSelector": "db817187", + "id": 2034, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getNonzeroDeltaCount", + "nameLocation": "2386:20:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2030, + "nodeType": "ParameterList", + "parameters": [], + "src": "2406:2:12" + }, + "returnParameters": { + "id": 2033, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2032, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2034, + "src": "2432:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2031, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2432:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2431:9:12" + }, + "scope": 2388, + "src": "2377:64:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2035, + "nodeType": "StructuredDocumentation", + "src": "2449:289:12", + "text": " @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token" + }, + "functionSelector": "9e825ff5", + "id": 2043, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getTokenDelta", + "nameLocation": "2753:13:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2039, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2038, + "mutability": "mutable", + "name": "token", + "nameLocation": "2774:5:12", + "nodeType": "VariableDeclaration", + "scope": 2043, + "src": "2767:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2037, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2036, + "name": "IERC20", + "nameLocations": [ + "2767:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2767:6:12" + }, + "referencedDeclaration": 3506, + "src": "2767:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2766:14:12" + }, + "returnParameters": { + "id": 2042, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2041, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2043, + "src": "2804:6:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2040, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2804:6:12", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "2803:8:12" + }, + "scope": 2388, + "src": "2744:68:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2044, + "nodeType": "StructuredDocumentation", + "src": "2820:234:12", + "text": " @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token" + }, + "functionSelector": "96787092", + "id": 2052, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getReservesOf", + "nameLocation": "3069:13:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2048, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2047, + "mutability": "mutable", + "name": "token", + "nameLocation": "3090:5:12", + "nodeType": "VariableDeclaration", + "scope": 2052, + "src": "3083:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2046, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2045, + "name": "IERC20", + "nameLocations": [ + "3083:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3083:6:12" + }, + "referencedDeclaration": 3506, + "src": "3083:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "3082:14:12" + }, + "returnParameters": { + "id": 2051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2050, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2052, + "src": "3120:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2049, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3120:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3119:9:12" + }, + "scope": 2388, + "src": "3060:69:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2053, + "nodeType": "StructuredDocumentation", + "src": "3366:1593:12", + "text": " @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods" + }, + "functionSelector": "eeec802f", + "id": 2076, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerPool", + "nameLocation": "4974:12:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2055, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5005:4:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "4997:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2054, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4997:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2059, + "mutability": "mutable", + "name": "tokenConfig", + "nameLocation": "5041:11:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5020:32:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 2057, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2056, + "name": "TokenConfig", + "nameLocations": [ + "5020:11:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "5020:11:12" + }, + "referencedDeclaration": 2639, + "src": "5020:11:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 2058, + "nodeType": "ArrayTypeName", + "src": "5020:13:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2061, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "5071:17:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5063:25:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5063:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2063, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nameLocation": "5106:18:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5099:25:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2062, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "5099:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2065, + "mutability": "mutable", + "name": "protocolFeeExempt", + "nameLocation": "5140:17:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5135:22:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2064, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5135:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2068, + "mutability": "mutable", + "name": "roleAccounts", + "nameLocation": "5194:12:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5168:38:12", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_calldata_ptr", + "typeString": "struct PoolRoleAccounts" + }, + "typeName": { + "id": 2067, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2066, + "name": "PoolRoleAccounts", + "nameLocations": [ + "5168:16:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2622, + "src": "5168:16:12" + }, + "referencedDeclaration": 2622, + "src": "5168:16:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_storage_ptr", + "typeString": "struct PoolRoleAccounts" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2070, + "mutability": "mutable", + "name": "poolHooksContract", + "nameLocation": "5225:17:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5217:25:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2069, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5217:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2073, + "mutability": "mutable", + "name": "liquidityManagement", + "nameLocation": "5282:19:12", + "nodeType": "VariableDeclaration", + "scope": 2076, + "src": "5253:48:12", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_calldata_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 2072, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2071, + "name": "LiquidityManagement", + "nameLocations": [ + "5253:19:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "5253:19:12" + }, + "referencedDeclaration": 2525, + "src": "5253:19:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "4986:322:12" + }, + "returnParameters": { + "id": 2075, + "nodeType": "ParameterList", + "parameters": [], + "src": "5317:0:12" + }, + "scope": 2388, + "src": "4965:353:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2077, + "nodeType": "StructuredDocumentation", + "src": "5326:189:12", + "text": " @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise" + }, + "functionSelector": "c673bdaf", + "id": 2084, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolRegistered", + "nameLocation": "5530:16:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2079, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5555:4:12", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "5547:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2078, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5547:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5546:14:12" + }, + "returnParameters": { + "id": 2083, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2082, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2084, + "src": "5584:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2081, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5584:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5583:6:12" + }, + "scope": 2388, + "src": "5521:69:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2085, + "nodeType": "StructuredDocumentation", + "src": "5598:598:12", + "text": " @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount" + }, + "functionSelector": "ba8a2be0", + "id": 2105, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "initialize", + "nameLocation": "6211:10:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2101, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2087, + "mutability": "mutable", + "name": "pool", + "nameLocation": "6240:4:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6232:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2086, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6232:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2089, + "mutability": "mutable", + "name": "to", + "nameLocation": "6263:2:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6255:10:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2088, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6255:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2093, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6292:6:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6276:22:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2091, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2090, + "name": "IERC20", + "nameLocations": [ + "6276:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6276:6:12" + }, + "referencedDeclaration": 3506, + "src": "6276:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 2092, + "nodeType": "ArrayTypeName", + "src": "6276:8:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2096, + "mutability": "mutable", + "name": "exactAmountsIn", + "nameLocation": "6326:14:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6309:31:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2094, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6309:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2095, + "nodeType": "ArrayTypeName", + "src": "6309:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2098, + "mutability": "mutable", + "name": "minBptAmountOut", + "nameLocation": "6359:15:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6351:23:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6351:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2100, + "mutability": "mutable", + "name": "userData", + "nameLocation": "6398:8:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6385:21:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2099, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6385:5:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6221:192:12" + }, + "returnParameters": { + "id": 2104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2103, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "6440:12:12", + "nodeType": "VariableDeclaration", + "scope": 2105, + "src": "6432:20:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6432:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6431:22:12" + }, + "scope": 2388, + "src": "6202:252:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2106, + "nodeType": "StructuredDocumentation", + "src": "6690:263:12", + "text": " @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise" + }, + "functionSelector": "532cec7c", + "id": 2113, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolInitialized", + "nameLocation": "6968:17:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2108, + "mutability": "mutable", + "name": "pool", + "nameLocation": "6994:4:12", + "nodeType": "VariableDeclaration", + "scope": 2113, + "src": "6986:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2107, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6986:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6985:14:12" + }, + "returnParameters": { + "id": 2112, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2111, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2113, + "src": "7023:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2110, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7023:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7022:6:12" + }, + "scope": 2388, + "src": "6959:70:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2114, + "nodeType": "StructuredDocumentation", + "src": "7037:156:12", + "text": " @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool" + }, + "functionSelector": "ca4f2803", + "id": 2123, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokens", + "nameLocation": "7208:13:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2117, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2116, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7230:4:12", + "nodeType": "VariableDeclaration", + "scope": 2123, + "src": "7222:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2115, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7222:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7221:14:12" + }, + "returnParameters": { + "id": 2122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2121, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2123, + "src": "7259:15:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2119, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2118, + "name": "IERC20", + "nameLocations": [ + "7259:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "7259:6:12" + }, + "referencedDeclaration": 3506, + "src": "7259:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 2120, + "nodeType": "ArrayTypeName", + "src": "7259:8:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "7258:17:12" + }, + "scope": 2388, + "src": "7199:77:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2124, + "nodeType": "StructuredDocumentation", + "src": "7284:521:12", + "text": " @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens" + }, + "functionSelector": "7e361bde", + "id": 2135, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokenRates", + "nameLocation": "7820:17:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2127, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2126, + "mutability": "mutable", + "name": "pool", + "nameLocation": "7856:4:12", + "nodeType": "VariableDeclaration", + "scope": 2135, + "src": "7848:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2125, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7848:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7837:30:12" + }, + "returnParameters": { + "id": 2134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2130, + "mutability": "mutable", + "name": "decimalScalingFactors", + "nameLocation": "7908:21:12", + "nodeType": "VariableDeclaration", + "scope": 2135, + "src": "7891:38:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7891:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2129, + "nodeType": "ArrayTypeName", + "src": "7891:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2133, + "mutability": "mutable", + "name": "tokenRates", + "nameLocation": "7948:10:12", + "nodeType": "VariableDeclaration", + "scope": 2135, + "src": "7931:27:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7931:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2132, + "nodeType": "ArrayTypeName", + "src": "7931:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "7890:69:12" + }, + "scope": 2388, + "src": "7811:149:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2136, + "nodeType": "StructuredDocumentation", + "src": "7968:292:12", + "text": " @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result" + }, + "functionSelector": "13d21cdf", + "id": 2144, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolData", + "nameLocation": "8275:11:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2139, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2138, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8295:4:12", + "nodeType": "VariableDeclaration", + "scope": 2144, + "src": "8287:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8287:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8286:14:12" + }, + "returnParameters": { + "id": 2143, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2142, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2144, + "src": "8324:15:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolData_$2674_memory_ptr", + "typeString": "struct PoolData" + }, + "typeName": { + "id": 2141, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2140, + "name": "PoolData", + "nameLocations": [ + "8324:8:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2674, + "src": "8324:8:12" + }, + "referencedDeclaration": 2674, + "src": "8324:8:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolData_$2674_storage_ptr", + "typeString": "struct PoolData" + } + }, + "visibility": "internal" + } + ], + "src": "8323:17:12" + }, + "scope": 2388, + "src": "8266:75:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2145, + "nodeType": "StructuredDocumentation", + "src": "8349:536:12", + "text": " @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in pool registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in pool registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order" + }, + "functionSelector": "67e0e076", + "id": 2164, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokenInfo", + "nameLocation": "8900:16:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2148, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2147, + "mutability": "mutable", + "name": "pool", + "nameLocation": "8935:4:12", + "nodeType": "VariableDeclaration", + "scope": 2164, + "src": "8927:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2146, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8927:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8916:30:12" + }, + "returnParameters": { + "id": 2163, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2152, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "9027:6:12", + "nodeType": "VariableDeclaration", + "scope": 2164, + "src": "9011:22:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2150, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2149, + "name": "IERC20", + "nameLocations": [ + "9011:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "9011:6:12" + }, + "referencedDeclaration": 3506, + "src": "9011:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 2151, + "nodeType": "ArrayTypeName", + "src": "9011:8:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2156, + "mutability": "mutable", + "name": "tokenInfo", + "nameLocation": "9067:9:12", + "nodeType": "VariableDeclaration", + "scope": 2164, + "src": "9048:28:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenInfo_$2649_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenInfo[]" + }, + "typeName": { + "baseType": { + "id": 2154, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2153, + "name": "TokenInfo", + "nameLocations": [ + "9048:9:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2649, + "src": "9048:9:12" + }, + "referencedDeclaration": 2649, + "src": "9048:9:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenInfo_$2649_storage_ptr", + "typeString": "struct TokenInfo" + } + }, + "id": 2155, + "nodeType": "ArrayTypeName", + "src": "9048:11:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenInfo_$2649_storage_$dyn_storage_ptr", + "typeString": "struct TokenInfo[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2159, + "mutability": "mutable", + "name": "balancesRaw", + "nameLocation": "9108:11:12", + "nodeType": "VariableDeclaration", + "scope": 2164, + "src": "9091:28:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2157, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9091:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2158, + "nodeType": "ArrayTypeName", + "src": "9091:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2162, + "mutability": "mutable", + "name": "lastBalancesLiveScaled18", + "nameLocation": "9151:24:12", + "nodeType": "VariableDeclaration", + "scope": 2164, + "src": "9134:41:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2160, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9134:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2161, + "nodeType": "ArrayTypeName", + "src": "9134:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "8996:190:12" + }, + "scope": 2388, + "src": "8891:296:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2165, + "nodeType": "StructuredDocumentation", + "src": "9195:318:12", + "text": " @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates" + }, + "functionSelector": "535cfd8a", + "id": 2173, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCurrentLiveBalances", + "nameLocation": "9528:22:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2168, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2167, + "mutability": "mutable", + "name": "pool", + "nameLocation": "9559:4:12", + "nodeType": "VariableDeclaration", + "scope": 2173, + "src": "9551:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2166, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9551:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9550:14:12" + }, + "returnParameters": { + "id": 2172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2171, + "mutability": "mutable", + "name": "balancesLiveScaled18", + "nameLocation": "9605:20:12", + "nodeType": "VariableDeclaration", + "scope": 2173, + "src": "9588:37:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2169, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9588:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2170, + "nodeType": "ArrayTypeName", + "src": "9588:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "9587:39:12" + }, + "scope": 2388, + "src": "9519:108:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2174, + "nodeType": "StructuredDocumentation", + "src": "9635:306:12", + "text": " @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct" + }, + "functionSelector": "f29486a1", + "id": 2182, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolConfig", + "nameLocation": "9956:13:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2177, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2176, + "mutability": "mutable", + "name": "pool", + "nameLocation": "9978:4:12", + "nodeType": "VariableDeclaration", + "scope": 2182, + "src": "9970:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9970:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9969:14:12" + }, + "returnParameters": { + "id": 2181, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2180, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2182, + "src": "10007:17:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolConfig_$2550_memory_ptr", + "typeString": "struct PoolConfig" + }, + "typeName": { + "id": 2179, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2178, + "name": "PoolConfig", + "nameLocations": [ + "10007:10:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2550, + "src": "10007:10:12" + }, + "referencedDeclaration": 2550, + "src": "10007:10:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolConfig_$2550_storage_ptr", + "typeString": "struct PoolConfig" + } + }, + "visibility": "internal" + } + ], + "src": "10006:19:12" + }, + "scope": 2388, + "src": "9947:79:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2183, + "nodeType": "StructuredDocumentation", + "src": "10034:288:12", + "text": " @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct" + }, + "functionSelector": "ce8630d4", + "id": 2191, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getHooksConfig", + "nameLocation": "10337:14:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2185, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10360:4:12", + "nodeType": "VariableDeclaration", + "scope": 2191, + "src": "10352:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2184, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10352:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10351:14:12" + }, + "returnParameters": { + "id": 2190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2189, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2191, + "src": "10389:18:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HooksConfig_$2596_memory_ptr", + "typeString": "struct HooksConfig" + }, + "typeName": { + "id": 2188, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2187, + "name": "HooksConfig", + "nameLocations": [ + "10389:11:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2596, + "src": "10389:11:12" + }, + "referencedDeclaration": 2596, + "src": "10389:11:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HooksConfig_$2596_storage_ptr", + "typeString": "struct HooksConfig" + } + }, + "visibility": "internal" + } + ], + "src": "10388:20:12" + }, + "scope": 2388, + "src": "10328:81:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2192, + "nodeType": "StructuredDocumentation", + "src": "10417:164:12", + "text": " @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate" + }, + "functionSelector": "4f037ee7", + "id": 2199, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getBptRate", + "nameLocation": "10596:10:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2194, + "mutability": "mutable", + "name": "pool", + "nameLocation": "10615:4:12", + "nodeType": "VariableDeclaration", + "scope": 2199, + "src": "10607:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10607:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10606:14:12" + }, + "returnParameters": { + "id": 2198, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2197, + "mutability": "mutable", + "name": "rate", + "nameLocation": "10652:4:12", + "nodeType": "VariableDeclaration", + "scope": 2199, + "src": "10644:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2196, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10644:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10643:14:12" + }, + "scope": 2388, + "src": "10587:71:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2200, + "nodeType": "StructuredDocumentation", + "src": "10895:167:12", + "text": " @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return totalSupply Total supply of the token" + }, + "functionSelector": "e4dc2aa4", + "id": 2207, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nameLocation": "11077:11:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2202, + "mutability": "mutable", + "name": "token", + "nameLocation": "11097:5:12", + "nodeType": "VariableDeclaration", + "scope": 2207, + "src": "11089:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2201, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11089:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11088:15:12" + }, + "returnParameters": { + "id": 2206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2205, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2207, + "src": "11127:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11127:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11126:9:12" + }, + "scope": 2388, + "src": "11068:68:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2208, + "nodeType": "StructuredDocumentation", + "src": "11144:233:12", + "text": " @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return balance Balance of the account for the token" + }, + "functionSelector": "f7888aec", + "id": 2217, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "11392:9:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2210, + "mutability": "mutable", + "name": "token", + "nameLocation": "11410:5:12", + "nodeType": "VariableDeclaration", + "scope": 2217, + "src": "11402:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2209, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11402:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2212, + "mutability": "mutable", + "name": "account", + "nameLocation": "11425:7:12", + "nodeType": "VariableDeclaration", + "scope": 2217, + "src": "11417:15:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2211, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11417:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11401:32:12" + }, + "returnParameters": { + "id": 2216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2215, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2217, + "src": "11457:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11457:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11456:9:12" + }, + "scope": 2388, + "src": "11383:83:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2218, + "nodeType": "StructuredDocumentation", + "src": "11474:300:12", + "text": " @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return allowance Amount of tokens the spender is allowed to spend" + }, + "functionSelector": "927da105", + "id": 2229, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "11789:9:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2220, + "mutability": "mutable", + "name": "token", + "nameLocation": "11807:5:12", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "11799:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2219, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11799:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2222, + "mutability": "mutable", + "name": "owner", + "nameLocation": "11822:5:12", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "11814:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2221, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11814:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2224, + "mutability": "mutable", + "name": "spender", + "nameLocation": "11837:7:12", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "11829:15:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2223, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11829:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11798:47:12" + }, + "returnParameters": { + "id": 2228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2227, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "11869:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11869:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11868:9:12" + }, + "scope": 2388, + "src": "11780:98:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2230, + "nodeType": "StructuredDocumentation", + "src": "11886:484:12", + "text": " @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise" + }, + "functionSelector": "e1f21c67", + "id": 2241, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "12385:7:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2237, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2232, + "mutability": "mutable", + "name": "owner", + "nameLocation": "12401:5:12", + "nodeType": "VariableDeclaration", + "scope": 2241, + "src": "12393:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2231, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12393:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2234, + "mutability": "mutable", + "name": "spender", + "nameLocation": "12416:7:12", + "nodeType": "VariableDeclaration", + "scope": 2241, + "src": "12408:15:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2233, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12408:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2236, + "mutability": "mutable", + "name": "amount", + "nameLocation": "12433:6:12", + "nodeType": "VariableDeclaration", + "scope": 2241, + "src": "12425:14:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12425:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12392:48:12" + }, + "returnParameters": { + "id": 2240, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2239, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2241, + "src": "12459:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2238, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12459:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12458:6:12" + }, + "scope": 2388, + "src": "12376:89:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2242, + "nodeType": "StructuredDocumentation", + "src": "12473:469:12", + "text": " @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise" + }, + "functionSelector": "beabacc8", + "id": 2253, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nameLocation": "12957:8:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2249, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2244, + "mutability": "mutable", + "name": "owner", + "nameLocation": "12974:5:12", + "nodeType": "VariableDeclaration", + "scope": 2253, + "src": "12966:13:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2243, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12966:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2246, + "mutability": "mutable", + "name": "to", + "nameLocation": "12989:2:12", + "nodeType": "VariableDeclaration", + "scope": 2253, + "src": "12981:10:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12981:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2248, + "mutability": "mutable", + "name": "amount", + "nameLocation": "13001:6:12", + "nodeType": "VariableDeclaration", + "scope": 2253, + "src": "12993:14:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2247, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12993:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12965:43:12" + }, + "returnParameters": { + "id": 2252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2251, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2253, + "src": "13027:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2250, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13027:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "13026:6:12" + }, + "scope": 2388, + "src": "12948:85:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2254, + "nodeType": "StructuredDocumentation", + "src": "13041:554:12", + "text": " @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise" + }, + "functionSelector": "15dacbea", + "id": 2267, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "13610:12:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2263, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2256, + "mutability": "mutable", + "name": "spender", + "nameLocation": "13631:7:12", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "13623:15:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2255, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13623:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2258, + "mutability": "mutable", + "name": "from", + "nameLocation": "13648:4:12", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "13640:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2257, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13640:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2260, + "mutability": "mutable", + "name": "to", + "nameLocation": "13662:2:12", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "13654:10:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2259, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13654:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2262, + "mutability": "mutable", + "name": "amount", + "nameLocation": "13674:6:12", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "13666:14:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13666:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13622:59:12" + }, + "returnParameters": { + "id": 2266, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2265, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2267, + "src": "13700:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2264, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13700:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "13699:6:12" + }, + "scope": 2388, + "src": "13601:105:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2268, + "nodeType": "StructuredDocumentation", + "src": "13939:252:12", + "text": " @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return paused True if the pool is paused" + }, + "functionSelector": "6c9bc732", + "id": 2275, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolPaused", + "nameLocation": "14206:12:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2271, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2270, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14227:4:12", + "nodeType": "VariableDeclaration", + "scope": 2275, + "src": "14219:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2269, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14219:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14218:14:12" + }, + "returnParameters": { + "id": 2274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2273, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2275, + "src": "14256:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2272, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "14256:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "14255:6:12" + }, + "scope": 2388, + "src": "14197:65:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2276, + "nodeType": "StructuredDocumentation", + "src": "14270:621:12", + "text": " @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period.\n @param pool The pool whose data is requested\n @return paused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address" + }, + "functionSelector": "15e32046", + "id": 2289, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolPausedState", + "nameLocation": "14906:18:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2278, + "mutability": "mutable", + "name": "pool", + "nameLocation": "14933:4:12", + "nodeType": "VariableDeclaration", + "scope": 2289, + "src": "14925:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2277, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14925:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14924:14:12" + }, + "returnParameters": { + "id": 2288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2281, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2289, + "src": "14962:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2280, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "14962:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2283, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2289, + "src": "14968:6:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2282, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "14968:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2285, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2289, + "src": "14976:6:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2284, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "14976:6:12", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2287, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2289, + "src": "14984:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2286, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14984:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "14961:31:12" + }, + "scope": 2388, + "src": "14897:96:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2290, + "nodeType": "StructuredDocumentation", + "src": "15223:384:12", + "text": " @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token" + }, + "functionSelector": "85e0b999", + "id": 2300, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAggregateSwapFeeAmount", + "nameLocation": "15622:25:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2292, + "mutability": "mutable", + "name": "pool", + "nameLocation": "15656:4:12", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "15648:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2291, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15648:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2295, + "mutability": "mutable", + "name": "token", + "nameLocation": "15669:5:12", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "15662:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2294, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2293, + "name": "IERC20", + "nameLocations": [ + "15662:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "15662:6:12" + }, + "referencedDeclaration": 3506, + "src": "15662:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "15647:28:12" + }, + "returnParameters": { + "id": 2299, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2298, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "15699:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15699:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15698:9:12" + }, + "scope": 2388, + "src": "15613:95:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2301, + "nodeType": "StructuredDocumentation", + "src": "15716:386:12", + "text": " @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token" + }, + "functionSelector": "00fdfa13", + "id": 2311, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAggregateYieldFeeAmount", + "nameLocation": "16117:26:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2307, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2303, + "mutability": "mutable", + "name": "pool", + "nameLocation": "16152:4:12", + "nodeType": "VariableDeclaration", + "scope": 2311, + "src": "16144:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2302, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16144:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2306, + "mutability": "mutable", + "name": "token", + "nameLocation": "16165:5:12", + "nodeType": "VariableDeclaration", + "scope": 2311, + "src": "16158:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2305, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2304, + "name": "IERC20", + "nameLocations": [ + "16158:6:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "16158:6:12" + }, + "referencedDeclaration": 3506, + "src": "16158:6:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "16143:28:12" + }, + "returnParameters": { + "id": 2310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2309, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2311, + "src": "16195:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16195:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16194:9:12" + }, + "scope": 2388, + "src": "16108:96:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2312, + "nodeType": "StructuredDocumentation", + "src": "16212:275:12", + "text": " @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool" + }, + "functionSelector": "b45090f9", + "id": 2319, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getStaticSwapFeePercentage", + "nameLocation": "16502:26:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2314, + "mutability": "mutable", + "name": "pool", + "nameLocation": "16537:4:12", + "nodeType": "VariableDeclaration", + "scope": 2319, + "src": "16529:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2313, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16529:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "16528:14:12" + }, + "returnParameters": { + "id": 2318, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2317, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2319, + "src": "16566:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2316, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16566:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16565:9:12" + }, + "scope": 2388, + "src": "16493:82:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2320, + "nodeType": "StructuredDocumentation", + "src": "16583:290:12", + "text": " @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)" + }, + "functionSelector": "e9ddeb26", + "id": 2328, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolRoleAccounts", + "nameLocation": "16888:19:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2322, + "mutability": "mutable", + "name": "pool", + "nameLocation": "16916:4:12", + "nodeType": "VariableDeclaration", + "scope": 2328, + "src": "16908:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16908:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "16907:14:12" + }, + "returnParameters": { + "id": 2327, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2326, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2328, + "src": "16945:23:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_memory_ptr", + "typeString": "struct PoolRoleAccounts" + }, + "typeName": { + "id": 2325, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2324, + "name": "PoolRoleAccounts", + "nameLocations": [ + "16945:16:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2622, + "src": "16945:16:12" + }, + "referencedDeclaration": 2622, + "src": "16945:16:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolRoleAccounts_$2622_storage_ptr", + "typeString": "struct PoolRoleAccounts" + } + }, + "visibility": "internal" + } + ], + "src": "16944:25:12" + }, + "scope": 2388, + "src": "16879:91:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2329, + "nodeType": "StructuredDocumentation", + "src": "16978:369:12", + "text": " @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage" + }, + "functionSelector": "4d472bdd", + "id": 2339, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "computeDynamicSwapFeePercentage", + "nameLocation": "17362:31:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2335, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2331, + "mutability": "mutable", + "name": "pool", + "nameLocation": "17412:4:12", + "nodeType": "VariableDeclaration", + "scope": 2339, + "src": "17404:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2330, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17404:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2334, + "mutability": "mutable", + "name": "swapParams", + "nameLocation": "17449:10:12", + "nodeType": "VariableDeclaration", + "scope": 2339, + "src": "17427:32:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_memory_ptr", + "typeString": "struct PoolSwapParams" + }, + "typeName": { + "id": 2333, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2332, + "name": "PoolSwapParams", + "nameLocations": [ + "17427:14:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2717, + "src": "17427:14:12" + }, + "referencedDeclaration": 2717, + "src": "17427:14:12", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_storage_ptr", + "typeString": "struct PoolSwapParams" + } + }, + "visibility": "internal" + } + ], + "src": "17393:73:12" + }, + "returnParameters": { + "id": 2338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2337, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2339, + "src": "17490:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2336, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17490:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17489:9:12" + }, + "scope": 2388, + "src": "17353:146:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2340, + "nodeType": "StructuredDocumentation", + "src": "17507:148:12", + "text": " @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController" + }, + "functionSelector": "85f2dbd4", + "id": 2346, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeeController", + "nameLocation": "17670:24:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2341, + "nodeType": "ParameterList", + "parameters": [], + "src": "17694:2:12" + }, + "returnParameters": { + "id": 2345, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2344, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2346, + "src": "17720:22:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + }, + "typeName": { + "id": 2343, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2342, + "name": "IProtocolFeeController", + "nameLocations": [ + "17720:22:12" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1048, + "src": "17720:22:12" + }, + "referencedDeclaration": 1048, + "src": "17720:22:12", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeeController_$1048", + "typeString": "contract IProtocolFeeController" + } + }, + "visibility": "internal" + } + ], + "src": "17719:24:12" + }, + "scope": 2388, + "src": "17661:83:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2347, + "nodeType": "StructuredDocumentation", + "src": "17978:299:12", + "text": " @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return recoveryMode True if the pool is in Recovery Mode, false otherwise" + }, + "functionSelector": "be7d628a", + "id": 2354, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolInRecoveryMode", + "nameLocation": "18292:20:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2349, + "mutability": "mutable", + "name": "pool", + "nameLocation": "18321:4:12", + "nodeType": "VariableDeclaration", + "scope": 2354, + "src": "18313:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18313:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "18312:14:12" + }, + "returnParameters": { + "id": 2353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2352, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2354, + "src": "18350:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2351, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18350:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "18349:6:12" + }, + "scope": 2388, + "src": "18283:73:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2355, + "nodeType": "StructuredDocumentation", + "src": "18364:583:12", + "text": " @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order" + }, + "functionSelector": "3a2d133b", + "id": 2367, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "removeLiquidityRecovery", + "nameLocation": "18962:23:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2357, + "mutability": "mutable", + "name": "pool", + "nameLocation": "19004:4:12", + "nodeType": "VariableDeclaration", + "scope": 2367, + "src": "18996:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2356, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18996:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2359, + "mutability": "mutable", + "name": "from", + "nameLocation": "19027:4:12", + "nodeType": "VariableDeclaration", + "scope": 2367, + "src": "19019:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2358, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19019:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2361, + "mutability": "mutable", + "name": "exactBptAmountIn", + "nameLocation": "19050:16:12", + "nodeType": "VariableDeclaration", + "scope": 2367, + "src": "19042:24:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2360, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19042:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18985:88:12" + }, + "returnParameters": { + "id": 2366, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2365, + "mutability": "mutable", + "name": "amountsOut", + "nameLocation": "19109:10:12", + "nodeType": "VariableDeclaration", + "scope": 2367, + "src": "19092:27:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19092:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2364, + "nodeType": "ArrayTypeName", + "src": "19092:9:12", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "19091:29:12" + }, + "scope": 2388, + "src": "18953:168:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2368, + "nodeType": "StructuredDocumentation", + "src": "19348:712:12", + "text": " @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call" + }, + "functionSelector": "edfa3568", + "id": 2375, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "quote", + "nameLocation": "20075:5:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2371, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2370, + "mutability": "mutable", + "name": "data", + "nameLocation": "20096:4:12", + "nodeType": "VariableDeclaration", + "scope": 2375, + "src": "20081:19:12", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2369, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "20081:5:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "20080:21:12" + }, + "returnParameters": { + "id": 2374, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2373, + "mutability": "mutable", + "name": "result", + "nameLocation": "20133:6:12", + "nodeType": "VariableDeclaration", + "scope": 2375, + "src": "20120:19:12", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2372, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "20120:5:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "20119:21:12" + }, + "scope": 2388, + "src": "20066:75:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2376, + "nodeType": "StructuredDocumentation", + "src": "20149:745:12", + "text": " @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender" + }, + "functionSelector": "757d64b3", + "id": 2381, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "quoteAndRevert", + "nameLocation": "20909:14:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2378, + "mutability": "mutable", + "name": "data", + "nameLocation": "20939:4:12", + "nodeType": "VariableDeclaration", + "scope": 2381, + "src": "20924:19:12", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2377, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "20924:5:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "20923:21:12" + }, + "returnParameters": { + "id": 2380, + "nodeType": "ParameterList", + "parameters": [], + "src": "20953:0:12" + }, + "scope": 2388, + "src": "20900:54:12", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2382, + "nodeType": "StructuredDocumentation", + "src": "20962:571:12", + "text": " @notice Checks if the queries enabled on the Vault.\n @dev This is a one-way switch. Once queries are disabled, they can never be re-enabled.\n The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n @return queryDisabled If true, then queries are disabled" + }, + "functionSelector": "b4aef0ab", + "id": 2387, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isQueryDisabled", + "nameLocation": "21548:15:12", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2383, + "nodeType": "ParameterList", + "parameters": [], + "src": "21563:2:12" + }, + "returnParameters": { + "id": 2386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2385, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2387, + "src": "21589:4:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2384, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "21589:4:12", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "21588:6:12" + }, + "scope": 2388, + "src": "21539:56:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2389, + "src": "866:20732:12", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:21552:12" + }, + "id": 12 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AddLiquidityParams": [ + 2768 + ], + "AfterSwapParams": [ + 2746 + ], + "BufferWrapOrUnwrapParams": [ + 2809 + ], + "FEE_BITLENGTH": [ + 2812 + ], + "FEE_SCALING_FACTOR": [ + 2818 + ], + "HookFlags": [ + 2572 + ], + "HooksConfig": [ + 2596 + ], + "IAuthorizer": [ + 525 + ], + "IERC20": [ + 3506 + ], + "IERC4626": [ + 3428 + ], + "IRateProvider": [ + 509 + ], + "IVaultMain": [ + 2507 + ], + "LiquidityManagement": [ + 2525 + ], + "MAX_FEE_PERCENTAGE": [ + 2815 + ], + "PoolConfig": [ + 2550 + ], + "PoolConfigBits": [ + 2527 + ], + "PoolData": [ + 2674 + ], + "PoolRoleAccounts": [ + 2622 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "RemoveLiquidityParams": [ + 2789 + ], + "Rounding": [ + 2677 + ], + "SwapKind": [ + 2680 + ], + "SwapState": [ + 2606 + ], + "TokenConfig": [ + 2639 + ], + "TokenInfo": [ + 2649 + ], + "TokenType": [ + 2626 + ], + "VaultState": [ + 2614 + ], + "VaultSwapParams": [ + 2699 + ], + "WrappingDirection": [ + 2792 + ] + }, + "id": 2508, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2390, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:13" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 2392, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2508, + "sourceUnit": 3507, + "src": "76:137:13", + "symbolAliases": [ + { + "foreign": { + "id": 2391, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:13", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 2394, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2508, + "sourceUnit": 526, + "src": "217:48:13", + "symbolAliases": [ + { + "foreign": { + "id": 2393, + "name": "IAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 525, + "src": "226:11:13", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "./VaultTypes.sol", + "id": 2395, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2508, + "sourceUnit": 2819, + "src": "267:26:13", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IVaultMain", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 2396, + "nodeType": "StructuredDocumentation", + "src": "297:236:13", + "text": " @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons." + }, + "fullyImplemented": false, + "id": 2507, + "linearizedBaseContracts": [ + 2507 + ], + "name": "IVaultMain", + "nameLocation": "545:10:13", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 2397, + "nodeType": "StructuredDocumentation", + "src": "789:438:13", + "text": " @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call" + }, + "functionSelector": "48c89491", + "id": 2404, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "unlock", + "nameLocation": "1242:6:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2400, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2399, + "mutability": "mutable", + "name": "data", + "nameLocation": "1264:4:13", + "nodeType": "VariableDeclaration", + "scope": 2404, + "src": "1249:19:13", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2398, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1249:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1248:21:13" + }, + "returnParameters": { + "id": 2403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2402, + "mutability": "mutable", + "name": "result", + "nameLocation": "1301:6:13", + "nodeType": "VariableDeclaration", + "scope": 2404, + "src": "1288:19:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2401, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1288:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1287:21:13" + }, + "scope": 2507, + "src": "1233:76:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2405, + "nodeType": "StructuredDocumentation", + "src": "1317:1310:13", + "text": " @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment" + }, + "functionSelector": "15afd409", + "id": 2415, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "settle", + "nameLocation": "2642:6:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2408, + "mutability": "mutable", + "name": "token", + "nameLocation": "2656:5:13", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "2649:12:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2407, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2406, + "name": "IERC20", + "nameLocations": [ + "2649:6:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2649:6:13" + }, + "referencedDeclaration": 3506, + "src": "2649:6:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2410, + "mutability": "mutable", + "name": "amountHint", + "nameLocation": "2671:10:13", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "2663:18:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2663:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2648:34:13" + }, + "returnParameters": { + "id": 2414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2413, + "mutability": "mutable", + "name": "credit", + "nameLocation": "2709:6:13", + "nodeType": "VariableDeclaration", + "scope": 2415, + "src": "2701:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2412, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2701:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2700:16:13" + }, + "scope": 2507, + "src": "2633:84:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2416, + "nodeType": "StructuredDocumentation", + "src": "2725:323:13", + "text": " @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send" + }, + "functionSelector": "ae639329", + "id": 2426, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "sendTo", + "nameLocation": "3063:6:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2419, + "mutability": "mutable", + "name": "token", + "nameLocation": "3077:5:13", + "nodeType": "VariableDeclaration", + "scope": 2426, + "src": "3070:12:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2418, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2417, + "name": "IERC20", + "nameLocations": [ + "3070:6:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3070:6:13" + }, + "referencedDeclaration": 3506, + "src": "3070:6:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2421, + "mutability": "mutable", + "name": "to", + "nameLocation": "3092:2:13", + "nodeType": "VariableDeclaration", + "scope": 2426, + "src": "3084:10:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2420, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3084:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2423, + "mutability": "mutable", + "name": "amount", + "nameLocation": "3104:6:13", + "nodeType": "VariableDeclaration", + "scope": 2426, + "src": "3096:14:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3096:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3069:42:13" + }, + "returnParameters": { + "id": 2425, + "nodeType": "ParameterList", + "parameters": [], + "src": "3120:0:13" + }, + "scope": 2507, + "src": "3054:67:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2427, + "nodeType": "StructuredDocumentation", + "src": "3341:419:13", + "text": " @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap" + }, + "functionSelector": "2bfb780c", + "id": 2439, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "swap", + "nameLocation": "3775:4:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2431, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2430, + "mutability": "mutable", + "name": "vaultSwapParams", + "nameLocation": "3813:15:13", + "nodeType": "VariableDeclaration", + "scope": 2439, + "src": "3790:38:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VaultSwapParams_$2699_memory_ptr", + "typeString": "struct VaultSwapParams" + }, + "typeName": { + "id": 2429, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2428, + "name": "VaultSwapParams", + "nameLocations": [ + "3790:15:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2699, + "src": "3790:15:13" + }, + "referencedDeclaration": 2699, + "src": "3790:15:13", + "typeDescriptions": { + "typeIdentifier": "t_struct$_VaultSwapParams_$2699_storage_ptr", + "typeString": "struct VaultSwapParams" + } + }, + "visibility": "internal" + } + ], + "src": "3779:56:13" + }, + "returnParameters": { + "id": 2438, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2433, + "mutability": "mutable", + "name": "amountCalculatedRaw", + "nameLocation": "3862:19:13", + "nodeType": "VariableDeclaration", + "scope": 2439, + "src": "3854:27:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2432, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3854:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2435, + "mutability": "mutable", + "name": "amountInRaw", + "nameLocation": "3891:11:13", + "nodeType": "VariableDeclaration", + "scope": 2439, + "src": "3883:19:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3883:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2437, + "mutability": "mutable", + "name": "amountOutRaw", + "nameLocation": "3912:12:13", + "nodeType": "VariableDeclaration", + "scope": 2439, + "src": "3904:20:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2436, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3904:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3853:72:13" + }, + "scope": 2507, + "src": "3766:160:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2440, + "nodeType": "StructuredDocumentation", + "src": "4150:532:13", + "text": " @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool" + }, + "functionSelector": "4af29ec4", + "id": 2453, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "addLiquidity", + "nameLocation": "4697:12:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2444, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2443, + "mutability": "mutable", + "name": "params", + "nameLocation": "4746:6:13", + "nodeType": "VariableDeclaration", + "scope": 2453, + "src": "4720:32:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddLiquidityParams_$2768_memory_ptr", + "typeString": "struct AddLiquidityParams" + }, + "typeName": { + "id": 2442, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2441, + "name": "AddLiquidityParams", + "nameLocations": [ + "4720:18:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2768, + "src": "4720:18:13" + }, + "referencedDeclaration": 2768, + "src": "4720:18:13", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AddLiquidityParams_$2768_storage_ptr", + "typeString": "struct AddLiquidityParams" + } + }, + "visibility": "internal" + } + ], + "src": "4709:50:13" + }, + "returnParameters": { + "id": 2452, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2447, + "mutability": "mutable", + "name": "amountsIn", + "nameLocation": "4795:9:13", + "nodeType": "VariableDeclaration", + "scope": 2453, + "src": "4778:26:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4778:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2446, + "nodeType": "ArrayTypeName", + "src": "4778:9:13", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2449, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "4814:12:13", + "nodeType": "VariableDeclaration", + "scope": 2453, + "src": "4806:20:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2448, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4806:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2451, + "mutability": "mutable", + "name": "returnData", + "nameLocation": "4841:10:13", + "nodeType": "VariableDeclaration", + "scope": 2453, + "src": "4828:23:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2450, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4828:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4777:75:13" + }, + "scope": 2507, + "src": "4688:165:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2454, + "nodeType": "StructuredDocumentation", + "src": "5078:654:13", + "text": " @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool" + }, + "functionSelector": "21457897", + "id": 2467, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "removeLiquidity", + "nameLocation": "5747:15:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2458, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2457, + "mutability": "mutable", + "name": "params", + "nameLocation": "5802:6:13", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "5773:35:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RemoveLiquidityParams_$2789_memory_ptr", + "typeString": "struct RemoveLiquidityParams" + }, + "typeName": { + "id": 2456, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2455, + "name": "RemoveLiquidityParams", + "nameLocations": [ + "5773:21:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2789, + "src": "5773:21:13" + }, + "referencedDeclaration": 2789, + "src": "5773:21:13", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RemoveLiquidityParams_$2789_storage_ptr", + "typeString": "struct RemoveLiquidityParams" + } + }, + "visibility": "internal" + } + ], + "src": "5762:53:13" + }, + "returnParameters": { + "id": 2466, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2460, + "mutability": "mutable", + "name": "bptAmountIn", + "nameLocation": "5842:11:13", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "5834:19:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2459, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5834:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2463, + "mutability": "mutable", + "name": "amountsOut", + "nameLocation": "5872:10:13", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "5855:27:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2461, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5855:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2462, + "nodeType": "ArrayTypeName", + "src": "5855:9:13", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2465, + "mutability": "mutable", + "name": "returnData", + "nameLocation": "5897:10:13", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "5884:23:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2464, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5884:5:13", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5833:75:13" + }, + "scope": 2507, + "src": "5738:171:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2468, + "nodeType": "StructuredDocumentation", + "src": "6145:392:13", + "text": " @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list" + }, + "functionSelector": "c9c1661b", + "id": 2480, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokenCountAndIndexOfToken", + "nameLocation": "6552:32:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2470, + "mutability": "mutable", + "name": "pool", + "nameLocation": "6593:4:13", + "nodeType": "VariableDeclaration", + "scope": 2480, + "src": "6585:12:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2469, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6585:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2473, + "mutability": "mutable", + "name": "token", + "nameLocation": "6606:5:13", + "nodeType": "VariableDeclaration", + "scope": 2480, + "src": "6599:12:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2472, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2471, + "name": "IERC20", + "nameLocations": [ + "6599:6:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6599:6:13" + }, + "referencedDeclaration": 3506, + "src": "6599:6:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "6584:28:13" + }, + "returnParameters": { + "id": 2479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2476, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2480, + "src": "6636:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2475, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6636:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2478, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2480, + "src": "6645:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2477, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6645:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6635:18:13" + }, + "scope": 2507, + "src": "6543:111:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2481, + "nodeType": "StructuredDocumentation", + "src": "6887:584:13", + "text": " @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap" + }, + "functionSelector": "6c1a0324", + "id": 2493, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "erc4626BufferWrapOrUnwrap", + "nameLocation": "7486:25:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2485, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2484, + "mutability": "mutable", + "name": "params", + "nameLocation": "7554:6:13", + "nodeType": "VariableDeclaration", + "scope": 2493, + "src": "7522:38:13", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BufferWrapOrUnwrapParams_$2809_memory_ptr", + "typeString": "struct BufferWrapOrUnwrapParams" + }, + "typeName": { + "id": 2483, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2482, + "name": "BufferWrapOrUnwrapParams", + "nameLocations": [ + "7522:24:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2809, + "src": "7522:24:13" + }, + "referencedDeclaration": 2809, + "src": "7522:24:13", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BufferWrapOrUnwrapParams_$2809_storage_ptr", + "typeString": "struct BufferWrapOrUnwrapParams" + } + }, + "visibility": "internal" + } + ], + "src": "7511:56:13" + }, + "returnParameters": { + "id": 2492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2487, + "mutability": "mutable", + "name": "amountCalculatedRaw", + "nameLocation": "7594:19:13", + "nodeType": "VariableDeclaration", + "scope": 2493, + "src": "7586:27:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2486, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7586:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2489, + "mutability": "mutable", + "name": "amountInRaw", + "nameLocation": "7623:11:13", + "nodeType": "VariableDeclaration", + "scope": 2493, + "src": "7615:19:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7615:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2491, + "mutability": "mutable", + "name": "amountOutRaw", + "nameLocation": "7644:12:13", + "nodeType": "VariableDeclaration", + "scope": 2493, + "src": "7636:20:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2490, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7636:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7585:72:13" + }, + "scope": 2507, + "src": "7477:181:13", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2494, + "nodeType": "StructuredDocumentation", + "src": "7888:290:13", + "text": " @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract" + }, + "functionSelector": "aaabadc5", + "id": 2500, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nameLocation": "8193:13:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2495, + "nodeType": "ParameterList", + "parameters": [], + "src": "8206:2:13" + }, + "returnParameters": { + "id": 2499, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2498, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2500, + "src": "8232:11:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 2497, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2496, + "name": "IAuthorizer", + "nameLocations": [ + "8232:11:13" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 525, + "src": "8232:11:13" + }, + "referencedDeclaration": 525, + "src": "8232:11:13", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$525", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "8231:13:13" + }, + "scope": 2507, + "src": "8184:61:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2501, + "nodeType": "StructuredDocumentation", + "src": "8479:351:13", + "text": " @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension" + }, + "functionSelector": "b9a8effa", + "id": 2506, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVaultExtension", + "nameLocation": "8845:17:13", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2502, + "nodeType": "ParameterList", + "parameters": [], + "src": "8862:2:13" + }, + "returnParameters": { + "id": 2505, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2504, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2506, + "src": "8888:7:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2503, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8888:7:13", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8887:9:13" + }, + "scope": 2507, + "src": "8836:61:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2508, + "src": "535:8365:13", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:8854:13" + }, + "id": 13 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AddLiquidityParams": [ + 2768 + ], + "AfterSwapParams": [ + 2746 + ], + "BufferWrapOrUnwrapParams": [ + 2809 + ], + "FEE_BITLENGTH": [ + 2812 + ], + "FEE_SCALING_FACTOR": [ + 2818 + ], + "HookFlags": [ + 2572 + ], + "HooksConfig": [ + 2596 + ], + "IERC20": [ + 3506 + ], + "IERC4626": [ + 3428 + ], + "IRateProvider": [ + 509 + ], + "LiquidityManagement": [ + 2525 + ], + "MAX_FEE_PERCENTAGE": [ + 2815 + ], + "PoolConfig": [ + 2550 + ], + "PoolConfigBits": [ + 2527 + ], + "PoolData": [ + 2674 + ], + "PoolRoleAccounts": [ + 2622 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "RemoveLiquidityParams": [ + 2789 + ], + "Rounding": [ + 2677 + ], + "SwapKind": [ + 2680 + ], + "SwapState": [ + 2606 + ], + "TokenConfig": [ + 2639 + ], + "TokenInfo": [ + 2649 + ], + "TokenType": [ + 2626 + ], + "VaultState": [ + 2614 + ], + "VaultSwapParams": [ + 2699 + ], + "WrappingDirection": [ + 2792 + ] + }, + "id": 2819, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2509, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:14" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 2511, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2819, + "sourceUnit": 3507, + "src": "76:137:14", + "symbolAliases": [ + { + "foreign": { + "id": 2510, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:14", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "id": 2513, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2819, + "sourceUnit": 3429, + "src": "215:140:14", + "symbolAliases": [ + { + "foreign": { + "id": 2512, + "name": "IERC4626", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3428, + "src": "224:8:14", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol", + "file": "../solidity-utils/helpers/IRateProvider.sol", + "id": 2515, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 2819, + "sourceUnit": 510, + "src": "359:76:14", + "symbolAliases": [ + { + "foreign": { + "id": 2514, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 509, + "src": "368:13:14", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "canonicalName": "LiquidityManagement", + "documentation": { + "id": 2516, + "nodeType": "StructuredDocumentation", + "src": "439:478:14", + "text": " @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION" + }, + "id": 2525, + "members": [ + { + "constant": false, + "id": 2518, + "mutability": "mutable", + "name": "disableUnbalancedLiquidity", + "nameLocation": "958:26:14", + "nodeType": "VariableDeclaration", + "scope": 2525, + "src": "953:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2517, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "953:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2520, + "mutability": "mutable", + "name": "enableAddLiquidityCustom", + "nameLocation": "996:24:14", + "nodeType": "VariableDeclaration", + "scope": 2525, + "src": "991:29:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2519, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "991:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2522, + "mutability": "mutable", + "name": "enableRemoveLiquidityCustom", + "nameLocation": "1032:27:14", + "nodeType": "VariableDeclaration", + "scope": 2525, + "src": "1027:32:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2521, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1027:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2524, + "mutability": "mutable", + "name": "enableDonation", + "nameLocation": "1071:14:14", + "nodeType": "VariableDeclaration", + "scope": 2525, + "src": "1066:19:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2523, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1066:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "LiquidityManagement", + "nameLocation": "926:19:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "919:170:14", + "visibility": "public" + }, + { + "canonicalName": "PoolConfigBits", + "id": 2527, + "name": "PoolConfigBits", + "nameLocation": "1169:14:14", + "nodeType": "UserDefinedValueTypeDefinition", + "src": "1164:31:14", + "underlyingType": { + "id": 2526, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1187:7:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "canonicalName": "PoolConfig", + "documentation": { + "id": 2528, + "nodeType": "StructuredDocumentation", + "src": "1199:102:14", + "text": "@notice Represents a pool's configuration (hooks configuration are separated in another struct)." + }, + "id": 2550, + "members": [ + { + "constant": false, + "id": 2531, + "mutability": "mutable", + "name": "liquidityManagement", + "nameLocation": "1346:19:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1326:39:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 2530, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2529, + "name": "LiquidityManagement", + "nameLocations": [ + "1326:19:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "1326:19:14" + }, + "referencedDeclaration": 2525, + "src": "1326:19:14", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2533, + "mutability": "mutable", + "name": "staticSwapFeePercentage", + "nameLocation": "1380:23:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1372:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2532, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1372:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2535, + "mutability": "mutable", + "name": "aggregateSwapFeePercentage", + "nameLocation": "1418:26:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1410:34:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1410:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2537, + "mutability": "mutable", + "name": "aggregateYieldFeePercentage", + "nameLocation": "1459:27:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1451:35:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2536, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1451:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2539, + "mutability": "mutable", + "name": "tokenDecimalDiffs", + "nameLocation": "1500:17:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1493:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint40", + "typeString": "uint40" + }, + "typeName": { + "id": 2538, + "name": "uint40", + "nodeType": "ElementaryTypeName", + "src": "1493:6:14", + "typeDescriptions": { + "typeIdentifier": "t_uint40", + "typeString": "uint40" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2541, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nameLocation": "1531:18:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1524:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 2540, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "1524:6:14", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2543, + "mutability": "mutable", + "name": "isPoolRegistered", + "nameLocation": "1561:16:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1556:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2542, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1556:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2545, + "mutability": "mutable", + "name": "isPoolInitialized", + "nameLocation": "1589:17:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1584:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2544, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1584:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2547, + "mutability": "mutable", + "name": "isPoolPaused", + "nameLocation": "1618:12:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1613:17:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2546, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1613:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2549, + "mutability": "mutable", + "name": "isPoolInRecoveryMode", + "nameLocation": "1642:20:14", + "nodeType": "VariableDeclaration", + "scope": 2550, + "src": "1637:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2548, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1637:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "PoolConfig", + "nameLocation": "1308:10:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "1301:365:14", + "visibility": "public" + }, + { + "canonicalName": "HookFlags", + "documentation": { + "id": 2551, + "nodeType": "StructuredDocumentation", + "src": "1670:357:14", + "text": " @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations." + }, + "id": 2572, + "members": [ + { + "constant": false, + "id": 2553, + "mutability": "mutable", + "name": "enableHookAdjustedAmounts", + "nameLocation": "2058:25:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2053:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2552, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2053:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2555, + "mutability": "mutable", + "name": "shouldCallBeforeInitialize", + "nameLocation": "2095:26:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2090:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2554, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2090:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2557, + "mutability": "mutable", + "name": "shouldCallAfterInitialize", + "nameLocation": "2133:25:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2128:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2556, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2128:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2559, + "mutability": "mutable", + "name": "shouldCallComputeDynamicSwapFee", + "nameLocation": "2170:31:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2165:36:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2558, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2165:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2561, + "mutability": "mutable", + "name": "shouldCallBeforeSwap", + "nameLocation": "2213:20:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2208:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2560, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2208:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2563, + "mutability": "mutable", + "name": "shouldCallAfterSwap", + "nameLocation": "2245:19:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2240:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2562, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2240:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2565, + "mutability": "mutable", + "name": "shouldCallBeforeAddLiquidity", + "nameLocation": "2276:28:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2271:33:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2564, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2271:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2567, + "mutability": "mutable", + "name": "shouldCallAfterAddLiquidity", + "nameLocation": "2316:27:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2311:32:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2566, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2311:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2569, + "mutability": "mutable", + "name": "shouldCallBeforeRemoveLiquidity", + "nameLocation": "2355:31:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2350:36:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2568, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2350:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2571, + "mutability": "mutable", + "name": "shouldCallAfterRemoveLiquidity", + "nameLocation": "2398:30:14", + "nodeType": "VariableDeclaration", + "scope": 2572, + "src": "2393:35:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2570, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2393:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "HookFlags", + "nameLocation": "2036:9:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "2029:403:14", + "visibility": "public" + }, + { + "canonicalName": "HooksConfig", + "documentation": { + "id": 2573, + "nodeType": "StructuredDocumentation", + "src": "2436:102:14", + "text": "@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)." + }, + "id": 2596, + "members": [ + { + "constant": false, + "id": 2575, + "mutability": "mutable", + "name": "enableHookAdjustedAmounts", + "nameLocation": "2569:25:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2564:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2574, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2564:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2577, + "mutability": "mutable", + "name": "shouldCallBeforeInitialize", + "nameLocation": "2606:26:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2601:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2576, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2601:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2579, + "mutability": "mutable", + "name": "shouldCallAfterInitialize", + "nameLocation": "2644:25:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2639:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2578, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2639:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2581, + "mutability": "mutable", + "name": "shouldCallComputeDynamicSwapFee", + "nameLocation": "2681:31:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2676:36:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2580, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2676:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2583, + "mutability": "mutable", + "name": "shouldCallBeforeSwap", + "nameLocation": "2724:20:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2719:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2582, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2719:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2585, + "mutability": "mutable", + "name": "shouldCallAfterSwap", + "nameLocation": "2756:19:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2751:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2584, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2751:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2587, + "mutability": "mutable", + "name": "shouldCallBeforeAddLiquidity", + "nameLocation": "2787:28:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2782:33:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2586, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2782:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2589, + "mutability": "mutable", + "name": "shouldCallAfterAddLiquidity", + "nameLocation": "2827:27:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2822:32:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2588, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2822:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2591, + "mutability": "mutable", + "name": "shouldCallBeforeRemoveLiquidity", + "nameLocation": "2866:31:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2861:36:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2590, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2861:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2593, + "mutability": "mutable", + "name": "shouldCallAfterRemoveLiquidity", + "nameLocation": "2909:30:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2904:35:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2592, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2904:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2595, + "mutability": "mutable", + "name": "hooksContract", + "nameLocation": "2954:13:14", + "nodeType": "VariableDeclaration", + "scope": 2596, + "src": "2946:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2594, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2946:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "HooksConfig", + "nameLocation": "2545:11:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "2538:433:14", + "visibility": "public" + }, + { + "canonicalName": "SwapState", + "documentation": { + "id": 2597, + "nodeType": "StructuredDocumentation", + "src": "2975:66:14", + "text": "@notice Represents temporary state used in a swap operation." + }, + "id": 2606, + "members": [ + { + "constant": false, + "id": 2599, + "mutability": "mutable", + "name": "indexIn", + "nameLocation": "3073:7:14", + "nodeType": "VariableDeclaration", + "scope": 2606, + "src": "3065:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3065:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2601, + "mutability": "mutable", + "name": "indexOut", + "nameLocation": "3095:8:14", + "nodeType": "VariableDeclaration", + "scope": 2606, + "src": "3087:16:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2600, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3087:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2603, + "mutability": "mutable", + "name": "amountGivenScaled18", + "nameLocation": "3118:19:14", + "nodeType": "VariableDeclaration", + "scope": 2606, + "src": "3110:27:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2602, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3110:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2605, + "mutability": "mutable", + "name": "swapFeePercentage", + "nameLocation": "3152:17:14", + "nodeType": "VariableDeclaration", + "scope": 2606, + "src": "3144:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3144:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "SwapState", + "nameLocation": "3048:9:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "3041:132:14", + "visibility": "public" + }, + { + "canonicalName": "VaultState", + "documentation": { + "id": 2607, + "nodeType": "StructuredDocumentation", + "src": "3177:396:14", + "text": " @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified only by\n governance.\n @param isVaultPaused If set to true, Swaps and Add/Remove Liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled" + }, + "id": 2614, + "members": [ + { + "constant": false, + "id": 2609, + "mutability": "mutable", + "name": "isQueryDisabled", + "nameLocation": "3605:15:14", + "nodeType": "VariableDeclaration", + "scope": 2614, + "src": "3600:20:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2608, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3600:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2611, + "mutability": "mutable", + "name": "isVaultPaused", + "nameLocation": "3632:13:14", + "nodeType": "VariableDeclaration", + "scope": 2614, + "src": "3627:18:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2610, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3627:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2613, + "mutability": "mutable", + "name": "areBuffersPaused", + "nameLocation": "3657:16:14", + "nodeType": "VariableDeclaration", + "scope": 2614, + "src": "3652:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2612, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3652:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "VaultState", + "nameLocation": "3582:10:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "3575:102:14", + "visibility": "public" + }, + { + "canonicalName": "PoolRoleAccounts", + "documentation": { + "id": 2615, + "nodeType": "StructuredDocumentation", + "src": "3681:417:14", + "text": " @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (or 0 to delegate to governance)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee percentage" + }, + "id": 2622, + "members": [ + { + "constant": false, + "id": 2617, + "mutability": "mutable", + "name": "pauseManager", + "nameLocation": "4139:12:14", + "nodeType": "VariableDeclaration", + "scope": 2622, + "src": "4131:20:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4131:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2619, + "mutability": "mutable", + "name": "swapFeeManager", + "nameLocation": "4166:14:14", + "nodeType": "VariableDeclaration", + "scope": 2622, + "src": "4158:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2618, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4158:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2621, + "mutability": "mutable", + "name": "poolCreator", + "nameLocation": "4195:11:14", + "nodeType": "VariableDeclaration", + "scope": 2622, + "src": "4187:19:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4187:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "PoolRoleAccounts", + "nameLocation": "4107:16:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "4100:110:14", + "visibility": "public" + }, + { + "canonicalName": "TokenType", + "documentation": { + "id": 2623, + "nodeType": "StructuredDocumentation", + "src": "4214:1038:14", + "text": " @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard." + }, + "id": 2626, + "members": [ + { + "id": 2624, + "name": "STANDARD", + "nameLocation": "5276:8:14", + "nodeType": "EnumValue", + "src": "5276:8:14" + }, + { + "id": 2625, + "name": "WITH_RATE", + "nameLocation": "5291:9:14", + "nodeType": "EnumValue", + "src": "5291:9:14" + } + ], + "name": "TokenType", + "nameLocation": "5259:9:14", + "nodeType": "EnumDefinition", + "src": "5254:49:14" + }, + { + "canonicalName": "TokenConfig", + "documentation": { + "id": 2627, + "nodeType": "StructuredDocumentation", + "src": "5307:928:14", + "text": " @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token" + }, + "id": 2639, + "members": [ + { + "constant": false, + "id": 2630, + "mutability": "mutable", + "name": "token", + "nameLocation": "6270:5:14", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "6263:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2629, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2628, + "name": "IERC20", + "nameLocations": [ + "6263:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6263:6:14" + }, + "referencedDeclaration": 3506, + "src": "6263:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2633, + "mutability": "mutable", + "name": "tokenType", + "nameLocation": "6292:9:14", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "6282:19:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_TokenType_$2626", + "typeString": "enum TokenType" + }, + "typeName": { + "id": 2632, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2631, + "name": "TokenType", + "nameLocations": [ + "6282:9:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2626, + "src": "6282:9:14" + }, + "referencedDeclaration": 2626, + "src": "6282:9:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_TokenType_$2626", + "typeString": "enum TokenType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2636, + "mutability": "mutable", + "name": "rateProvider", + "nameLocation": "6322:12:14", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "6308:26:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$509", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 2635, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2634, + "name": "IRateProvider", + "nameLocations": [ + "6308:13:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 509, + "src": "6308:13:14" + }, + "referencedDeclaration": 509, + "src": "6308:13:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$509", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2638, + "mutability": "mutable", + "name": "paysYieldFees", + "nameLocation": "6346:13:14", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "6341:18:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2637, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6341:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "TokenConfig", + "nameLocation": "6244:11:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "6237:126:14", + "visibility": "public" + }, + { + "canonicalName": "TokenInfo", + "documentation": { + "id": 2640, + "nodeType": "StructuredDocumentation", + "src": "6367:600:14", + "text": " @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token" + }, + "id": 2649, + "members": [ + { + "constant": false, + "id": 2643, + "mutability": "mutable", + "name": "tokenType", + "nameLocation": "7003:9:14", + "nodeType": "VariableDeclaration", + "scope": 2649, + "src": "6993:19:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_TokenType_$2626", + "typeString": "enum TokenType" + }, + "typeName": { + "id": 2642, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2641, + "name": "TokenType", + "nameLocations": [ + "6993:9:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2626, + "src": "6993:9:14" + }, + "referencedDeclaration": 2626, + "src": "6993:9:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_TokenType_$2626", + "typeString": "enum TokenType" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2646, + "mutability": "mutable", + "name": "rateProvider", + "nameLocation": "7033:12:14", + "nodeType": "VariableDeclaration", + "scope": 2649, + "src": "7019:26:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$509", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 2645, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2644, + "name": "IRateProvider", + "nameLocations": [ + "7019:13:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 509, + "src": "7019:13:14" + }, + "referencedDeclaration": 509, + "src": "7019:13:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$509", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2648, + "mutability": "mutable", + "name": "paysYieldFees", + "nameLocation": "7057:13:14", + "nodeType": "VariableDeclaration", + "scope": 2649, + "src": "7052:18:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2647, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7052:4:14", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "TokenInfo", + "nameLocation": "6976:9:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "6969:105:14", + "visibility": "public" + }, + { + "canonicalName": "PoolData", + "documentation": { + "id": 2650, + "nodeType": "StructuredDocumentation", + "src": "7078:757:14", + "text": " @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in pool registration order\n @param tokenInfo Configuration data for each token, sorted in pool registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens" + }, + "id": 2674, + "members": [ + { + "constant": false, + "id": 2653, + "mutability": "mutable", + "name": "poolConfigBits", + "nameLocation": "7875:14:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "7860:29:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_PoolConfigBits_$2527", + "typeString": "PoolConfigBits" + }, + "typeName": { + "id": 2652, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2651, + "name": "PoolConfigBits", + "nameLocations": [ + "7860:14:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2527, + "src": "7860:14:14" + }, + "referencedDeclaration": 2527, + "src": "7860:14:14", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_PoolConfigBits_$2527", + "typeString": "PoolConfigBits" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2657, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "7905:6:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "7896:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2655, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2654, + "name": "IERC20", + "nameLocations": [ + "7896:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "7896:6:14" + }, + "referencedDeclaration": 3506, + "src": "7896:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 2656, + "nodeType": "ArrayTypeName", + "src": "7896:8:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2661, + "mutability": "mutable", + "name": "tokenInfo", + "nameLocation": "7930:9:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "7918:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenInfo_$2649_storage_$dyn_storage_ptr", + "typeString": "struct TokenInfo[]" + }, + "typeName": { + "baseType": { + "id": 2659, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2658, + "name": "TokenInfo", + "nameLocations": [ + "7918:9:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2649, + "src": "7918:9:14" + }, + "referencedDeclaration": 2649, + "src": "7918:9:14", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenInfo_$2649_storage_ptr", + "typeString": "struct TokenInfo" + } + }, + "id": 2660, + "nodeType": "ArrayTypeName", + "src": "7918:11:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenInfo_$2649_storage_$dyn_storage_ptr", + "typeString": "struct TokenInfo[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2664, + "mutability": "mutable", + "name": "balancesRaw", + "nameLocation": "7956:11:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "7946:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7946:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2663, + "nodeType": "ArrayTypeName", + "src": "7946:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2667, + "mutability": "mutable", + "name": "balancesLiveScaled18", + "nameLocation": "7984:20:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "7974:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2665, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7974:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2666, + "nodeType": "ArrayTypeName", + "src": "7974:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2670, + "mutability": "mutable", + "name": "tokenRates", + "nameLocation": "8021:10:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "8011:20:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2668, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8011:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2669, + "nodeType": "ArrayTypeName", + "src": "8011:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2673, + "mutability": "mutable", + "name": "decimalScalingFactors", + "nameLocation": "8048:21:14", + "nodeType": "VariableDeclaration", + "scope": 2674, + "src": "8038:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8038:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2672, + "nodeType": "ArrayTypeName", + "src": "8038:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "name": "PoolData", + "nameLocation": "7844:8:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "7837:236:14", + "visibility": "public" + }, + { + "canonicalName": "Rounding", + "id": 2677, + "members": [ + { + "id": 2675, + "name": "ROUND_UP", + "nameLocation": "8098:8:14", + "nodeType": "EnumValue", + "src": "8098:8:14" + }, + { + "id": 2676, + "name": "ROUND_DOWN", + "nameLocation": "8113:10:14", + "nodeType": "EnumValue", + "src": "8113:10:14" + } + ], + "name": "Rounding", + "nameLocation": "8082:8:14", + "nodeType": "EnumDefinition", + "src": "8077:49:14" + }, + { + "canonicalName": "SwapKind", + "id": 2680, + "members": [ + { + "id": 2678, + "name": "EXACT_IN", + "nameLocation": "8360:8:14", + "nodeType": "EnumValue", + "src": "8360:8:14" + }, + { + "id": 2679, + "name": "EXACT_OUT", + "nameLocation": "8375:9:14", + "nodeType": "EnumValue", + "src": "8375:9:14" + } + ], + "name": "SwapKind", + "nameLocation": "8344:8:14", + "nodeType": "EnumDefinition", + "src": "8339:48:14" + }, + { + "canonicalName": "VaultSwapParams", + "documentation": { + "id": 2681, + "nodeType": "StructuredDocumentation", + "src": "9144:567:14", + "text": " @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data" + }, + "id": 2699, + "members": [ + { + "constant": false, + "id": 2684, + "mutability": "mutable", + "name": "kind", + "nameLocation": "9752:4:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9743:13:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + }, + "typeName": { + "id": 2683, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2682, + "name": "SwapKind", + "nameLocations": [ + "9743:8:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2680, + "src": "9743:8:14" + }, + "referencedDeclaration": 2680, + "src": "9743:8:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2686, + "mutability": "mutable", + "name": "pool", + "nameLocation": "9771:4:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9763:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2685, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9763:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2689, + "mutability": "mutable", + "name": "tokenIn", + "nameLocation": "9789:7:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9782:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2688, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2687, + "name": "IERC20", + "nameLocations": [ + "9782:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "9782:6:14" + }, + "referencedDeclaration": 3506, + "src": "9782:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2692, + "mutability": "mutable", + "name": "tokenOut", + "nameLocation": "9810:8:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9803:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2691, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2690, + "name": "IERC20", + "nameLocations": [ + "9803:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "9803:6:14" + }, + "referencedDeclaration": 3506, + "src": "9803:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2694, + "mutability": "mutable", + "name": "amountGivenRaw", + "nameLocation": "9833:14:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9825:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9825:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2696, + "mutability": "mutable", + "name": "limitRaw", + "nameLocation": "9862:8:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9854:16:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2695, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9854:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2698, + "mutability": "mutable", + "name": "userData", + "nameLocation": "9883:8:14", + "nodeType": "VariableDeclaration", + "scope": 2699, + "src": "9877:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2697, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9877:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "VaultSwapParams", + "nameLocation": "9720:15:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "9713:182:14", + "visibility": "public" + }, + { + "canonicalName": "PoolSwapParams", + "documentation": { + "id": 2700, + "nodeType": "StructuredDocumentation", + "src": "9899:539:14", + "text": " @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap" + }, + "id": 2717, + "members": [ + { + "constant": false, + "id": 2703, + "mutability": "mutable", + "name": "kind", + "nameLocation": "10478:4:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10469:13:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + }, + "typeName": { + "id": 2702, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2701, + "name": "SwapKind", + "nameLocations": [ + "10469:8:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2680, + "src": "10469:8:14" + }, + "referencedDeclaration": 2680, + "src": "10469:8:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2705, + "mutability": "mutable", + "name": "amountGivenScaled18", + "nameLocation": "10497:19:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10489:27:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10489:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2708, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "10533:16:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10523:26:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2706, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10523:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2707, + "nodeType": "ArrayTypeName", + "src": "10523:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2710, + "mutability": "mutable", + "name": "indexIn", + "nameLocation": "10564:7:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10556:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2709, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10556:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2712, + "mutability": "mutable", + "name": "indexOut", + "nameLocation": "10586:8:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10578:16:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2711, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10578:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2714, + "mutability": "mutable", + "name": "router", + "nameLocation": "10609:6:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10601:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2713, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10601:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2716, + "mutability": "mutable", + "name": "userData", + "nameLocation": "10628:8:14", + "nodeType": "VariableDeclaration", + "scope": 2717, + "src": "10622:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2715, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10622:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "PoolSwapParams", + "nameLocation": "10447:14:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "10440:200:14", + "visibility": "public" + }, + { + "canonicalName": "AfterSwapParams", + "documentation": { + "id": 2718, + "nodeType": "StructuredDocumentation", + "src": "10644:882:14", + "text": " @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param user Account originating the swap operation\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap" + }, + "id": 2746, + "members": [ + { + "constant": false, + "id": 2721, + "mutability": "mutable", + "name": "kind", + "nameLocation": "11567:4:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11558:13:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + }, + "typeName": { + "id": 2720, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2719, + "name": "SwapKind", + "nameLocations": [ + "11558:8:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2680, + "src": "11558:8:14" + }, + "referencedDeclaration": 2680, + "src": "11558:8:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2724, + "mutability": "mutable", + "name": "tokenIn", + "nameLocation": "11585:7:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11578:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2723, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2722, + "name": "IERC20", + "nameLocations": [ + "11578:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "11578:6:14" + }, + "referencedDeclaration": 3506, + "src": "11578:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2727, + "mutability": "mutable", + "name": "tokenOut", + "nameLocation": "11606:8:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11599:15:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2726, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2725, + "name": "IERC20", + "nameLocations": [ + "11599:6:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "11599:6:14" + }, + "referencedDeclaration": 3506, + "src": "11599:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2729, + "mutability": "mutable", + "name": "amountInScaled18", + "nameLocation": "11629:16:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11621:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11621:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2731, + "mutability": "mutable", + "name": "amountOutScaled18", + "nameLocation": "11660:17:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11652:25:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11652:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2733, + "mutability": "mutable", + "name": "tokenInBalanceScaled18", + "nameLocation": "11692:22:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11684:30:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11684:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2735, + "mutability": "mutable", + "name": "tokenOutBalanceScaled18", + "nameLocation": "11729:23:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11721:31:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11721:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2737, + "mutability": "mutable", + "name": "amountCalculatedScaled18", + "nameLocation": "11767:24:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11759:32:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2736, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11759:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2739, + "mutability": "mutable", + "name": "amountCalculatedRaw", + "nameLocation": "11806:19:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11798:27:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2738, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11798:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2741, + "mutability": "mutable", + "name": "router", + "nameLocation": "11840:6:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11832:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2740, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11832:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2743, + "mutability": "mutable", + "name": "pool", + "nameLocation": "11861:4:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11853:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2742, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11853:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2745, + "mutability": "mutable", + "name": "userData", + "nameLocation": "11878:8:14", + "nodeType": "VariableDeclaration", + "scope": 2746, + "src": "11872:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2744, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11872:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "AfterSwapParams", + "nameLocation": "11535:15:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "11528:362:14", + "visibility": "public" + }, + { + "canonicalName": "AddLiquidityKind", + "id": 2752, + "members": [ + { + "id": 2747, + "name": "PROPORTIONAL", + "nameLocation": "12136:12:14", + "nodeType": "EnumValue", + "src": "12136:12:14" + }, + { + "id": 2748, + "name": "UNBALANCED", + "nameLocation": "12155:10:14", + "nodeType": "EnumValue", + "src": "12155:10:14" + }, + { + "id": 2749, + "name": "SINGLE_TOKEN_EXACT_OUT", + "nameLocation": "12172:22:14", + "nodeType": "EnumValue", + "src": "12172:22:14" + }, + { + "id": 2750, + "name": "DONATION", + "nameLocation": "12201:8:14", + "nodeType": "EnumValue", + "src": "12201:8:14" + }, + { + "id": 2751, + "name": "CUSTOM", + "nameLocation": "12216:6:14", + "nodeType": "EnumValue", + "src": "12216:6:14" + } + ], + "name": "AddLiquidityKind", + "nameLocation": "12112:16:14", + "nodeType": "EnumDefinition", + "src": "12107:118:14" + }, + { + "canonicalName": "AddLiquidityParams", + "documentation": { + "id": 2753, + "nodeType": "StructuredDocumentation", + "src": "12229:328:14", + "text": " @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data" + }, + "id": 2768, + "members": [ + { + "constant": false, + "id": 2755, + "mutability": "mutable", + "name": "pool", + "nameLocation": "12600:4:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12592:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2754, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12592:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2757, + "mutability": "mutable", + "name": "to", + "nameLocation": "12619:2:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12611:10:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2756, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12611:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2760, + "mutability": "mutable", + "name": "maxAmountsIn", + "nameLocation": "12638:12:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12628:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2758, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12628:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2759, + "nodeType": "ArrayTypeName", + "src": "12628:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2762, + "mutability": "mutable", + "name": "minBptAmountOut", + "nameLocation": "12665:15:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12657:23:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2761, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12657:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2765, + "mutability": "mutable", + "name": "kind", + "nameLocation": "12704:4:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12687:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 2764, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2763, + "name": "AddLiquidityKind", + "nameLocations": [ + "12687:16:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "12687:16:14" + }, + "referencedDeclaration": 2752, + "src": "12687:16:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2767, + "mutability": "mutable", + "name": "userData", + "nameLocation": "12721:8:14", + "nodeType": "VariableDeclaration", + "scope": 2768, + "src": "12715:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2766, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12715:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "AddLiquidityParams", + "nameLocation": "12566:18:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "12559:174:14", + "visibility": "public" + }, + { + "canonicalName": "RemoveLiquidityKind", + "id": 2773, + "members": [ + { + "id": 2769, + "name": "PROPORTIONAL", + "nameLocation": "12985:12:14", + "nodeType": "EnumValue", + "src": "12985:12:14" + }, + { + "id": 2770, + "name": "SINGLE_TOKEN_EXACT_IN", + "nameLocation": "13004:21:14", + "nodeType": "EnumValue", + "src": "13004:21:14" + }, + { + "id": 2771, + "name": "SINGLE_TOKEN_EXACT_OUT", + "nameLocation": "13032:22:14", + "nodeType": "EnumValue", + "src": "13032:22:14" + }, + { + "id": 2772, + "name": "CUSTOM", + "nameLocation": "13061:6:14", + "nodeType": "EnumValue", + "src": "13061:6:14" + } + ], + "name": "RemoveLiquidityKind", + "nameLocation": "12958:19:14", + "nodeType": "EnumDefinition", + "src": "12953:117:14" + }, + { + "canonicalName": "RemoveLiquidityParams", + "documentation": { + "id": 2774, + "nodeType": "StructuredDocumentation", + "src": "13074:338:14", + "text": " @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data" + }, + "id": 2789, + "members": [ + { + "constant": false, + "id": 2776, + "mutability": "mutable", + "name": "pool", + "nameLocation": "13458:4:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13450:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2775, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13450:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2778, + "mutability": "mutable", + "name": "from", + "nameLocation": "13477:4:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13469:12:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2777, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13469:7:14", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2780, + "mutability": "mutable", + "name": "maxBptAmountIn", + "nameLocation": "13496:14:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13488:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2779, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13488:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2783, + "mutability": "mutable", + "name": "minAmountsOut", + "nameLocation": "13527:13:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13517:23:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13517:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2782, + "nodeType": "ArrayTypeName", + "src": "13517:9:14", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2786, + "mutability": "mutable", + "name": "kind", + "nameLocation": "13567:4:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13547:24:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 2785, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2784, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "13547:19:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "13547:19:14" + }, + "referencedDeclaration": 2773, + "src": "13547:19:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2788, + "mutability": "mutable", + "name": "userData", + "nameLocation": "13584:8:14", + "nodeType": "VariableDeclaration", + "scope": 2789, + "src": "13578:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2787, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "13578:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "RemoveLiquidityParams", + "nameLocation": "13421:21:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "13414:182:14", + "visibility": "public" + }, + { + "canonicalName": "WrappingDirection", + "id": 2792, + "members": [ + { + "id": 2790, + "name": "WRAP", + "nameLocation": "13846:4:14", + "nodeType": "EnumValue", + "src": "13846:4:14" + }, + { + "id": 2791, + "name": "UNWRAP", + "nameLocation": "13857:6:14", + "nodeType": "EnumValue", + "src": "13857:6:14" + } + ], + "name": "WrappingDirection", + "nameLocation": "13821:17:14", + "nodeType": "EnumDefinition", + "src": "13816:50:14" + }, + { + "canonicalName": "BufferWrapOrUnwrapParams", + "documentation": { + "id": 2793, + "nodeType": "StructuredDocumentation", + "src": "13870:546:14", + "text": " @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)\n @param userData Optional user data" + }, + "id": 2809, + "members": [ + { + "constant": false, + "id": 2796, + "mutability": "mutable", + "name": "kind", + "nameLocation": "14466:4:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14457:13:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + }, + "typeName": { + "id": 2795, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2794, + "name": "SwapKind", + "nameLocations": [ + "14457:8:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2680, + "src": "14457:8:14" + }, + "referencedDeclaration": 2680, + "src": "14457:8:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$2680", + "typeString": "enum SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2799, + "mutability": "mutable", + "name": "direction", + "nameLocation": "14495:9:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14477:27:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_WrappingDirection_$2792", + "typeString": "enum WrappingDirection" + }, + "typeName": { + "id": 2798, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2797, + "name": "WrappingDirection", + "nameLocations": [ + "14477:17:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2792, + "src": "14477:17:14" + }, + "referencedDeclaration": 2792, + "src": "14477:17:14", + "typeDescriptions": { + "typeIdentifier": "t_enum$_WrappingDirection_$2792", + "typeString": "enum WrappingDirection" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2802, + "mutability": "mutable", + "name": "wrappedToken", + "nameLocation": "14520:12:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14511:21:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + }, + "typeName": { + "id": 2801, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2800, + "name": "IERC4626", + "nameLocations": [ + "14511:8:14" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3428, + "src": "14511:8:14" + }, + "referencedDeclaration": 3428, + "src": "14511:8:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC4626_$3428", + "typeString": "contract IERC4626" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2804, + "mutability": "mutable", + "name": "amountGivenRaw", + "nameLocation": "14547:14:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14539:22:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14539:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2806, + "mutability": "mutable", + "name": "limitRaw", + "nameLocation": "14576:8:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14568:16:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14568:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2808, + "mutability": "mutable", + "name": "userData", + "nameLocation": "14597:8:14", + "nodeType": "VariableDeclaration", + "scope": 2809, + "src": "14591:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2807, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "14591:5:14", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "BufferWrapOrUnwrapParams", + "nameLocation": "14425:24:14", + "nodeType": "StructDefinition", + "scope": 2819, + "src": "14418:191:14", + "visibility": "public" + }, + { + "constant": true, + "id": 2812, + "mutability": "constant", + "name": "FEE_BITLENGTH", + "nameLocation": "14782:13:14", + "nodeType": "VariableDeclaration", + "scope": 2819, + "src": "14765:35:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14765:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3234", + "id": 2811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14798:2:14", + "typeDescriptions": { + "typeIdentifier": "t_rational_24_by_1", + "typeString": "int_const 24" + }, + "value": "24" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 2815, + "mutability": "constant", + "name": "MAX_FEE_PERCENTAGE", + "nameLocation": "14820:18:14", + "nodeType": "VariableDeclaration", + "scope": 2819, + "src": "14803:42:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2813, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14803:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653138", + "id": 2814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14841:4:14", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 2818, + "mutability": "constant", + "name": "FEE_SCALING_FACTOR", + "nameLocation": "14873:18:14", + "nodeType": "VariableDeclaration", + "scope": 2819, + "src": "14856:42:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14856:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653131", + "id": 2817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14894:4:14", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000_by_1", + "typeString": "int_const 100000000000" + }, + "value": "1e11" + }, + "visibility": "internal" + } + ], + "src": "48:14853:14" + }, + "id": 14 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "AfterSwapParams": [ + 2746 + ], + "BaseHooks": [ + 3061 + ], + "HookFlags": [ + 2572 + ], + "IHooks": [ + 772 + ], + "LiquidityManagement": [ + 2525 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "TokenConfig": [ + 2639 + ] + }, + "id": 3062, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2820, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:15" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "id": 2822, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3062, + "sourceUnit": 773, + "src": "76:144:15", + "symbolAliases": [ + { + "foreign": { + "id": 2821, + "name": "IHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 772, + "src": "85:6:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "id": 2830, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3062, + "sourceUnit": 2819, + "src": "222:293:15", + "symbolAliases": [ + { + "foreign": { + "id": 2823, + "name": "AddLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "236:16:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2824, + "name": "HookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "259:9:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2825, + "name": "LiquidityManagement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2525, + "src": "275:19:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2826, + "name": "RemoveLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "301:19:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2827, + "name": "TokenConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2639, + "src": "327:11:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2828, + "name": "PoolSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2717, + "src": "345:14:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 2829, + "name": "AfterSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2746, + "src": "366:15:15", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 2832, + "name": "IHooks", + "nameLocations": [ + "900:6:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 772, + "src": "900:6:15" + }, + "id": 2833, + "nodeType": "InheritanceSpecifier", + "src": "900:6:15" + } + ], + "canonicalName": "BaseHooks", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 2831, + "nodeType": "StructuredDocumentation", + "src": "519:348:15", + "text": " @notice Base for pool hooks contracts.\n @dev Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks,\n and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used\n in this abstract contract, but should be used in real derived hook contracts." + }, + "fullyImplemented": false, + "id": 3061, + "linearizedBaseContracts": [ + 3061, + 772 + ], + "name": "BaseHooks", + "nameLocation": "887:9:15", + "nodeType": "ContractDefinition", + "nodes": [ + { + "baseFunctions": [ + 599 + ], + "body": { + "id": 2852, + "nodeType": "Block", + "src": "1105:128:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 2850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1220:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 2849, + "id": 2851, + "nodeType": "Return", + "src": "1213:12:15" + } + ] + }, + "documentation": { + "id": 2834, + "nodeType": "StructuredDocumentation", + "src": "914:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "0b89f182", + "id": 2853, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onRegister", + "nameLocation": "951:10:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2846, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2836, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "972:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2835, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "972:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2838, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "990:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2837, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "990:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2842, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "1008:20:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 2840, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2839, + "name": "TokenConfig", + "nameLocations": [ + "1008:11:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "1008:11:15" + }, + "referencedDeclaration": 2639, + "src": "1008:11:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 2841, + "nodeType": "ArrayTypeName", + "src": "1008:13:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2845, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "1039:28:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_calldata_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 2844, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2843, + "name": "LiquidityManagement", + "nameLocations": [ + "1039:19:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "1039:19:15" + }, + "referencedDeclaration": 2525, + "src": "1039:19:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "961:113:15" + }, + "returnParameters": { + "id": 2849, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2848, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "1099:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2847, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1099:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1098:6:15" + }, + "scope": 3061, + "src": "942:291:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 606 + ], + "documentation": { + "id": 2854, + "nodeType": "StructuredDocumentation", + "src": "1241:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "d77153a7", + "id": 2860, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getHookFlags", + "nameLocation": "1278:12:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2855, + "nodeType": "ParameterList", + "parameters": [], + "src": "1290:2:15" + }, + "returnParameters": { + "id": 2859, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2858, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2860, + "src": "1322:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags" + }, + "typeName": { + "id": 2857, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2856, + "name": "HookFlags", + "nameLocations": [ + "1322:9:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2572, + "src": "1322:9:15" + }, + "referencedDeclaration": 2572, + "src": "1322:9:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_storage_ptr", + "typeString": "struct HookFlags" + } + }, + "visibility": "internal" + } + ], + "src": "1321:18:15" + }, + "scope": 3061, + "src": "1269:71:15", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 617 + ], + "body": { + "id": 2873, + "nodeType": "Block", + "src": "1466:31:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 2871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1484:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 2870, + "id": 2872, + "nodeType": "Return", + "src": "1477:12:15" + } + ] + }, + "documentation": { + "id": 2861, + "nodeType": "StructuredDocumentation", + "src": "1348:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "1c149e28", + "id": 2874, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onBeforeInitialize", + "nameLocation": "1385:18:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2867, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2864, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2874, + "src": "1404:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2862, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1404:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2863, + "nodeType": "ArrayTypeName", + "src": "1404:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2866, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2874, + "src": "1422:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2865, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1422:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1403:32:15" + }, + "returnParameters": { + "id": 2870, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2869, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2874, + "src": "1460:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2868, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1460:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1459:6:15" + }, + "scope": 3061, + "src": "1376:121:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 630 + ], + "body": { + "id": 2889, + "nodeType": "Block", + "src": "1631:31:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 2887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1649:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 2886, + "id": 2888, + "nodeType": "Return", + "src": "1642:12:15" + } + ] + }, + "documentation": { + "id": 2875, + "nodeType": "StructuredDocumentation", + "src": "1505:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "38be241d", + "id": 2890, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onAfterInitialize", + "nameLocation": "1542:17:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2883, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2878, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2890, + "src": "1560:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1560:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2877, + "nodeType": "ArrayTypeName", + "src": "1560:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2880, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2890, + "src": "1578:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2879, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1578:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2882, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2890, + "src": "1587:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2881, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1587:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1559:41:15" + }, + "returnParameters": { + "id": 2886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2885, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2890, + "src": "1625:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2884, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1625:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1624:6:15" + }, + "scope": 3061, + "src": "1533:129:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 653 + ], + "body": { + "id": 2915, + "nodeType": "Block", + "src": "1923:31:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 2913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1941:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 2912, + "id": 2914, + "nodeType": "Return", + "src": "1934:12:15" + } + ] + }, + "documentation": { + "id": 2891, + "nodeType": "StructuredDocumentation", + "src": "1670:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "45421ec7", + "id": 2916, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onBeforeAddLiquidity", + "nameLocation": "1707:20:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2909, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2893, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1738:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2892, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1738:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2895, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1756:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2894, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1756:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2898, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1774:16:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 2897, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2896, + "name": "AddLiquidityKind", + "nameLocations": [ + "1774:16:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "1774:16:15" + }, + "referencedDeclaration": 2752, + "src": "1774:16:15", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2901, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1801:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2899, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1801:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2900, + "nodeType": "ArrayTypeName", + "src": "1801:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2903, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1828:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2902, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1828:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2906, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1846:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2904, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1846:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2905, + "nodeType": "ArrayTypeName", + "src": "1846:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2908, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1873:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2907, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1873:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1727:165:15" + }, + "returnParameters": { + "id": 2912, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2911, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2916, + "src": "1917:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2910, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1917:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1916:6:15" + }, + "scope": 3061, + "src": "1698:256:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 682 + ], + "body": { + "id": 2949, + "nodeType": "Block", + "src": "2272:47:15", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 2945, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2291:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 2946, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2930, + "src": "2298:12:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 2947, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2290:21:15", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 2944, + "id": 2948, + "nodeType": "Return", + "src": "2283:28:15" + } + ] + }, + "documentation": { + "id": 2917, + "nodeType": "StructuredDocumentation", + "src": "1962:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "976907cc", + "id": 2950, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onAfterAddLiquidity", + "nameLocation": "1999:19:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2938, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2919, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2029:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2918, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2029:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2921, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2047:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2920, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2047:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2924, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2065:16:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 2923, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2922, + "name": "AddLiquidityKind", + "nameLocations": [ + "2065:16:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "2065:16:15" + }, + "referencedDeclaration": 2752, + "src": "2065:16:15", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2927, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2092:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2925, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2092:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2926, + "nodeType": "ArrayTypeName", + "src": "2092:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2930, + "mutability": "mutable", + "name": "amountsInRaw", + "nameLocation": "2136:12:15", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2119:29:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2928, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2119:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2929, + "nodeType": "ArrayTypeName", + "src": "2119:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2932, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2159:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2931, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2159:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2935, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2177:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2933, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2177:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2934, + "nodeType": "ArrayTypeName", + "src": "2177:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2937, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2204:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2936, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2204:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2018:205:15" + }, + "returnParameters": { + "id": 2944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2940, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2248:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2939, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2248:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2943, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2950, + "src": "2254:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2941, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2254:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2942, + "nodeType": "ArrayTypeName", + "src": "2254:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2247:24:15" + }, + "scope": 3061, + "src": "1990:329:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 705 + ], + "body": { + "id": 2975, + "nodeType": "Block", + "src": "2586:31:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 2973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2604:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 2972, + "id": 2974, + "nodeType": "Return", + "src": "2597:12:15" + } + ] + }, + "documentation": { + "id": 2951, + "nodeType": "StructuredDocumentation", + "src": "2327:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "ba5f9f40", + "id": 2976, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onBeforeRemoveLiquidity", + "nameLocation": "2364:23:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2969, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2953, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2398:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2952, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2398:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2955, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2416:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2954, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2416:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2958, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2434:19:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 2957, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2956, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "2434:19:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "2434:19:15" + }, + "referencedDeclaration": 2773, + "src": "2434:19:15", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2960, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2464:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2959, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2464:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2963, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2482:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2961, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2482:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2962, + "nodeType": "ArrayTypeName", + "src": "2482:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2966, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2509:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2964, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2509:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2965, + "nodeType": "ArrayTypeName", + "src": "2509:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2968, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2536:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2967, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2536:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2387:168:15" + }, + "returnParameters": { + "id": 2972, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2971, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 2976, + "src": "2580:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2970, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2580:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2579:6:15" + }, + "scope": 3061, + "src": "2355:262:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 734 + ], + "body": { + "id": 3009, + "nodeType": "Block", + "src": "2942:48:15", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 3005, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2961:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 3006, + "name": "amountsOutRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2992, + "src": "2968:13:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3007, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2960:22:15", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 3004, + "id": 3008, + "nodeType": "Return", + "src": "2953:29:15" + } + ] + }, + "documentation": { + "id": 2977, + "nodeType": "StructuredDocumentation", + "src": "2625:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "2754888d", + "id": 3010, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onAfterRemoveLiquidity", + "nameLocation": "2662:22:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2998, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2979, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2695:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2978, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2695:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2981, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2713:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2980, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2713:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2984, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2731:19:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + }, + "typeName": { + "id": 2983, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 2982, + "name": "RemoveLiquidityKind", + "nameLocations": [ + "2731:19:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2773, + "src": "2731:19:15" + }, + "referencedDeclaration": 2773, + "src": "2731:19:15", + "typeDescriptions": { + "typeIdentifier": "t_enum$_RemoveLiquidityKind_$2773", + "typeString": "enum RemoveLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2986, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2761:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2761:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2989, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2779:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2987, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2779:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2988, + "nodeType": "ArrayTypeName", + "src": "2779:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2992, + "mutability": "mutable", + "name": "amountsOutRaw", + "nameLocation": "2823:13:15", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2806:30:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2990, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2806:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2991, + "nodeType": "ArrayTypeName", + "src": "2806:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2995, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2847:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2993, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2847:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2994, + "nodeType": "ArrayTypeName", + "src": "2847:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2997, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2874:12:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2996, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2874:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2684:209:15" + }, + "returnParameters": { + "id": 3004, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3000, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2918:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2999, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2918:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3003, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3010, + "src": "2924:16:15", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3001, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2924:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3002, + "nodeType": "ArrayTypeName", + "src": "2924:9:15", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2917:24:15" + }, + "scope": 3061, + "src": "2653:337:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 745 + ], + "body": { + "id": 3023, + "nodeType": "Block", + "src": "3112:145:15", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 3021, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3244:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 3020, + "id": 3022, + "nodeType": "Return", + "src": "3237:12:15" + } + ] + }, + "documentation": { + "id": 3011, + "nodeType": "StructuredDocumentation", + "src": "2998:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "5211fa77", + "id": 3024, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onBeforeSwap", + "nameLocation": "3035:12:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3014, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3024, + "src": "3048:23:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_calldata_ptr", + "typeString": "struct PoolSwapParams" + }, + "typeName": { + "id": 3013, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3012, + "name": "PoolSwapParams", + "nameLocations": [ + "3048:14:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2717, + "src": "3048:14:15" + }, + "referencedDeclaration": 2717, + "src": "3048:14:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_storage_ptr", + "typeString": "struct PoolSwapParams" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3016, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3024, + "src": "3073:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3015, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3073:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3047:34:15" + }, + "returnParameters": { + "id": 3020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3019, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3024, + "src": "3106:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3018, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3106:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3105:6:15" + }, + "scope": 3061, + "src": "3026:231:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 756 + ], + "body": { + "id": 3039, + "nodeType": "Block", + "src": "3379:194:15", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 3035, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3556:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 3036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3563:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 3037, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3555:10:15", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 3034, + "id": 3038, + "nodeType": "Return", + "src": "3548:17:15" + } + ] + }, + "documentation": { + "id": 3025, + "nodeType": "StructuredDocumentation", + "src": "3265:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "18b6eb55", + "id": 3040, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onAfterSwap", + "nameLocation": "3302:11:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3029, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3028, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3040, + "src": "3314:24:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AfterSwapParams_$2746_calldata_ptr", + "typeString": "struct AfterSwapParams" + }, + "typeName": { + "id": 3027, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3026, + "name": "AfterSwapParams", + "nameLocations": [ + "3314:15:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2746, + "src": "3314:15:15" + }, + "referencedDeclaration": 2746, + "src": "3314:15:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AfterSwapParams_$2746_storage_ptr", + "typeString": "struct AfterSwapParams" + } + }, + "visibility": "internal" + } + ], + "src": "3313:26:15" + }, + "returnParameters": { + "id": 3034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3031, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3040, + "src": "3364:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3030, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3364:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3033, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3040, + "src": "3370:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3032, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3370:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3363:15:15" + }, + "scope": 3061, + "src": "3293:280:15", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 771 + ], + "body": { + "id": 3059, + "nodeType": "Block", + "src": "3773:36:15", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 3055, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3792:5:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 3056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3799:1:15", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 3057, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3791:10:15", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 3054, + "id": 3058, + "nodeType": "Return", + "src": "3784:17:15" + } + ] + }, + "documentation": { + "id": 3041, + "nodeType": "StructuredDocumentation", + "src": "3581:22:15", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "a0e8f5ac", + "id": 3060, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "onComputeDynamicSwapFeePercentage", + "nameLocation": "3618:33:15", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3049, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3044, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3060, + "src": "3662:23:15", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_calldata_ptr", + "typeString": "struct PoolSwapParams" + }, + "typeName": { + "id": 3043, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3042, + "name": "PoolSwapParams", + "nameLocations": [ + "3662:14:15" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2717, + "src": "3662:14:15" + }, + "referencedDeclaration": 2717, + "src": "3662:14:15", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolSwapParams_$2717_storage_ptr", + "typeString": "struct PoolSwapParams" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3046, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3060, + "src": "3696:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3045, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3696:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3048, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3060, + "src": "3714:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3047, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3714:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3651:77:15" + }, + "returnParameters": { + "id": 3054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3051, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3060, + "src": "3758:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3050, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3758:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3053, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3060, + "src": "3764:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3052, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3764:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3757:15:15" + }, + "scope": 3061, + "src": "3609:200:15", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + } + ], + "scope": 3062, + "src": "869:2943:15", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:3766:15" + }, + "id": 15 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol", + "exportedSymbols": { + "IVault": [ + 1181 + ], + "IVaultErrors": [ + 1807 + ], + "VaultGuard": [ + 3110 + ] + }, + "id": 3111, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3063, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:16" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "id": 3065, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3111, + "sourceUnit": 1182, + "src": "76:144:16", + "symbolAliases": [ + { + "foreign": { + "id": 3064, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "85:6:16", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol", + "id": 3067, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3111, + "sourceUnit": 1808, + "src": "222:156:16", + "symbolAliases": [ + { + "foreign": { + "id": 3066, + "name": "IVaultErrors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1807, + "src": "231:12:16", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "VaultGuard", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 3068, + "nodeType": "StructuredDocumentation", + "src": "382:60:16", + "text": "@notice Contract that shares the modifier `onlyVault`." + }, + "fullyImplemented": true, + "id": 3110, + "linearizedBaseContracts": [ + 3110 + ], + "name": "VaultGuard", + "nameLocation": "451:10:16", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3071, + "mutability": "immutable", + "name": "_vault", + "nameLocation": "495:6:16", + "nodeType": "VariableDeclaration", + "scope": 3110, + "src": "469:32:16", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 3070, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3069, + "name": "IVault", + "nameLocations": [ + "469:6:16" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "469:6:16" + }, + "referencedDeclaration": 1181, + "src": "469:6:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "body": { + "id": 3081, + "nodeType": "Block", + "src": "536:33:16", + "statements": [ + { + "expression": { + "id": 3079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3077, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3071, + "src": "547:6:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3078, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3074, + "src": "556:5:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "src": "547:14:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "id": 3080, + "nodeType": "ExpressionStatement", + "src": "547:14:16" + } + ] + }, + "id": 3082, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3074, + "mutability": "mutable", + "name": "vault", + "nameLocation": "529:5:16", + "nodeType": "VariableDeclaration", + "scope": 3082, + "src": "522:12:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 3073, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3072, + "name": "IVault", + "nameLocations": [ + "522:6:16" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "522:6:16" + }, + "referencedDeclaration": 1181, + "src": "522:6:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "521:14:16" + }, + "returnParameters": { + "id": 3076, + "nodeType": "ParameterList", + "parameters": [], + "src": "536:0:16" + }, + "scope": 3110, + "src": "510:59:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 3088, + "nodeType": "Block", + "src": "598:49:16", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3084, + "name": "_ensureOnlyVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3109, + "src": "609:16:16", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 3085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "609:18:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3086, + "nodeType": "ExpressionStatement", + "src": "609:18:16" + }, + { + "id": 3087, + "nodeType": "PlaceholderStatement", + "src": "638:1:16" + } + ] + }, + "id": 3089, + "name": "onlyVault", + "nameLocation": "586:9:16", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 3083, + "nodeType": "ParameterList", + "parameters": [], + "src": "595:2:16" + }, + "src": "577:70:16", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3108, + "nodeType": "Block", + "src": "696:128:16", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3092, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "711:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "715:6:16", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "711:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "id": 3096, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3071, + "src": "733:6:16", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + ], + "id": 3095, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "725:7:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3094, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "725:7:16", + "typeDescriptions": {} + } + }, + "id": 3097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "725:15:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "711:29:16", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3107, + "nodeType": "IfStatement", + "src": "707:110:16", + "trueBody": { + "id": 3106, + "nodeType": "Block", + "src": "742:75:16", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "expression": { + "id": 3102, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "794:3:16", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "798:6:16", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "794:10:16", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 3099, + "name": "IVaultErrors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1807, + "src": "764:12:16", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVaultErrors_$1807_$", + "typeString": "type(contract IVaultErrors)" + } + }, + "id": 3101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "777:16:16", + "memberName": "SenderIsNotVault", + "nodeType": "MemberAccess", + "referencedDeclaration": 1686, + "src": "764:29:16", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 3104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "764:41:16", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 3105, + "nodeType": "RevertStatement", + "src": "757:48:16" + } + ] + } + } + ] + }, + "id": 3109, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureOnlyVault", + "nameLocation": "664:16:16", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3090, + "nodeType": "ParameterList", + "parameters": [], + "src": "680:2:16" + }, + "returnParameters": { + "id": 3091, + "nodeType": "ParameterList", + "parameters": [], + "src": "696:0:16" + }, + "scope": 3110, + "src": "655:169:16", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 3111, + "src": "442:385:16", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "48:781:16" + }, + "id": 16 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol", + "exportedSymbols": { + "Context": [ + 3562 + ], + "Ownable": [ + 3258 + ] + }, + "id": 3259, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3112, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "105:24:17" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol", + "file": "../utils/Context.sol", + "id": 3114, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3259, + "sourceUnit": 3563, + "src": "133:45:17", + "symbolAliases": [ + { + "foreign": { + "id": 3113, + "name": "Context", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3562, + "src": "141:7:17", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 3116, + "name": "Context", + "nameLocations": [ + "711:7:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3562, + "src": "711:7:17" + }, + "id": 3117, + "nodeType": "InheritanceSpecifier", + "src": "711:7:17" + } + ], + "canonicalName": "Ownable", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 3115, + "nodeType": "StructuredDocumentation", + "src": "182:498:17", + "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner." + }, + "fullyImplemented": true, + "id": 3258, + "linearizedBaseContracts": [ + 3258, + 3562 + ], + "name": "Ownable", + "nameLocation": "700:7:17", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3119, + "mutability": "mutable", + "name": "_owner", + "nameLocation": "742:6:17", + "nodeType": "VariableDeclaration", + "scope": 3258, + "src": "726:22:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3118, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "726:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "documentation": { + "id": 3120, + "nodeType": "StructuredDocumentation", + "src": "757:87:17", + "text": " @dev The caller account is not authorized to perform an operation." + }, + "errorSelector": "118cdaa7", + "id": 3124, + "name": "OwnableUnauthorizedAccount", + "nameLocation": "856:26:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3123, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3122, + "mutability": "mutable", + "name": "account", + "nameLocation": "891:7:17", + "nodeType": "VariableDeclaration", + "scope": 3124, + "src": "883:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3121, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "883:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "882:17:17" + }, + "src": "850:50:17" + }, + { + "documentation": { + "id": 3125, + "nodeType": "StructuredDocumentation", + "src": "908:84:17", + "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)" + }, + "errorSelector": "1e4fbdf7", + "id": 3129, + "name": "OwnableInvalidOwner", + "nameLocation": "1004:19:17", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3127, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1032:5:17", + "nodeType": "VariableDeclaration", + "scope": 3129, + "src": "1024:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1024:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1023:15:17" + }, + "src": "998:41:17" + }, + { + "anonymous": false, + "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "id": 3135, + "name": "OwnershipTransferred", + "nameLocation": "1053:20:17", + "nodeType": "EventDefinition", + "parameters": { + "id": 3134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3131, + "indexed": true, + "mutability": "mutable", + "name": "previousOwner", + "nameLocation": "1090:13:17", + "nodeType": "VariableDeclaration", + "scope": 3135, + "src": "1074:29:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3130, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1074:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3133, + "indexed": true, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "1121:8:17", + "nodeType": "VariableDeclaration", + "scope": 3135, + "src": "1105:24:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3132, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1105:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1073:57:17" + }, + "src": "1047:84:17" + }, + { + "body": { + "id": 3160, + "nodeType": "Block", + "src": "1296:158:17", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3141, + "name": "initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3138, + "src": "1311:12:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1335:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3143, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1327:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3142, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1327:7:17", + "typeDescriptions": {} + } + }, + "id": 3145, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1327:10:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1311:26:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3155, + "nodeType": "IfStatement", + "src": "1307:97:17", + "trueBody": { + "id": 3154, + "nodeType": "Block", + "src": "1339:65:17", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3150, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1389:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3149, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1381:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3148, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1381:7:17", + "typeDescriptions": {} + } + }, + "id": 3151, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1381:10:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3147, + "name": "OwnableInvalidOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3129, + "src": "1361:19:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 3152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1361:31:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 3153, + "nodeType": "RevertStatement", + "src": "1354:38:17" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 3157, + "name": "initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3138, + "src": "1433:12:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3156, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3257, + "src": "1414:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 3158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1414:32:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3159, + "nodeType": "ExpressionStatement", + "src": "1414:32:17" + } + ] + }, + "documentation": { + "id": 3136, + "nodeType": "StructuredDocumentation", + "src": "1139:117:17", + "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner." + }, + "id": 3161, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3139, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3138, + "mutability": "mutable", + "name": "initialOwner", + "nameLocation": "1282:12:17", + "nodeType": "VariableDeclaration", + "scope": 3161, + "src": "1274:20:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1274:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1273:22:17" + }, + "returnParameters": { + "id": 3140, + "nodeType": "ParameterList", + "parameters": [], + "src": "1296:0:17" + }, + "scope": 3258, + "src": "1262:192:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3168, + "nodeType": "Block", + "src": "1568:44:17", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3164, + "name": "_checkOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3195, + "src": "1579:11:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 3165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1579:13:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3166, + "nodeType": "ExpressionStatement", + "src": "1579:13:17" + }, + { + "id": 3167, + "nodeType": "PlaceholderStatement", + "src": "1603:1:17" + } + ] + }, + "documentation": { + "id": 3162, + "nodeType": "StructuredDocumentation", + "src": "1462:79:17", + "text": " @dev Throws if called by any account other than the owner." + }, + "id": 3169, + "name": "onlyOwner", + "nameLocation": "1556:9:17", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 3163, + "nodeType": "ParameterList", + "parameters": [], + "src": "1565:2:17" + }, + "src": "1547:65:17", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3177, + "nodeType": "Block", + "src": "1748:32:17", + "statements": [ + { + "expression": { + "id": 3175, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "1766:6:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 3174, + "id": 3176, + "nodeType": "Return", + "src": "1759:13:17" + } + ] + }, + "documentation": { + "id": 3170, + "nodeType": "StructuredDocumentation", + "src": "1620:67:17", + "text": " @dev Returns the address of the current owner." + }, + "functionSelector": "8da5cb5b", + "id": 3178, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "owner", + "nameLocation": "1702:5:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3171, + "nodeType": "ParameterList", + "parameters": [], + "src": "1707:2:17" + }, + "returnParameters": { + "id": 3174, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3173, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3178, + "src": "1739:7:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3172, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1739:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1738:9:17" + }, + "scope": 3258, + "src": "1693:87:17", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3194, + "nodeType": "Block", + "src": "1903:121:17", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3182, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3178, + "src": "1918:5:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 3183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1918:7:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3184, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3544, + "src": "1929:10:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 3185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1929:12:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1918:23:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3193, + "nodeType": "IfStatement", + "src": "1914:103:17", + "trueBody": { + "id": 3192, + "nodeType": "Block", + "src": "1943:74:17", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3188, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3544, + "src": "1992:10:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 3189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1992:12:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3187, + "name": "OwnableUnauthorizedAccount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3124, + "src": "1965:26:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 3190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1965:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 3191, + "nodeType": "RevertStatement", + "src": "1958:47:17" + } + ] + } + } + ] + }, + "documentation": { + "id": 3179, + "nodeType": "StructuredDocumentation", + "src": "1788:64:17", + "text": " @dev Throws if the sender is not the owner." + }, + "id": 3195, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkOwner", + "nameLocation": "1867:11:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3180, + "nodeType": "ParameterList", + "parameters": [], + "src": "1878:2:17" + }, + "returnParameters": { + "id": 3181, + "nodeType": "ParameterList", + "parameters": [], + "src": "1903:0:17" + }, + "scope": 3258, + "src": "1858:166:17", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3208, + "nodeType": "Block", + "src": "2422:49:17", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3204, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2460:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3203, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2452:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3202, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2452:7:17", + "typeDescriptions": {} + } + }, + "id": 3205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2452:10:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3201, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3257, + "src": "2433:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 3206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2433:30:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3207, + "nodeType": "ExpressionStatement", + "src": "2433:30:17" + } + ] + }, + "documentation": { + "id": 3196, + "nodeType": "StructuredDocumentation", + "src": "2032:330:17", + "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner." + }, + "functionSelector": "715018a6", + "id": 3209, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 3199, + "kind": "modifierInvocation", + "modifierName": { + "id": 3198, + "name": "onlyOwner", + "nameLocations": [ + "2412:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "2412:9:17" + }, + "nodeType": "ModifierInvocation", + "src": "2412:9:17" + } + ], + "name": "renounceOwnership", + "nameLocation": "2377:17:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3197, + "nodeType": "ParameterList", + "parameters": [], + "src": "2394:2:17" + }, + "returnParameters": { + "id": 3200, + "nodeType": "ParameterList", + "parameters": [], + "src": "2422:0:17" + }, + "scope": 3258, + "src": "2368:103:17", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3236, + "nodeType": "Block", + "src": "2696:150:17", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3217, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3212, + "src": "2711:8:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 3220, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2731:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2723:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3218, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2723:7:17", + "typeDescriptions": {} + } + }, + "id": 3221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2723:10:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2711:22:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3231, + "nodeType": "IfStatement", + "src": "2707:93:17", + "trueBody": { + "id": 3230, + "nodeType": "Block", + "src": "2735:65:17", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2785:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3225, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2777:7:17", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3224, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2777:7:17", + "typeDescriptions": {} + } + }, + "id": 3227, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2777:10:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3223, + "name": "OwnableInvalidOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3129, + "src": "2757:19:17", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 3228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2757:31:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + }, + "id": 3229, + "nodeType": "RevertStatement", + "src": "2750:38:17" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 3233, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3212, + "src": "2829:8:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3232, + "name": "_transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3257, + "src": "2810:18:17", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 3234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2810:28:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3235, + "nodeType": "ExpressionStatement", + "src": "2810:28:17" + } + ] + }, + "documentation": { + "id": 3210, + "nodeType": "StructuredDocumentation", + "src": "2479:141:17", + "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner." + }, + "functionSelector": "f2fde38b", + "id": 3237, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 3215, + "kind": "modifierInvocation", + "modifierName": { + "id": 3214, + "name": "onlyOwner", + "nameLocations": [ + "2686:9:17" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "2686:9:17" + }, + "nodeType": "ModifierInvocation", + "src": "2686:9:17" + } + ], + "name": "transferOwnership", + "nameLocation": "2635:17:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3212, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "2661:8:17", + "nodeType": "VariableDeclaration", + "scope": 3237, + "src": "2653:16:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3211, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2653:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2652:18:17" + }, + "returnParameters": { + "id": 3216, + "nodeType": "ParameterList", + "parameters": [], + "src": "2696:0:17" + }, + "scope": 3258, + "src": "2626:220:17", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 3256, + "nodeType": "Block", + "src": "3069:128:17", + "statements": [ + { + "assignments": [ + 3244 + ], + "declarations": [ + { + "constant": false, + "id": 3244, + "mutability": "mutable", + "name": "oldOwner", + "nameLocation": "3088:8:17", + "nodeType": "VariableDeclaration", + "scope": 3256, + "src": "3080:16:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3243, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3080:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 3246, + "initialValue": { + "id": 3245, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "3099:6:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3080:25:17" + }, + { + "expression": { + "id": 3249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3247, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "3116:6:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3248, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3240, + "src": "3125:8:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3116:17:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 3250, + "nodeType": "ExpressionStatement", + "src": "3116:17:17" + }, + { + "eventCall": { + "arguments": [ + { + "id": 3252, + "name": "oldOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3244, + "src": "3170:8:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3253, + "name": "newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3240, + "src": "3180:8:17", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3251, + "name": "OwnershipTransferred", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3135, + "src": "3149:20:17", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 3254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3149:40:17", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3255, + "nodeType": "EmitStatement", + "src": "3144:45:17" + } + ] + }, + "documentation": { + "id": 3238, + "nodeType": "StructuredDocumentation", + "src": "2854:146:17", + "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction." + }, + "id": 3257, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transferOwnership", + "nameLocation": "3015:18:17", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3241, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3240, + "mutability": "mutable", + "name": "newOwner", + "nameLocation": "3042:8:17", + "nodeType": "VariableDeclaration", + "scope": 3257, + "src": "3034:16:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3239, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3034:7:17", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3033:18:17" + }, + "returnParameters": { + "id": 3242, + "nodeType": "ParameterList", + "parameters": [], + "src": "3069:0:17" + }, + "scope": 3258, + "src": "3006:191:17", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 3259, + "src": "682:2518:17", + "usedErrors": [ + 3124, + 3129 + ], + "usedEvents": [ + 3135 + ] + } + ], + "src": "105:3097:17" + }, + "id": 17 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol", + "exportedSymbols": { + "IERC20": [ + 3506 + ], + "IERC20Metadata": [ + 3532 + ], + "IERC4626": [ + 3428 + ] + }, + "id": 3429, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3260, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "110:24:18" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "../token/ERC20/IERC20.sol", + "id": 3262, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3429, + "sourceUnit": 3507, + "src": "138:49:18", + "symbolAliases": [ + { + "foreign": { + "id": 3261, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "146:6:18", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "file": "../token/ERC20/extensions/IERC20Metadata.sol", + "id": 3264, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3429, + "sourceUnit": 3533, + "src": "189:76:18", + "symbolAliases": [ + { + "foreign": { + "id": 3263, + "name": "IERC20Metadata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3532, + "src": "197:14:18", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 3266, + "name": "IERC20", + "nameLocations": [ + "432:6:18" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "432:6:18" + }, + "id": 3267, + "nodeType": "InheritanceSpecifier", + "src": "432:6:18" + }, + { + "baseName": { + "id": 3268, + "name": "IERC20Metadata", + "nameLocations": [ + "440:14:18" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3532, + "src": "440:14:18" + }, + "id": 3269, + "nodeType": "InheritanceSpecifier", + "src": "440:14:18" + } + ], + "canonicalName": "IERC4626", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3265, + "nodeType": "StructuredDocumentation", + "src": "269:139:18", + "text": " @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]." + }, + "fullyImplemented": false, + "id": 3428, + "linearizedBaseContracts": [ + 3428, + 3532, + 3506 + ], + "name": "IERC4626", + "nameLocation": "420:8:18", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "eventSelector": "dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7", + "id": 3279, + "name": "Deposit", + "nameLocation": "468:7:18", + "nodeType": "EventDefinition", + "parameters": { + "id": 3278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3271, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nameLocation": "492:6:18", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "476:22:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3270, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "476:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3273, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "516:5:18", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "500:21:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3272, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "500:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3275, + "indexed": false, + "mutability": "mutable", + "name": "assets", + "nameLocation": "531:6:18", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "523:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3274, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "523:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3277, + "indexed": false, + "mutability": "mutable", + "name": "shares", + "nameLocation": "547:6:18", + "nodeType": "VariableDeclaration", + "scope": 3279, + "src": "539:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "539:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "475:79:18" + }, + "src": "462:93:18" + }, + { + "anonymous": false, + "eventSelector": "fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db", + "id": 3291, + "name": "Withdraw", + "nameLocation": "569:8:18", + "nodeType": "EventDefinition", + "parameters": { + "id": 3290, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3281, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nameLocation": "604:6:18", + "nodeType": "VariableDeclaration", + "scope": 3291, + "src": "588:22:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3280, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "588:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3283, + "indexed": true, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "637:8:18", + "nodeType": "VariableDeclaration", + "scope": 3291, + "src": "621:24:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3282, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "621:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3285, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "672:5:18", + "nodeType": "VariableDeclaration", + "scope": 3291, + "src": "656:21:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3284, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "656:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3287, + "indexed": false, + "mutability": "mutable", + "name": "assets", + "nameLocation": "696:6:18", + "nodeType": "VariableDeclaration", + "scope": 3291, + "src": "688:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3286, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "688:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3289, + "indexed": false, + "mutability": "mutable", + "name": "shares", + "nameLocation": "721:6:18", + "nodeType": "VariableDeclaration", + "scope": 3291, + "src": "713:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3288, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "713:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "577:157:18" + }, + "src": "563:172:18" + }, + { + "documentation": { + "id": 3292, + "nodeType": "StructuredDocumentation", + "src": "743:212:18", + "text": " @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert." + }, + "functionSelector": "38d52e0f", + "id": 3297, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "asset", + "nameLocation": "970:5:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3293, + "nodeType": "ParameterList", + "parameters": [], + "src": "975:2:18" + }, + "returnParameters": { + "id": 3296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3295, + "mutability": "mutable", + "name": "assetTokenAddress", + "nameLocation": "1009:17:18", + "nodeType": "VariableDeclaration", + "scope": 3297, + "src": "1001:25:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3294, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1001:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1000:27:18" + }, + "scope": 3428, + "src": "961:67:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3298, + "nodeType": "StructuredDocumentation", + "src": "1036:292:18", + "text": " @dev Returns the total amount of the underlying asset that is β€œmanaged” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert." + }, + "functionSelector": "01e1d114", + "id": 3303, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalAssets", + "nameLocation": "1343:11:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3299, + "nodeType": "ParameterList", + "parameters": [], + "src": "1354:2:18" + }, + "returnParameters": { + "id": 3302, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3301, + "mutability": "mutable", + "name": "totalManagedAssets", + "nameLocation": "1388:18:18", + "nodeType": "VariableDeclaration", + "scope": 3303, + "src": "1380:26:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3300, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1380:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1379:28:18" + }, + "scope": 3428, + "src": "1334:74:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3304, + "nodeType": "StructuredDocumentation", + "src": "1416:732:18", + "text": " @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the β€œper-user” price-per-share, and instead should reflect the\n β€œaverage-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from." + }, + "functionSelector": "c6e6f592", + "id": 3311, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "convertToShares", + "nameLocation": "2163:15:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3307, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3306, + "mutability": "mutable", + "name": "assets", + "nameLocation": "2187:6:18", + "nodeType": "VariableDeclaration", + "scope": 3311, + "src": "2179:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3305, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2179:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2178:16:18" + }, + "returnParameters": { + "id": 3310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3309, + "mutability": "mutable", + "name": "shares", + "nameLocation": "2226:6:18", + "nodeType": "VariableDeclaration", + "scope": 3311, + "src": "2218:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2218:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2217:16:18" + }, + "scope": 3428, + "src": "2154:80:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3312, + "nodeType": "StructuredDocumentation", + "src": "2242:732:18", + "text": " @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the β€œper-user” price-per-share, and instead should reflect the\n β€œaverage-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from." + }, + "functionSelector": "07a2d13a", + "id": 3319, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "convertToAssets", + "nameLocation": "2989:15:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3315, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3314, + "mutability": "mutable", + "name": "shares", + "nameLocation": "3013:6:18", + "nodeType": "VariableDeclaration", + "scope": 3319, + "src": "3005:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3313, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3005:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3004:16:18" + }, + "returnParameters": { + "id": 3318, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3317, + "mutability": "mutable", + "name": "assets", + "nameLocation": "3052:6:18", + "nodeType": "VariableDeclaration", + "scope": 3319, + "src": "3044:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3316, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3044:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3043:16:18" + }, + "scope": 3428, + "src": "2980:80:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3320, + "nodeType": "StructuredDocumentation", + "src": "3068:393:18", + "text": " @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert." + }, + "functionSelector": "402d267d", + "id": 3327, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "maxDeposit", + "nameLocation": "3476:10:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3322, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "3495:8:18", + "nodeType": "VariableDeclaration", + "scope": 3327, + "src": "3487:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3487:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3486:18:18" + }, + "returnParameters": { + "id": 3326, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3325, + "mutability": "mutable", + "name": "maxAssets", + "nameLocation": "3536:9:18", + "nodeType": "VariableDeclaration", + "scope": 3327, + "src": "3528:17:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3324, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3528:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3527:19:18" + }, + "scope": 3428, + "src": "3467:80:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3328, + "nodeType": "StructuredDocumentation", + "src": "3555:1026:18", + "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing." + }, + "functionSelector": "ef8b30f7", + "id": 3335, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "previewDeposit", + "nameLocation": "4596:14:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3330, + "mutability": "mutable", + "name": "assets", + "nameLocation": "4619:6:18", + "nodeType": "VariableDeclaration", + "scope": 3335, + "src": "4611:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4611:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4610:16:18" + }, + "returnParameters": { + "id": 3334, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3333, + "mutability": "mutable", + "name": "shares", + "nameLocation": "4658:6:18", + "nodeType": "VariableDeclaration", + "scope": 3335, + "src": "4650:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4650:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4649:16:18" + }, + "scope": 3428, + "src": "4587:79:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3336, + "nodeType": "StructuredDocumentation", + "src": "4674:661:18", + "text": " @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." + }, + "functionSelector": "6e553f65", + "id": 3345, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nameLocation": "5350:7:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3341, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3338, + "mutability": "mutable", + "name": "assets", + "nameLocation": "5366:6:18", + "nodeType": "VariableDeclaration", + "scope": 3345, + "src": "5358:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3337, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5358:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3340, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "5382:8:18", + "nodeType": "VariableDeclaration", + "scope": 3345, + "src": "5374:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3339, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5374:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5357:34:18" + }, + "returnParameters": { + "id": 3344, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3343, + "mutability": "mutable", + "name": "shares", + "nameLocation": "5418:6:18", + "nodeType": "VariableDeclaration", + "scope": 3345, + "src": "5410:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3342, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5410:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5409:16:18" + }, + "scope": 3428, + "src": "5341:85:18", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3346, + "nodeType": "StructuredDocumentation", + "src": "5434:346:18", + "text": " @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert." + }, + "functionSelector": "c63d75b6", + "id": 3353, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "maxMint", + "nameLocation": "5795:7:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3349, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3348, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "5811:8:18", + "nodeType": "VariableDeclaration", + "scope": 3353, + "src": "5803:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3347, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5803:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5802:18:18" + }, + "returnParameters": { + "id": 3352, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3351, + "mutability": "mutable", + "name": "maxShares", + "nameLocation": "5852:9:18", + "nodeType": "VariableDeclaration", + "scope": 3353, + "src": "5844:17:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3350, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5844:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5843:19:18" + }, + "scope": 3428, + "src": "5786:77:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3354, + "nodeType": "StructuredDocumentation", + "src": "5871:998:18", + "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting." + }, + "functionSelector": "b3d7f6b9", + "id": 3361, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "previewMint", + "nameLocation": "6884:11:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3356, + "mutability": "mutable", + "name": "shares", + "nameLocation": "6904:6:18", + "nodeType": "VariableDeclaration", + "scope": 3361, + "src": "6896:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3355, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6896:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6895:16:18" + }, + "returnParameters": { + "id": 3360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3359, + "mutability": "mutable", + "name": "assets", + "nameLocation": "6943:6:18", + "nodeType": "VariableDeclaration", + "scope": 3361, + "src": "6935:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6935:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6934:16:18" + }, + "scope": 3428, + "src": "6875:76:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3362, + "nodeType": "StructuredDocumentation", + "src": "6959:652:18", + "text": " @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." + }, + "functionSelector": "94bf804d", + "id": 3371, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "mint", + "nameLocation": "7626:4:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3367, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3364, + "mutability": "mutable", + "name": "shares", + "nameLocation": "7639:6:18", + "nodeType": "VariableDeclaration", + "scope": 3371, + "src": "7631:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7631:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3366, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "7655:8:18", + "nodeType": "VariableDeclaration", + "scope": 3371, + "src": "7647:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3365, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7647:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7630:34:18" + }, + "returnParameters": { + "id": 3370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3369, + "mutability": "mutable", + "name": "assets", + "nameLocation": "7691:6:18", + "nodeType": "VariableDeclaration", + "scope": 3371, + "src": "7683:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7683:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7682:16:18" + }, + "scope": 3428, + "src": "7617:82:18", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3372, + "nodeType": "StructuredDocumentation", + "src": "7707:299:18", + "text": " @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert." + }, + "functionSelector": "ce96cb77", + "id": 3379, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "maxWithdraw", + "nameLocation": "8021:11:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3374, + "mutability": "mutable", + "name": "owner", + "nameLocation": "8041:5:18", + "nodeType": "VariableDeclaration", + "scope": 3379, + "src": "8033:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3373, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8033:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8032:15:18" + }, + "returnParameters": { + "id": 3378, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3377, + "mutability": "mutable", + "name": "maxAssets", + "nameLocation": "8079:9:18", + "nodeType": "VariableDeclaration", + "scope": 3379, + "src": "8071:17:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8071:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8070:19:18" + }, + "scope": 3428, + "src": "8012:78:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3380, + "nodeType": "StructuredDocumentation", + "src": "8098:1049:18", + "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing." + }, + "functionSelector": "0a28a477", + "id": 3387, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "previewWithdraw", + "nameLocation": "9162:15:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3383, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3382, + "mutability": "mutable", + "name": "assets", + "nameLocation": "9186:6:18", + "nodeType": "VariableDeclaration", + "scope": 3387, + "src": "9178:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3381, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9178:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9177:16:18" + }, + "returnParameters": { + "id": 3386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3385, + "mutability": "mutable", + "name": "shares", + "nameLocation": "9225:6:18", + "nodeType": "VariableDeclaration", + "scope": 3387, + "src": "9217:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9217:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9216:16:18" + }, + "scope": 3428, + "src": "9153:80:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3388, + "nodeType": "StructuredDocumentation", + "src": "9241:681:18", + "text": " @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately." + }, + "functionSelector": "b460af94", + "id": 3399, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nameLocation": "9937:8:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3395, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3390, + "mutability": "mutable", + "name": "assets", + "nameLocation": "9954:6:18", + "nodeType": "VariableDeclaration", + "scope": 3399, + "src": "9946:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9946:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3392, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "9970:8:18", + "nodeType": "VariableDeclaration", + "scope": 3399, + "src": "9962:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3391, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9962:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3394, + "mutability": "mutable", + "name": "owner", + "nameLocation": "9988:5:18", + "nodeType": "VariableDeclaration", + "scope": 3399, + "src": "9980:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3393, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9980:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "9945:49:18" + }, + "returnParameters": { + "id": 3398, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3397, + "mutability": "mutable", + "name": "shares", + "nameLocation": "10021:6:18", + "nodeType": "VariableDeclaration", + "scope": 3399, + "src": "10013:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3396, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10013:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10012:16:18" + }, + "scope": 3428, + "src": "9928:101:18", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3400, + "nodeType": "StructuredDocumentation", + "src": "10037:388:18", + "text": " @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert." + }, + "functionSelector": "d905777e", + "id": 3407, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "maxRedeem", + "nameLocation": "10440:9:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3402, + "mutability": "mutable", + "name": "owner", + "nameLocation": "10458:5:18", + "nodeType": "VariableDeclaration", + "scope": 3407, + "src": "10450:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3401, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10450:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10449:15:18" + }, + "returnParameters": { + "id": 3406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3405, + "mutability": "mutable", + "name": "maxShares", + "nameLocation": "10496:9:18", + "nodeType": "VariableDeclaration", + "scope": 3407, + "src": "10488:17:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3404, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10488:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10487:19:18" + }, + "scope": 3428, + "src": "10431:76:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3408, + "nodeType": "StructuredDocumentation", + "src": "10515:1024:18", + "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming." + }, + "functionSelector": "4cdad506", + "id": 3415, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "previewRedeem", + "nameLocation": "11554:13:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3411, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3410, + "mutability": "mutable", + "name": "shares", + "nameLocation": "11576:6:18", + "nodeType": "VariableDeclaration", + "scope": 3415, + "src": "11568:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11568:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11567:16:18" + }, + "returnParameters": { + "id": 3414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3413, + "mutability": "mutable", + "name": "assets", + "nameLocation": "11615:6:18", + "nodeType": "VariableDeclaration", + "scope": 3415, + "src": "11607:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3412, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11607:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11606:16:18" + }, + "scope": 3428, + "src": "11545:78:18", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3416, + "nodeType": "StructuredDocumentation", + "src": "11631:672:18", + "text": " @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately." + }, + "functionSelector": "ba087652", + "id": 3427, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "redeem", + "nameLocation": "12318:6:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3423, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3418, + "mutability": "mutable", + "name": "shares", + "nameLocation": "12333:6:18", + "nodeType": "VariableDeclaration", + "scope": 3427, + "src": "12325:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3417, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12325:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3420, + "mutability": "mutable", + "name": "receiver", + "nameLocation": "12349:8:18", + "nodeType": "VariableDeclaration", + "scope": 3427, + "src": "12341:16:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3419, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12341:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3422, + "mutability": "mutable", + "name": "owner", + "nameLocation": "12367:5:18", + "nodeType": "VariableDeclaration", + "scope": 3427, + "src": "12359:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3421, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12359:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12324:49:18" + }, + "returnParameters": { + "id": 3426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3425, + "mutability": "mutable", + "name": "assets", + "nameLocation": "12400:6:18", + "nodeType": "VariableDeclaration", + "scope": 3427, + "src": "12392:14:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3424, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12392:7:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12391:16:18" + }, + "scope": 3428, + "src": "12309:99:18", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3429, + "src": "410:12001:18", + "usedErrors": [], + "usedEvents": [ + 3279, + 3291, + 3440, + 3449 + ] + } + ], + "src": "110:12303:18" + }, + "id": 18 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "exportedSymbols": { + "IERC20": [ + 3506 + ] + }, + "id": 3507, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3430, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "109:24:19" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IERC20", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3431, + "nodeType": "StructuredDocumentation", + "src": "137:72:19", + "text": " @dev Interface of the ERC20 standard as defined in the EIP." + }, + "fullyImplemented": false, + "id": 3506, + "linearizedBaseContracts": [ + 3506 + ], + "name": "IERC20", + "nameLocation": "221:6:19", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 3432, + "nodeType": "StructuredDocumentation", + "src": "235:163:19", + "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." + }, + "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "id": 3440, + "name": "Transfer", + "nameLocation": "410:8:19", + "nodeType": "EventDefinition", + "parameters": { + "id": 3439, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3434, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nameLocation": "435:4:19", + "nodeType": "VariableDeclaration", + "scope": 3440, + "src": "419:20:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3433, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "419:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3436, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nameLocation": "457:2:19", + "nodeType": "VariableDeclaration", + "scope": 3440, + "src": "441:18:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3435, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "441:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3438, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "469:5:19", + "nodeType": "VariableDeclaration", + "scope": 3440, + "src": "461:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "461:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "418:57:19" + }, + "src": "404:72:19" + }, + { + "anonymous": false, + "documentation": { + "id": 3441, + "nodeType": "StructuredDocumentation", + "src": "484:151:19", + "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." + }, + "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "id": 3449, + "name": "Approval", + "nameLocation": "647:8:19", + "nodeType": "EventDefinition", + "parameters": { + "id": 3448, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3443, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "672:5:19", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "656:21:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3442, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "656:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3445, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "695:7:19", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "679:23:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3444, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "679:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3447, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nameLocation": "712:5:19", + "nodeType": "VariableDeclaration", + "scope": 3449, + "src": "704:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3446, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "704:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "655:63:19" + }, + "src": "641:78:19" + }, + { + "documentation": { + "id": 3450, + "nodeType": "StructuredDocumentation", + "src": "727:67:19", + "text": " @dev Returns the value of tokens in existence." + }, + "functionSelector": "18160ddd", + "id": 3455, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nameLocation": "809:11:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3451, + "nodeType": "ParameterList", + "parameters": [], + "src": "820:2:19" + }, + "returnParameters": { + "id": 3454, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3453, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3455, + "src": "846:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3452, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "846:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "845:9:19" + }, + "scope": 3506, + "src": "800:55:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3456, + "nodeType": "StructuredDocumentation", + "src": "863:73:19", + "text": " @dev Returns the value of tokens owned by `account`." + }, + "functionSelector": "70a08231", + "id": 3463, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "951:9:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3459, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3458, + "mutability": "mutable", + "name": "account", + "nameLocation": "969:7:19", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "961:15:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3457, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "961:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "960:17:19" + }, + "returnParameters": { + "id": 3462, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3461, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3463, + "src": "1001:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3460, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1001:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1000:9:19" + }, + "scope": 3506, + "src": "942:68:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3464, + "nodeType": "StructuredDocumentation", + "src": "1018:219:19", + "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "a9059cbb", + "id": 3473, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nameLocation": "1252:8:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3469, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3466, + "mutability": "mutable", + "name": "to", + "nameLocation": "1269:2:19", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "1261:10:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3465, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1261:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3468, + "mutability": "mutable", + "name": "value", + "nameLocation": "1281:5:19", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "1273:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3467, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1273:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1260:27:19" + }, + "returnParameters": { + "id": 3472, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3471, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3473, + "src": "1306:4:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3470, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1306:4:19", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1305:6:19" + }, + "scope": 3506, + "src": "1243:69:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3474, + "nodeType": "StructuredDocumentation", + "src": "1320:270:19", + "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." + }, + "functionSelector": "dd62ed3e", + "id": 3483, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "1605:9:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3479, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3476, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1623:5:19", + "nodeType": "VariableDeclaration", + "scope": 3483, + "src": "1615:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3475, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1615:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3478, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1638:7:19", + "nodeType": "VariableDeclaration", + "scope": 3483, + "src": "1630:15:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3477, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1630:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1614:32:19" + }, + "returnParameters": { + "id": 3482, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3481, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3483, + "src": "1670:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3480, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1670:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1669:9:19" + }, + "scope": 3506, + "src": "1596:83:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3484, + "nodeType": "StructuredDocumentation", + "src": "1687:681:19", + "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." + }, + "functionSelector": "095ea7b3", + "id": 3493, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "2383:7:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3489, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3486, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2399:7:19", + "nodeType": "VariableDeclaration", + "scope": 3493, + "src": "2391:15:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3485, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2391:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3488, + "mutability": "mutable", + "name": "value", + "nameLocation": "2416:5:19", + "nodeType": "VariableDeclaration", + "scope": 3493, + "src": "2408:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3487, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2408:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2390:32:19" + }, + "returnParameters": { + "id": 3492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3491, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3493, + "src": "2441:4:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3490, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2441:4:19", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2440:6:19" + }, + "scope": 3506, + "src": "2374:73:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3494, + "nodeType": "StructuredDocumentation", + "src": "2455:305:19", + "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "23b872dd", + "id": 3505, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "2775:12:19", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3501, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3496, + "mutability": "mutable", + "name": "from", + "nameLocation": "2796:4:19", + "nodeType": "VariableDeclaration", + "scope": 3505, + "src": "2788:12:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3495, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2788:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3498, + "mutability": "mutable", + "name": "to", + "nameLocation": "2810:2:19", + "nodeType": "VariableDeclaration", + "scope": 3505, + "src": "2802:10:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3497, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2802:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3500, + "mutability": "mutable", + "name": "value", + "nameLocation": "2822:5:19", + "nodeType": "VariableDeclaration", + "scope": 3505, + "src": "2814:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3499, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2814:7:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2787:41:19" + }, + "returnParameters": { + "id": 3504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3503, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3505, + "src": "2847:4:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3502, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2847:4:19", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2846:6:19" + }, + "scope": 3506, + "src": "2766:87:19", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3507, + "src": "211:2645:19", + "usedErrors": [], + "usedEvents": [ + 3440, + 3449 + ] + } + ], + "src": "109:2749:19" + }, + "id": 19 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "exportedSymbols": { + "IERC20": [ + 3506 + ], + "IERC20Metadata": [ + 3532 + ] + }, + "id": 3533, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3508, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "128:24:20" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "../IERC20.sol", + "id": 3510, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3533, + "sourceUnit": 3507, + "src": "156:37:20", + "symbolAliases": [ + { + "foreign": { + "id": 3509, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "164:6:20", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 3512, + "name": "IERC20", + "nameLocations": [ + "315:6:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "315:6:20" + }, + "id": 3513, + "nodeType": "InheritanceSpecifier", + "src": "315:6:20" + } + ], + "canonicalName": "IERC20Metadata", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3511, + "nodeType": "StructuredDocumentation", + "src": "197:88:20", + "text": " @dev Interface for the optional metadata functions from the ERC20 standard." + }, + "fullyImplemented": false, + "id": 3532, + "linearizedBaseContracts": [ + 3532, + 3506 + ], + "name": "IERC20Metadata", + "nameLocation": "297:14:20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 3514, + "nodeType": "StructuredDocumentation", + "src": "329:56:20", + "text": " @dev Returns the name of the token." + }, + "functionSelector": "06fdde03", + "id": 3519, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "name", + "nameLocation": "400:4:20", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3515, + "nodeType": "ParameterList", + "parameters": [], + "src": "404:2:20" + }, + "returnParameters": { + "id": 3518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3517, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "430:13:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3516, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "430:6:20", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "429:15:20" + }, + "scope": 3532, + "src": "391:54:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3520, + "nodeType": "StructuredDocumentation", + "src": "453:58:20", + "text": " @dev Returns the symbol of the token." + }, + "functionSelector": "95d89b41", + "id": 3525, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "symbol", + "nameLocation": "526:6:20", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3521, + "nodeType": "ParameterList", + "parameters": [], + "src": "532:2:20" + }, + "returnParameters": { + "id": 3524, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3523, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3525, + "src": "558:13:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 3522, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "558:6:20", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "557:15:20" + }, + "scope": 3532, + "src": "517:56:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3526, + "nodeType": "StructuredDocumentation", + "src": "581:67:20", + "text": " @dev Returns the decimals places of the token." + }, + "functionSelector": "313ce567", + "id": 3531, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "663:8:20", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3527, + "nodeType": "ParameterList", + "parameters": [], + "src": "671:2:20" + }, + "returnParameters": { + "id": 3530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3529, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3531, + "src": "697:5:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 3528, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "697:5:20", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "696:7:20" + }, + "scope": 3532, + "src": "654:50:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3533, + "src": "287:420:20", + "usedErrors": [], + "usedEvents": [ + 3440, + 3449 + ] + } + ], + "src": "128:581:20" + }, + "id": 20 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol", + "exportedSymbols": { + "Context": [ + 3562 + ] + }, + "id": 3563, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3534, + "literals": [ + "solidity", + "^", + "0.8", + ".20" + ], + "nodeType": "PragmaDirective", + "src": "104:24:21" + }, + { + "abstract": true, + "baseContracts": [], + "canonicalName": "Context", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 3535, + "nodeType": "StructuredDocumentation", + "src": "132:505:21", + "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." + }, + "fullyImplemented": true, + "id": 3562, + "linearizedBaseContracts": [ + 3562 + ], + "name": "Context", + "nameLocation": "657:7:21", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 3543, + "nodeType": "Block", + "src": "734:36:21", + "statements": [ + { + "expression": { + "expression": { + "id": 3540, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "752:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "756:6:21", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "752:10:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 3539, + "id": 3542, + "nodeType": "Return", + "src": "745:17:21" + } + ] + }, + "id": 3544, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgSender", + "nameLocation": "681:10:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3536, + "nodeType": "ParameterList", + "parameters": [], + "src": "691:2:21" + }, + "returnParameters": { + "id": 3539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3538, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3544, + "src": "725:7:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3537, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "725:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "724:9:21" + }, + "scope": 3562, + "src": "672:98:21", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3552, + "nodeType": "Block", + "src": "845:34:21", + "statements": [ + { + "expression": { + "expression": { + "id": 3549, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "863:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "867:4:21", + "memberName": "data", + "nodeType": "MemberAccess", + "src": "863:8:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "functionReturnParameters": 3548, + "id": 3551, + "nodeType": "Return", + "src": "856:15:21" + } + ] + }, + "id": 3553, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_msgData", + "nameLocation": "787:8:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3545, + "nodeType": "ParameterList", + "parameters": [], + "src": "795:2:21" + }, + "returnParameters": { + "id": 3548, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3547, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3553, + "src": "829:14:21", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3546, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "829:5:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "828:16:21" + }, + "scope": 3562, + "src": "778:101:21", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3560, + "nodeType": "Block", + "src": "959:27:21", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 3558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "977:1:21", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 3557, + "id": 3559, + "nodeType": "Return", + "src": "970:8:21" + } + ] + }, + "id": 3561, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_contextSuffixLength", + "nameLocation": "896:20:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3554, + "nodeType": "ParameterList", + "parameters": [], + "src": "916:2:21" + }, + "returnParameters": { + "id": 3557, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3556, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3561, + "src": "950:7:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3555, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "950:7:21", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "949:9:21" + }, + "scope": 3562, + "src": "887:99:21", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 3563, + "src": "639:350:21", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "104:887:21" + }, + "id": 21 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol", + "exportedSymbols": { + "IAllowanceTransfer": [ + 3774 + ], + "IEIP712": [ + 3782 + ] + }, + "id": 3775, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3564, + "literals": [ + "solidity", + "^", + "0.8", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:22" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol", + "file": "./IEIP712.sol", + "id": 3566, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 3775, + "sourceUnit": 3783, + "src": "60:38:22", + "symbolAliases": [ + { + "foreign": { + "id": 3565, + "name": "IEIP712", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3782, + "src": "68:7:22", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 3568, + "name": "IEIP712", + "nameLocations": [ + "370:7:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3782, + "src": "370:7:22" + }, + "id": 3569, + "nodeType": "InheritanceSpecifier", + "src": "370:7:22" + } + ], + "canonicalName": "IAllowanceTransfer", + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 3567, + "nodeType": "StructuredDocumentation", + "src": "102:236:22", + "text": "@title AllowanceTransfer\n @notice Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\n @dev Requires user's token approval on the Permit2 contract" + }, + "fullyImplemented": false, + "id": 3774, + "linearizedBaseContracts": [ + 3774, + 3782 + ], + "name": "IAllowanceTransfer", + "nameLocation": "348:18:22", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 3570, + "nodeType": "StructuredDocumentation", + "src": "385:146:22", + "text": "@notice Thrown when an allowance on a token has expired.\n @param deadline The timestamp at which the allowed amount is no longer valid" + }, + "errorSelector": "d81b2f2e", + "id": 3574, + "name": "AllowanceExpired", + "nameLocation": "543:16:22", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3572, + "mutability": "mutable", + "name": "deadline", + "nameLocation": "568:8:22", + "nodeType": "VariableDeclaration", + "scope": 3574, + "src": "560:16:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "560:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "559:18:22" + }, + "src": "537:41:22" + }, + { + "documentation": { + "id": 3575, + "nodeType": "StructuredDocumentation", + "src": "586:116:22", + "text": "@notice Thrown when an allowance on a token has been depleted.\n @param amount The maximum amount allowed" + }, + "errorSelector": "f96fb071", + "id": 3579, + "name": "InsufficientAllowance", + "nameLocation": "714:21:22", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3578, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3577, + "mutability": "mutable", + "name": "amount", + "nameLocation": "744:6:22", + "nodeType": "VariableDeclaration", + "scope": 3579, + "src": "736:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3576, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "736:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "735:16:22" + }, + "src": "708:44:22" + }, + { + "documentation": { + "id": 3580, + "nodeType": "StructuredDocumentation", + "src": "760:56:22", + "text": "@notice Thrown when too many nonces are invalidated." + }, + "errorSelector": "24d35a26", + "id": 3582, + "name": "ExcessiveInvalidation", + "nameLocation": "828:21:22", + "nodeType": "ErrorDefinition", + "parameters": { + "id": 3581, + "nodeType": "ParameterList", + "parameters": [], + "src": "849:2:22" + }, + "src": "822:30:22" + }, + { + "anonymous": false, + "documentation": { + "id": 3583, + "nodeType": "StructuredDocumentation", + "src": "860:84:22", + "text": "@notice Emits an event when the owner successfully invalidates an ordered nonce." + }, + "eventSelector": "55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f3", + "id": 3595, + "name": "NonceInvalidation", + "nameLocation": "956:17:22", + "nodeType": "EventDefinition", + "parameters": { + "id": 3594, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3585, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1000:5:22", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "984:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3584, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "984:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3587, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "1023:5:22", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "1007:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3586, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1007:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3589, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1046:7:22", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "1030:23:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3588, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1030:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3591, + "indexed": false, + "mutability": "mutable", + "name": "newNonce", + "nameLocation": "1062:8:22", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "1055:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3590, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "1055:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3593, + "indexed": false, + "mutability": "mutable", + "name": "oldNonce", + "nameLocation": "1079:8:22", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "1072:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3592, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "1072:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "973:121:22" + }, + "src": "950:145:22" + }, + { + "anonymous": false, + "documentation": { + "id": 3596, + "nodeType": "StructuredDocumentation", + "src": "1103:99:22", + "text": "@notice Emits an event when the owner successfully sets permissions on a token for the spender." + }, + "eventSelector": "da9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b", + "id": 3608, + "name": "Approval", + "nameLocation": "1214:8:22", + "nodeType": "EventDefinition", + "parameters": { + "id": 3607, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3598, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1249:5:22", + "nodeType": "VariableDeclaration", + "scope": 3608, + "src": "1233:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3597, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1233:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3600, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "1272:5:22", + "nodeType": "VariableDeclaration", + "scope": 3608, + "src": "1256:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3599, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1256:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3602, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1295:7:22", + "nodeType": "VariableDeclaration", + "scope": 3608, + "src": "1279:23:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3601, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1279:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3604, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "1312:6:22", + "nodeType": "VariableDeclaration", + "scope": 3608, + "src": "1304:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3603, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "1304:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3606, + "indexed": false, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "1327:10:22", + "nodeType": "VariableDeclaration", + "scope": 3608, + "src": "1320:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3605, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "1320:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "1222:122:22" + }, + "src": "1208:137:22" + }, + { + "anonymous": false, + "documentation": { + "id": 3609, + "nodeType": "StructuredDocumentation", + "src": "1353:124:22", + "text": "@notice Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender." + }, + "eventSelector": "c6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec", + "id": 3623, + "name": "Permit", + "nameLocation": "1489:6:22", + "nodeType": "EventDefinition", + "parameters": { + "id": 3622, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3611, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1522:5:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1506:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3610, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1506:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3613, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nameLocation": "1554:5:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1538:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3612, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1538:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3615, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1586:7:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1570:23:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3614, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1570:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3617, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nameLocation": "1612:6:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1604:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3616, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "1604:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3619, + "indexed": false, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "1636:10:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1629:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3618, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "1629:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3621, + "indexed": false, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "1664:5:22", + "nodeType": "VariableDeclaration", + "scope": 3623, + "src": "1657:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3620, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "1657:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "1495:181:22" + }, + "src": "1483:194:22" + }, + { + "anonymous": false, + "documentation": { + "id": 3624, + "nodeType": "StructuredDocumentation", + "src": "1685:98:22", + "text": "@notice Emits an event when the owner sets the allowance back to 0 with the lockdown function." + }, + "eventSelector": "89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4", + "id": 3632, + "name": "Lockdown", + "nameLocation": "1795:8:22", + "nodeType": "EventDefinition", + "parameters": { + "id": 3631, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3626, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nameLocation": "1820:5:22", + "nodeType": "VariableDeclaration", + "scope": 3632, + "src": "1804:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3625, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1804:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3628, + "indexed": false, + "mutability": "mutable", + "name": "token", + "nameLocation": "1835:5:22", + "nodeType": "VariableDeclaration", + "scope": 3632, + "src": "1827:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3627, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1827:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3630, + "indexed": false, + "mutability": "mutable", + "name": "spender", + "nameLocation": "1850:7:22", + "nodeType": "VariableDeclaration", + "scope": 3632, + "src": "1842:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3629, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1842:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1803:55:22" + }, + "src": "1789:70:22" + }, + { + "canonicalName": "IAllowanceTransfer.PermitDetails", + "documentation": { + "id": 3633, + "nodeType": "StructuredDocumentation", + "src": "1867:39:22", + "text": "@notice The permit data for a token" + }, + "id": 3642, + "members": [ + { + "constant": false, + "id": 3635, + "mutability": "mutable", + "name": "token", + "nameLocation": "1984:5:22", + "nodeType": "VariableDeclaration", + "scope": 3642, + "src": "1976:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3634, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1976:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3637, + "mutability": "mutable", + "name": "amount", + "nameLocation": "2056:6:22", + "nodeType": "VariableDeclaration", + "scope": 3642, + "src": "2048:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3636, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "2048:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3639, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "2155:10:22", + "nodeType": "VariableDeclaration", + "scope": 3642, + "src": "2148:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3638, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "2148:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3641, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "2272:5:22", + "nodeType": "VariableDeclaration", + "scope": 3642, + "src": "2265:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3640, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "2265:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "name": "PermitDetails", + "nameLocation": "1919:13:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "1912:373:22", + "visibility": "public" + }, + { + "canonicalName": "IAllowanceTransfer.PermitSingle", + "documentation": { + "id": 3643, + "nodeType": "StructuredDocumentation", + "src": "2293:66:22", + "text": "@notice The permit message signed for a single token allowance" + }, + "id": 3651, + "members": [ + { + "constant": false, + "id": 3646, + "mutability": "mutable", + "name": "details", + "nameLocation": "2465:7:22", + "nodeType": "VariableDeclaration", + "scope": 3651, + "src": "2451:21:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitDetails_$3642_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitDetails" + }, + "typeName": { + "id": 3645, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3644, + "name": "PermitDetails", + "nameLocations": [ + "2451:13:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3642, + "src": "2451:13:22" + }, + "referencedDeclaration": 3642, + "src": "2451:13:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitDetails_$3642_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3648, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2546:7:22", + "nodeType": "VariableDeclaration", + "scope": 3651, + "src": "2538:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3647, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2538:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3650, + "mutability": "mutable", + "name": "sigDeadline", + "nameLocation": "2617:11:22", + "nodeType": "VariableDeclaration", + "scope": 3651, + "src": "2609:19:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3649, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2609:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PermitSingle", + "nameLocation": "2372:12:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "2365:271:22", + "visibility": "public" + }, + { + "canonicalName": "IAllowanceTransfer.PermitBatch", + "documentation": { + "id": 3652, + "nodeType": "StructuredDocumentation", + "src": "2644:67:22", + "text": "@notice The permit message signed for multiple token allowances" + }, + "id": 3661, + "members": [ + { + "constant": false, + "id": 3656, + "mutability": "mutable", + "name": "details", + "nameLocation": "2821:7:22", + "nodeType": "VariableDeclaration", + "scope": 3661, + "src": "2805:23:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PermitDetails_$3642_storage_$dyn_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitDetails[]" + }, + "typeName": { + "baseType": { + "id": 3654, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3653, + "name": "PermitDetails", + "nameLocations": [ + "2805:13:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3642, + "src": "2805:13:22" + }, + "referencedDeclaration": 3642, + "src": "2805:13:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitDetails_$3642_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitDetails" + } + }, + "id": 3655, + "nodeType": "ArrayTypeName", + "src": "2805:15:22", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PermitDetails_$3642_storage_$dyn_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitDetails[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3658, + "mutability": "mutable", + "name": "spender", + "nameLocation": "2902:7:22", + "nodeType": "VariableDeclaration", + "scope": 3661, + "src": "2894:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3657, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2894:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3660, + "mutability": "mutable", + "name": "sigDeadline", + "nameLocation": "2973:11:22", + "nodeType": "VariableDeclaration", + "scope": 3661, + "src": "2965:19:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3659, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2965:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PermitBatch", + "nameLocation": "2724:11:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "2717:275:22", + "visibility": "public" + }, + { + "canonicalName": "IAllowanceTransfer.PackedAllowance", + "documentation": { + "id": 3662, + "nodeType": "StructuredDocumentation", + "src": "3000:219:22", + "text": "@notice The saved permissions\n @dev This info is saved per owner, per token, per spender and all signed over in the permit message\n @dev Setting amount to type(uint160).max sets an unlimited approval" + }, + "id": 3669, + "members": [ + { + "constant": false, + "id": 3664, + "mutability": "mutable", + "name": "amount", + "nameLocation": "3294:6:22", + "nodeType": "VariableDeclaration", + "scope": 3669, + "src": "3286:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3663, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "3286:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3666, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "3348:10:22", + "nodeType": "VariableDeclaration", + "scope": 3669, + "src": "3341:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3665, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "3341:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3668, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "3465:5:22", + "nodeType": "VariableDeclaration", + "scope": 3669, + "src": "3458:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3667, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "3458:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "name": "PackedAllowance", + "nameLocation": "3232:15:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "3225:253:22", + "visibility": "public" + }, + { + "canonicalName": "IAllowanceTransfer.TokenSpenderPair", + "documentation": { + "id": 3670, + "nodeType": "StructuredDocumentation", + "src": "3486:33:22", + "text": "@notice A token spender pair." + }, + "id": 3675, + "members": [ + { + "constant": false, + "id": 3672, + "mutability": "mutable", + "name": "token", + "nameLocation": "3614:5:22", + "nodeType": "VariableDeclaration", + "scope": 3675, + "src": "3606:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3671, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3606:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3674, + "mutability": "mutable", + "name": "spender", + "nameLocation": "3670:7:22", + "nodeType": "VariableDeclaration", + "scope": 3675, + "src": "3662:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3673, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3662:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "TokenSpenderPair", + "nameLocation": "3532:16:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "3525:160:22", + "visibility": "public" + }, + { + "canonicalName": "IAllowanceTransfer.AllowanceTransferDetails", + "documentation": { + "id": 3676, + "nodeType": "StructuredDocumentation", + "src": "3693:41:22", + "text": "@notice Details for a token transfer." + }, + "id": 3685, + "members": [ + { + "constant": false, + "id": 3678, + "mutability": "mutable", + "name": "from", + "nameLocation": "3826:4:22", + "nodeType": "VariableDeclaration", + "scope": 3685, + "src": "3818:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3677, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3818:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3680, + "mutability": "mutable", + "name": "to", + "nameLocation": "3888:2:22", + "nodeType": "VariableDeclaration", + "scope": 3685, + "src": "3880:10:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3679, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3880:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3682, + "mutability": "mutable", + "name": "amount", + "nameLocation": "3945:6:22", + "nodeType": "VariableDeclaration", + "scope": 3685, + "src": "3937:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3681, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "3937:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3684, + "mutability": "mutable", + "name": "token", + "nameLocation": "4010:5:22", + "nodeType": "VariableDeclaration", + "scope": 3685, + "src": "4002:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3683, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4002:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "name": "AllowanceTransferDetails", + "nameLocation": "3747:24:22", + "nodeType": "StructDefinition", + "scope": 3774, + "src": "3740:283:22", + "visibility": "public" + }, + { + "documentation": { + "id": 3686, + "nodeType": "StructuredDocumentation", + "src": "4031:457:22", + "text": "@notice A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.\n @notice The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\n @dev The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals." + }, + "functionSelector": "927da105", + "id": 3701, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nameLocation": "4503:9:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3693, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3688, + "mutability": "mutable", + "name": "user", + "nameLocation": "4521:4:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4513:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3687, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4513:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3690, + "mutability": "mutable", + "name": "token", + "nameLocation": "4535:5:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4527:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3689, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4527:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3692, + "mutability": "mutable", + "name": "spender", + "nameLocation": "4550:7:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4542:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3691, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4542:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4512:46:22" + }, + "returnParameters": { + "id": 3700, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3695, + "mutability": "mutable", + "name": "amount", + "nameLocation": "4617:6:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4609:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3694, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "4609:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3697, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "4632:10:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4625:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3696, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "4625:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3699, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "4651:5:22", + "nodeType": "VariableDeclaration", + "scope": 3701, + "src": "4644:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3698, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "4644:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "4608:49:22" + }, + "scope": 3774, + "src": "4494:164:22", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3702, + "nodeType": "StructuredDocumentation", + "src": "4666:504:22", + "text": "@notice Approves the spender to use up to amount of the specified token up until the expiration\n @param token The token to approve\n @param spender The spender address to approve\n @param amount The approved amount of the token\n @param expiration The timestamp at which the approval is no longer valid\n @dev The packed allowance also holds a nonce, which will stay unchanged in approve\n @dev Setting amount to type(uint160).max sets an unlimited approval" + }, + "functionSelector": "87517c45", + "id": 3713, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nameLocation": "5185:7:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3711, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3704, + "mutability": "mutable", + "name": "token", + "nameLocation": "5201:5:22", + "nodeType": "VariableDeclaration", + "scope": 3713, + "src": "5193:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3703, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5193:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3706, + "mutability": "mutable", + "name": "spender", + "nameLocation": "5216:7:22", + "nodeType": "VariableDeclaration", + "scope": 3713, + "src": "5208:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3705, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5208:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3708, + "mutability": "mutable", + "name": "amount", + "nameLocation": "5233:6:22", + "nodeType": "VariableDeclaration", + "scope": 3713, + "src": "5225:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3707, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "5225:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3710, + "mutability": "mutable", + "name": "expiration", + "nameLocation": "5248:10:22", + "nodeType": "VariableDeclaration", + "scope": 3713, + "src": "5241:17:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3709, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "5241:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "5192:67:22" + }, + "returnParameters": { + "id": 3712, + "nodeType": "ParameterList", + "parameters": [], + "src": "5268:0:22" + }, + "scope": 3774, + "src": "5176:93:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3714, + "nodeType": "StructuredDocumentation", + "src": "5277:411:22", + "text": "@notice Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\n @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n @param owner The owner of the tokens being approved\n @param permitSingle Data signed over by the owner specifying the terms of approval\n @param signature The owner's signature over the permit data" + }, + "functionSelector": "2b67b570", + "id": 3724, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permit", + "nameLocation": "5703:6:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3722, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3716, + "mutability": "mutable", + "name": "owner", + "nameLocation": "5718:5:22", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "5710:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3715, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5710:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3719, + "mutability": "mutable", + "name": "permitSingle", + "nameLocation": "5745:12:22", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "5725:32:22", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitSingle_$3651_memory_ptr", + "typeString": "struct IAllowanceTransfer.PermitSingle" + }, + "typeName": { + "id": 3718, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3717, + "name": "PermitSingle", + "nameLocations": [ + "5725:12:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3651, + "src": "5725:12:22" + }, + "referencedDeclaration": 3651, + "src": "5725:12:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitSingle_$3651_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitSingle" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3721, + "mutability": "mutable", + "name": "signature", + "nameLocation": "5774:9:22", + "nodeType": "VariableDeclaration", + "scope": 3724, + "src": "5759:24:22", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3720, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5759:5:22", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5709:75:22" + }, + "returnParameters": { + "id": 3723, + "nodeType": "ParameterList", + "parameters": [], + "src": "5793:0:22" + }, + "scope": 3774, + "src": "5694:100:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3725, + "nodeType": "StructuredDocumentation", + "src": "5802:415:22", + "text": "@notice Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\n @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n @param owner The owner of the tokens being approved\n @param permitBatch Data signed over by the owner specifying the terms of approval\n @param signature The owner's signature over the permit data" + }, + "functionSelector": "2a2d80d1", + "id": 3735, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permit", + "nameLocation": "6232:6:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3733, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3727, + "mutability": "mutable", + "name": "owner", + "nameLocation": "6247:5:22", + "nodeType": "VariableDeclaration", + "scope": 3735, + "src": "6239:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6239:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3730, + "mutability": "mutable", + "name": "permitBatch", + "nameLocation": "6273:11:22", + "nodeType": "VariableDeclaration", + "scope": 3735, + "src": "6254:30:22", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitBatch_$3661_memory_ptr", + "typeString": "struct IAllowanceTransfer.PermitBatch" + }, + "typeName": { + "id": 3729, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3728, + "name": "PermitBatch", + "nameLocations": [ + "6254:11:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3661, + "src": "6254:11:22" + }, + "referencedDeclaration": 3661, + "src": "6254:11:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PermitBatch_$3661_storage_ptr", + "typeString": "struct IAllowanceTransfer.PermitBatch" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3732, + "mutability": "mutable", + "name": "signature", + "nameLocation": "6301:9:22", + "nodeType": "VariableDeclaration", + "scope": 3735, + "src": "6286:24:22", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3731, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6286:5:22", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "6238:73:22" + }, + "returnParameters": { + "id": 3734, + "nodeType": "ParameterList", + "parameters": [], + "src": "6320:0:22" + }, + "scope": 3774, + "src": "6223:98:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3736, + "nodeType": "StructuredDocumentation", + "src": "6329:392:22", + "text": "@notice Transfer approved tokens from one address to another\n @param from The address to transfer from\n @param to The address of the recipient\n @param amount The amount of the token to transfer\n @param token The token address to transfer\n @dev Requires the from address to have approved at least the desired amount\n of tokens to msg.sender." + }, + "functionSelector": "36c78516", + "id": 3747, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "6736:12:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3738, + "mutability": "mutable", + "name": "from", + "nameLocation": "6757:4:22", + "nodeType": "VariableDeclaration", + "scope": 3747, + "src": "6749:12:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3737, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6749:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3740, + "mutability": "mutable", + "name": "to", + "nameLocation": "6771:2:22", + "nodeType": "VariableDeclaration", + "scope": 3747, + "src": "6763:10:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3739, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6763:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3742, + "mutability": "mutable", + "name": "amount", + "nameLocation": "6783:6:22", + "nodeType": "VariableDeclaration", + "scope": 3747, + "src": "6775:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "typeName": { + "id": 3741, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "6775:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3744, + "mutability": "mutable", + "name": "token", + "nameLocation": "6799:5:22", + "nodeType": "VariableDeclaration", + "scope": 3747, + "src": "6791:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3743, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6791:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6748:57:22" + }, + "returnParameters": { + "id": 3746, + "nodeType": "ParameterList", + "parameters": [], + "src": "6814:0:22" + }, + "scope": 3774, + "src": "6727:88:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3748, + "nodeType": "StructuredDocumentation", + "src": "6823:267:22", + "text": "@notice Transfer approved tokens in a batch\n @param transferDetails Array of owners, recipients, amounts, and tokens for the transfers\n @dev Requires the from addresses to have approved at least the desired amount\n of tokens to msg.sender." + }, + "functionSelector": "0d58b1db", + "id": 3755, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nameLocation": "7105:12:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3753, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3752, + "mutability": "mutable", + "name": "transferDetails", + "nameLocation": "7154:15:22", + "nodeType": "VariableDeclaration", + "scope": 3755, + "src": "7118:51:22", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_AllowanceTransferDetails_$3685_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct IAllowanceTransfer.AllowanceTransferDetails[]" + }, + "typeName": { + "baseType": { + "id": 3750, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3749, + "name": "AllowanceTransferDetails", + "nameLocations": [ + "7118:24:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3685, + "src": "7118:24:22" + }, + "referencedDeclaration": 3685, + "src": "7118:24:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AllowanceTransferDetails_$3685_storage_ptr", + "typeString": "struct IAllowanceTransfer.AllowanceTransferDetails" + } + }, + "id": 3751, + "nodeType": "ArrayTypeName", + "src": "7118:26:22", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_AllowanceTransferDetails_$3685_storage_$dyn_storage_ptr", + "typeString": "struct IAllowanceTransfer.AllowanceTransferDetails[]" + } + }, + "visibility": "internal" + } + ], + "src": "7117:53:22" + }, + "returnParameters": { + "id": 3754, + "nodeType": "ParameterList", + "parameters": [], + "src": "7179:0:22" + }, + "scope": 3774, + "src": "7096:84:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3756, + "nodeType": "StructuredDocumentation", + "src": "7188:169:22", + "text": "@notice Enables performing a \"lockdown\" of the sender's Permit2 identity\n by batch revoking approvals\n @param approvals Array of approvals to revoke." + }, + "functionSelector": "cc53287f", + "id": 3763, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "lockdown", + "nameLocation": "7372:8:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3760, + "mutability": "mutable", + "name": "approvals", + "nameLocation": "7409:9:22", + "nodeType": "VariableDeclaration", + "scope": 3763, + "src": "7381:37:22", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenSpenderPair_$3675_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct IAllowanceTransfer.TokenSpenderPair[]" + }, + "typeName": { + "baseType": { + "id": 3758, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 3757, + "name": "TokenSpenderPair", + "nameLocations": [ + "7381:16:22" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3675, + "src": "7381:16:22" + }, + "referencedDeclaration": 3675, + "src": "7381:16:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenSpenderPair_$3675_storage_ptr", + "typeString": "struct IAllowanceTransfer.TokenSpenderPair" + } + }, + "id": 3759, + "nodeType": "ArrayTypeName", + "src": "7381:18:22", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenSpenderPair_$3675_storage_$dyn_storage_ptr", + "typeString": "struct IAllowanceTransfer.TokenSpenderPair[]" + } + }, + "visibility": "internal" + } + ], + "src": "7380:39:22" + }, + "returnParameters": { + "id": 3762, + "nodeType": "ParameterList", + "parameters": [], + "src": "7428:0:22" + }, + "scope": 3774, + "src": "7363:66:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3764, + "nodeType": "StructuredDocumentation", + "src": "7437:336:22", + "text": "@notice Invalidate nonces for a given (token, spender) pair\n @param token The token to invalidate nonces for\n @param spender The spender to invalidate nonces for\n @param newNonce The new nonce to set. Invalidates all nonces less than it.\n @dev Can't invalidate more than 2**16 nonces per transaction." + }, + "functionSelector": "65d9723c", + "id": 3773, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "invalidateNonces", + "nameLocation": "7788:16:22", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3771, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3766, + "mutability": "mutable", + "name": "token", + "nameLocation": "7813:5:22", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "7805:13:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3765, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7805:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3768, + "mutability": "mutable", + "name": "spender", + "nameLocation": "7828:7:22", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "7820:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3767, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7820:7:22", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3770, + "mutability": "mutable", + "name": "newNonce", + "nameLocation": "7844:8:22", + "nodeType": "VariableDeclaration", + "scope": 3773, + "src": "7837:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + }, + "typeName": { + "id": 3769, + "name": "uint48", + "nodeType": "ElementaryTypeName", + "src": "7837:6:22", + "typeDescriptions": { + "typeIdentifier": "t_uint48", + "typeString": "uint48" + } + }, + "visibility": "internal" + } + ], + "src": "7804:49:22" + }, + "returnParameters": { + "id": 3772, + "nodeType": "ParameterList", + "parameters": [], + "src": "7862:0:22" + }, + "scope": 3774, + "src": "7779:84:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3775, + "src": "338:7528:22", + "usedErrors": [ + 3574, + 3579, + 3582 + ], + "usedEvents": [ + 3595, + 3608, + 3623, + 3632 + ] + } + ], + "src": "33:7835:22" + }, + "id": 22 + }, + "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol": { + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol", + "exportedSymbols": { + "IEIP712": [ + 3782 + ] + }, + "id": 3783, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3776, + "literals": [ + "solidity", + "^", + "0.8", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:23" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "IEIP712", + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 3782, + "linearizedBaseContracts": [ + 3782 + ], + "name": "IEIP712", + "nameLocation": "70:7:23", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "3644e515", + "id": 3781, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "DOMAIN_SEPARATOR", + "nameLocation": "94:16:23", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3777, + "nodeType": "ParameterList", + "parameters": [], + "src": "110:2:23" + }, + "returnParameters": { + "id": 3780, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3779, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 3781, + "src": "136:7:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3778, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "136:7:23", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "135:9:23" + }, + "scope": 3782, + "src": "85:60:23", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 3783, + "src": "60:88:23", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "33:117:23" + }, + "id": 23 + } + } +} \ No newline at end of file diff --git a/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.abi b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.abi new file mode 100644 index 00000000..e03b4041 --- /dev/null +++ b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.abi @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"allowedFactory","type":"address"},{"internalType":"address","name":"lpRWD","type":"address"},{"internalType":"address","name":"trustedRouter","type":"address"},{"components":[{"internalType":"bool","name":"amountBaseLiquidity","type":"bool"},{"internalType":"bool","name":"timeBaseLiquidity","type":"bool"}],"internalType":"struct LPIncentivizedHook.LPIncentiveFactor","name":"_lpIncentiveFactor","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"hooksContract","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"LPIncentivizedHookRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"LPAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardDistributed","type":"event"},{"inputs":[],"name":"activeAmountBaseLiquidityParameters","outputs":[{"internalType":"uint256","name":"mediumLiquidityAmountTrigger","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityAmountTrigger","type":"uint256"},{"internalType":"uint256","name":"mediumLiquidityAmountRewardFee","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityAmountRewardFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeIncentiveFactor","outputs":[{"internalType":"bool","name":"amountBaseLiquidity","type":"bool"},{"internalType":"bool","name":"timeBaseLiquidity","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeTimeBaseLiquidityParameters","outputs":[{"internalType":"uint256","name":"mediumLiquidityTimeTrigger","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityTimeTrigger","type":"uint256"},{"internalType":"uint256","name":"mediumLiquidityTimeRewardFee","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityTimeRewardFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20","name":"","type":"address"}],"name":"lpInfos","outputs":[{"internalType":"uint256","name":"totalLiquidity","type":"uint256"},{"internalType":"uint256","name":"liquidityStartTime","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"mediumLiquidityAmountTrigger","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityAmountTrigger","type":"uint256"},{"internalType":"uint256","name":"mediumLiquidityAmountRewardFee","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityAmountRewardFee","type":"uint256"}],"internalType":"struct LPIncentivizedHook.AmountBaseLiquidityParameters","name":"_amountBaseLiquidityParameters","type":"tuple"}],"name":"setAmountBaseLiquidityParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"mediumLiquidityTimeTrigger","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityTimeTrigger","type":"uint256"},{"internalType":"uint256","name":"mediumLiquidityTimeRewardFee","type":"uint256"},{"internalType":"uint256","name":"higherLiquidityTimeRewardFee","type":"uint256"}],"internalType":"struct LPIncentivizedHook.TimeBaseLiquidityParameters","name":"_timeBaseLiquidityParameters","type":"tuple"}],"name":"setTimeBaseLiquidityParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.bin b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.bin new file mode 100644 index 00000000..8c5faeae --- /dev/null +++ b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.bin @@ -0,0 +1 @@ +610100604052346101a85760405161128c38819003601f8101601f191683016001600160401b03811184821017610194578392829160405283398101039060c082126101a8578051906001600160a01b03821682036101a857610064602082016101ac565b92610071604083016101ac565b906040610080606085016101ac565b91607f1901126101a85760408051939084016001600160401b03811185821017610194576100c29160a0916040526100ba608082016101c0565b8652016101c0565b93602084019485526080523315610181575f8054336001600160a01b0319821681178355604051979290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360a05260c05260018060a01b031660e0525115159060ff61ff006001549251151560081b1692169061ffff191617176001556110be90816101ce8239608051818181610dcd0152610f8f015260a05181610a28015260c05181610d57015260e051815050f35b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b03821682036101a857565b519081151582036101a85756fe6080806040526004361015610012575f80fd5b5f3560e01c90816308a13d6a14610b5e575080630b89f1821461095a57806318b6eb55146109195780631c149e28146108c95780632754888d146107d157806338be241d1461078157806345421ec7146107345780635211fa77146106fb5780636683635f1461064d5780636c55c7471461061f578063715018a6146105c85780638da5cb5b146105a1578063976907cc14610495578063a0e8f5ac1461044c578063b389771d146103e3578063ba5f9f401461034b578063c9e6e6ca14610312578063d77153a71461022e578063ec93c2d2146101815763f2fde38b146100f8575f80fd5b3461017d57602036600319011261017d57610111610b94565b610119610fd2565b6001600160a01b0316801561016a575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b3461017d57608036600319011261017d5761019b36610cc5565b6101a3610fd2565b60ff60015416156101cc5780516002556020810151600355604081015160045560600151600555005b60405162461bcd60e51b815260206004820152603460248201527f416d6f756e7420426173652052657761726473206973206e6f7420636f6e666960448201527333bab932b2103337b9103a3434b9902437b7b59760611b6064820152608490fd5b3461017d575f36600319011261017d576040516101408101908082106001600160401b038311176102fe57610140916040525f815260208101905f825260408101905f8252606081015f8152608082015f815260a083015f815260c08401915f835260e08501936101206101008701965f885201966001865260018852604051985f8a5251151560208a015251151560408901525115156060880152511515608087015251151560a086015251151560c085015251151560e0840152511515610100830152511515610120820152f35b634e487b7160e01b5f52604160045260245ffd5b3461017d575f36600319011261017d57600254600354600454600554604080519485526020850193909352918301526060820152608090f35b3461017d5760e036600319011261017d57610364610b94565b5061036d610baa565b506004604435101561017d576084356001600160401b03811161017d57610398903690600401610c13565b5060a4356001600160401b03811161017d576103b8903690600401610c13565b5060c4356001600160401b03811161017d576103d8903690600401610c70565b5060206040515f8152f35b3461017d57604036600319011261017d576103fc610b94565b610404610baa565b9060018060a01b03165f52600a60205260405f209060018060a01b03165f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b3461017d57606036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d57610485610baa565b50604080515f8082526020820152f35b3461017d5761010036600319011261017d576104af610b94565b6104b7610baa565b6005604435101561017d576064356001600160401b03811161017d576104e1903690600401610c13565b506084356001600160401b03811161017d57610501903690600401610c13565b9060c4356001600160401b03811161017d57610521903690600401610c13565b5060e435926001600160401b03841161017d57610545610553943690600401610c70565b5061054e610f8d565b610d46565b906040519182916040830190151583526040602084015281518091526020606084019201905f5b818110610588575050500390f35b825184528594506020938401939092019160010161057a565b3461017d575f36600319011261017d575f546040516001600160a01b039091168152602090f35b3461017d575f36600319011261017d576105e0610fd2565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017d575f36600319011261017d57604060015460ff8251918181161515835260081c1615156020820152f35b3461017d57608036600319011261017d5761066736610cc5565b61066f610fd2565b60ff60015460081c161561069b5780516006556020810151600755604081015160085560600151600955005b60405162461bcd60e51b815260206004820152603260248201527f54696d6520426173652052657761726473206973206e6f7420636f6e666967756044820152713932b2103337b9103a3434b9902437b7b59760711b6064820152608490fd5b3461017d57604036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d576103d8610baa565b3461017d5760e036600319011261017d5761074d610b94565b50610756610baa565b506005604435101561017d576064356001600160401b03811161017d57610398903690600401610c13565b3461017d57606036600319011261017d576004356001600160401b03811161017d576107b1903690600401610c13565b506044356001600160401b03811161017d576103d8903690600401610c70565b3461017d5761010036600319011261017d576107eb610b94565b506107f4610baa565b506004604435101561017d576084356001600160401b03811161017d5761081f903690600401610c13565b5060a4356001600160401b03811161017d5761083f903690600401610c13565b60c4356001600160401b03811161017d5761085e903690600401610c13565b5060e4356001600160401b03811161017d5761087e903690600401610c70565b506040518091604082015f83526040602084015281518091526020606084019201905f5b8181106108b0575050500390f35b82518452859450602093840193909201916001016108a2565b3461017d57604036600319011261017d576004356001600160401b03811161017d576108f9903690600401610c13565b506024356001600160401b03811161017d576103d8903690600401610c70565b3461017d57602036600319011261017d576004356001600160401b03811161017d5761018090600319903603011261017d57604080515f8082526020820152f35b3461017d5760e036600319011261017d57610973610b94565b61097b610baa565b906044356001600160401b03811161017d573660238201121561017d57806004013590602460206109ab84610bfc565b6109b86040519182610bdb565b848152019260071b8201019036821161017d57602401915b818310610ae157505050608060631936011261017d576109ee610f8d565b604051916001600160a01b0390811691168181307fcbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b45f80a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681149182610a66575b6020836040519015158152f35b636634b75360e01b8452600484015260209150829060249082905afa8015610ad6575f90610a9a575b602091508280610a59565b506020813d602011610ace575b81610ab460209383610bdb565b8101031261017d5751801515810361017d57602090610a8f565b3d9150610aa7565b6040513d5f823e3d90fd5b60808336031261017d5760405190610af882610bc0565b83356001600160a01b038116810361017d5782526020840135600281101561017d57602083015260408401356001600160a01b038116810361017d576040830152606084013590811515820361017d5782602092606060809501528152019201916109d0565b3461017d575f36600319011261017d57600654600754600854600954928452602084019190915260408301526060820152608090f35b600435906001600160a01b038216820361017d57565b602435906001600160a01b038216820361017d57565b608081019081106001600160401b038211176102fe57604052565b90601f801991011681019081106001600160401b038211176102fe57604052565b6001600160401b0381116102fe5760051b60200190565b9080601f8301121561017d578135610c2a81610bfc565b92610c386040519485610bdb565b81845260208085019260051b82010192831161017d57602001905b828210610c605750505090565b8135815260209182019101610c53565b81601f8201121561017d578035906001600160401b0382116102fe5760405192610ca4601f8401601f191660200185610bdb565b8284526020838301011161017d57815f926020809301838601378301015290565b608090600319011261017d5760405190610cde82610bc0565b6004358252602435602083015260443560408301526064356060830152565b8051821015610d115760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211610d3257565b634e487b7160e01b5f52601160045260245ffd5b9192916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168103610f8657602060049160405192838092632f00f5ad60e11b82525afa908115610ad6575f91610f44575b5060405163ca4f280360e01b81526001600160a01b039283166004820152915f90839060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610ad6575f92610ea1575b505f91825b8551841015610e9757610e85600191610e1b8689610cfd565b51838060a01b0386165f52600a60205260405f20848060a01b03610e3f8988610cfd565b5116858060a01b03165f52602052610e6260405f209182548015610e8d57610d25565b9055610e7f838060a01b03610e778887610cfd565b511686610ff8565b90610d25565b930192610e02565b4287850155610d25565b5050505060019190565b9091503d805f833e610eb38183610bdb565b81019060208183031261017d578051906001600160401b03821161017d57019080601f8301121561017d57815190610eea82610bfc565b92610ef86040519485610bdb565b82845260208085019360051b82010191821161017d57602001915b818310610f2457505050905f610dfd565b82516001600160a01b038116810361017d57815260209283019201610f13565b90506020813d602011610f7e575b81610f5f60209383610bdb565b8101031261017d57516001600160a01b038116810361017d575f610da3565b3d9150610f52565b50505f9190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610fbf57565b63089676d560e01b5f523360045260245ffd5b5f546001600160a01b03163303610fe557565b63118cdaa760e01b5f523360045260245ffd5b60ff60015416156110825760018060a01b03165f52600a60205260405f209060018060a01b03165f5260205260405f20604051606081018181106001600160401b038211176102fe576040526040600283549384845260018101546020850152015491015260035481115f1461106f575060055490565b600254101561107e5760045490565b5f90565b50505f9056fea2646970667358221220d1a194580747f948aa68dfadb2d073ae9d6c58ba71129ac634f6fba9daee73ba64736f6c634300081b0033 \ No newline at end of file diff --git a/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.json b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.json new file mode 100644 index 00000000..3ab9373e --- /dev/null +++ b/packages/foundry/bin/contracts/hooks/LPIncentivizedHook.json @@ -0,0 +1,6924 @@ +{ + "contractName": "LPIncentivizedHook", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "allowedFactory", + "type": "address" + }, + { + "internalType": "address", + "name": "lpRWD", + "type": "address" + }, + { + "internalType": "address", + "name": "trustedRouter", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "amountBaseLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "timeBaseLiquidity", + "type": "bool" + } + ], + "internalType": "struct LPIncentivizedHook.LPIncentiveFactor", + "name": "_lpIncentiveFactor", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderIsNotVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "hooksContract", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "LPIncentivizedHookRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "LPAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "RewardDistributed", + "type": "event" + }, + { + "inputs": [], + "name": "activeAmountBaseLiquidityParameters", + "outputs": [ + { + "internalType": "uint256", + "name": "mediumLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityAmountRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountRewardFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeIncentiveFactor", + "outputs": [ + { + "internalType": "bool", + "name": "amountBaseLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "timeBaseLiquidity", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeTimeBaseLiquidityParameters", + "outputs": [ + { + "internalType": "uint256", + "name": "mediumLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityTimeRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeRewardFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getHookFlags", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + } + ], + "internalType": "struct HookFlags", + "name": "hookFlags", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "name": "lpInfos", + "outputs": [ + { + "internalType": "uint256", + "name": "totalLiquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidityStartTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "amountsInScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsInRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onAfterAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "hookAdjustedAmountsInRaw", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOutRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountInScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenInBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenOutBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AfterSwapParams", + "name": "", + "type": "tuple" + } + ], + "name": "onAfterSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "onBeforeSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "onComputeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "", + "type": "tuple" + } + ], + "name": "onRegister", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "mediumLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityAmountRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityAmountRewardFee", + "type": "uint256" + } + ], + "internalType": "struct LPIncentivizedHook.AmountBaseLiquidityParameters", + "name": "_amountBaseLiquidityParameters", + "type": "tuple" + } + ], + "name": "setAmountBaseLiquidityParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "mediumLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeTrigger", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mediumLiquidityTimeRewardFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "higherLiquidityTimeRewardFee", + "type": "uint256" + } + ], + "internalType": "struct LPIncentivizedHook.TimeBaseLiquidityParameters", + "name": "_timeBaseLiquidityParameters", + "type": "tuple" + } + ], + "name": "setTimeBaseLiquidityParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowedFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lpRWD\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedRouter\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"amountBaseLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"timeBaseLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct LPIncentivizedHook.LPIncentiveFactor\",\"name\":\"_lpIncentiveFactor\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"LPIncentivizedHookRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"LPAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"RewardDistributed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"activeAmountBaseLiquidityParameters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountRewardFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeIncentiveFactor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"amountBaseLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"timeBaseLiquidity\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeTimeBaseLiquidityParameters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeRewardFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lpInfos\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityAmountRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityAmountRewardFee\",\"type\":\"uint256\"}],\"internalType\":\"struct LPIncentivizedHook.AmountBaseLiquidityParameters\",\"name\":\"_amountBaseLiquidityParameters\",\"type\":\"tuple\"}],\"name\":\"setAmountBaseLiquidityParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeTrigger\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediumLiquidityTimeRewardFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"higherLiquidityTimeRewardFee\",\"type\":\"uint256\"}],\"internalType\":\"struct LPIncentivizedHook.TimeBaseLiquidityParameters\",\"name\":\"_timeBaseLiquidityParameters\",\"type\":\"tuple\"}],\"name\":\"setTimeBaseLiquidityParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Uses to reward Liquidity Providers (LPs) based on multiple factors\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"LPIncentivizedHookRegistered(address,address,address)\":{\"details\":\"If the registration fails the call will revert, so there will be no event.\",\"params\":{\"factory\":\"The factory (must be the allowed factory, or the call will revert)\",\"hooksContract\":\"This contract\",\"pool\":\"The pool on which the hook was registered\"}},\"RewardDistributed(address,uint256)\":{\"details\":\"Event if rewards distributed successfully.\",\"params\":{\"LPAddress\":\"Liquidity provider address\",\"reward\":\"Earn rewards\"}}},\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of add liquidity operation (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"success True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"success True if the hook allowed the registration, false otherwise\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))\":{\"details\":\"Sets the Amount based liquidity rewards parameters for the hook This function must be permissioned.\",\"params\":{\"_amountBaseLiquidityParameters\":\"The amount base liquidity parameters\"}},\"setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))\":{\"details\":\"Sets the Time based liquidity rewards parameters for the hook This function must be permissioned.\",\"params\":{\"_timeBaseLiquidityParameters\":\"The time base liquidity parameters\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}]},\"events\":{\"LPIncentivizedHookRegistered(address,address,address)\":{\"notice\":\"A new `LPIncentivizedHook` contract has been registered successfully.\"}},\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Hook that gives a swap fee discount to lpRWD holders.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol\":\"LPIncentivizedHook\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[],\"viaIR\":true},\"sources\":{\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol\":{\"keccak256\":\"0x39c966b2eb8a0842a73895b1f60da2286cb43c3f9e38e2616f8372b96ef6e829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://49dfe918e98768a8a6f123e36bfc5933bf5b29ade67ccf65621455d68036e6b3\",\"dweb:/ipfs/QmZyAd5seZA3Dwo1YvZeVAzaHHFjrN4yucGfS45wgjPbjB\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0x242bb9517abafa97600ddb4a61a50113259a313beef1e9a51e0941654f722e34\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6d1b2ebcb7afb0e1b2c05fb4c19ad48dbd305de94fc6b54f9c7d3255581c709c\",\"dweb:/ipfs/QmdZtEgAiYJJZofmczbcMxCY2snCTFyY8JqnviLxSbRYYM\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x5befdf642753e22773827eb85e48802e6868f2c804c8557a6f297b8264e7af73\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fd34de490998e8fe68c5e09f5cd4d3b7774ca04c6878e8ac60c4a3c86660c21\",\"dweb:/ipfs/QmTMpju1CKwSgosoHPb3shdSBFwd4JSJmLLQX5iPubJvAw\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x171936e0299419425d04ed4bf2ddd479c86dda7c814938bbdec810d8bd62ff97\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e98dee34d318307afceaa01aa944c520e7c6d67a0b8a8dd40a98872b8664332\",\"dweb:/ipfs/QmUzaAeAsmk2GnbRYaRU2aYCfxgM944KBMBU8X9FrS5DyQ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0xe21b1175ef7852ffa523256f332eea07c0df9a7523ecad9055d3995601d8eb9a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://850d318622138965338981ee5de357ba4f3ad6bbda89c7cf7c83ac438796eab4\",\"dweb:/ipfs/QmRvdXGJVgLtectd3N2uSBCDa7kkXrRgfptkmz51Gjcsh4\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x8516506be7cea682236ecfe5b1e645cb6172f5db6f4e3b494475f32ce668fe0d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://45a81f6506cf4f70c550546df04645d266c547df4bab9257968ccbaabdeca6ce\",\"dweb:/ipfs/QmcWg4u85ecPLo7HtxwAyHs5ZQuaBfEBEH8LUE7tzXNoxC\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x00119343ebd90e82f688761f0a89cc2de16f94620e97d4252956925e4a092d2d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eccca5ac47ef29645398262d1057fa12b109a7024f8e6781f4cb30b9c587ff73\",\"dweb:/ipfs/QmbtTTh3T5Y4PMi1P2pNCcLuwzovDTuXpP8j6u78ucVPDX\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x9ea0802f7ed57459bec19372217cc8dca3dbe3e634b0efba5f3bffce0576e221\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecfd2f7af8d0eab220cdf69651986b348826a8bf6421c8b35f49fd749847912f\",\"dweb:/ipfs/QmYFJqqRVB98NPcCXofhY2o3HX8xiCvuFeu1fJWoeYQWTz\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xa7fe094318e1a24a9682514d5481470d8c7d1729f2f7d20d996dfda3bf526772\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d3769baa918926875cc039829c6cf4943d45c224db92115245e80404181b1714\",\"dweb:/ipfs/QmNNzEwucGDnsf175Uh6fGyNkhEXcnV1KqKrWVx2BQRLFF\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0xca426463580cc5d3f63c3668d3fee043d63cd3d36d0f58672a90137e32d6f3d5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://184dd54753656914095ec0fdcb2a283e747f61fa002f8df4438825094e4fe7d4\",\"dweb:/ipfs/QmXmBFQLSTRHgg91DHU26hoKsUW2TqAaGMXhRn8xnaAqaS\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0x6b42f007c9569222e401e01664a5e5e1fcdeff5691dbb87e66b8090eb5346ebe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e9b406c1ae5610fb71d35add4a1cca97ed53c9da8f9028e7378cc711db4da55\",\"dweb:/ipfs/QmdLE8sGepxLZMyGTv7XiZqbxyah1Zgm5nzR3K91aE1jEm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0c3f479268d65b1f60602d92fded8b266d10dec41b542891cdfa3e766f414720\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab15fd9967aa0aeabc6d6fb5722fa71573477a14a7047db171f3501260dbfb4e\",\"dweb:/ipfs/QmQRD4nvAwtAZLNoqSM2qMU6V9LZ3jCg6ubCwH8NXiyfrR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0x7dcd402e3febc53826582a111b8b5c018a8f2dd378d309947344eece77bb1907\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46df1078615cc7cef755c9af7ead5c86a67cf1381514fd23e7a157ac5e91d419\",\"dweb:/ipfs/QmQfvYhNu71mbfR4ZpmRHutCfurLhYbmz3ppBh7xo19hNy\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0xc5e0d7745ce4f09d8b153294ac18129247f3749374a6596452f6b91d0d3bec15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de0c1288bd131445110084ed4f925df8c6a3b87edc7ab2139138f18395392618\",\"dweb:/ipfs/QmNQP65fHc5fy3jH1yDyJC3nr9yGBPW25J23PhqXWbbPay\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x7a31c7d6a91a8a561f347cc33746c810e7ca927767f39770fc1570dcbe2a49d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7d8809c9e3eca81b6a1ca50db855df181ca2ebc46d8580b450c7e114d1d1e402\",\"dweb:/ipfs/QmNdX8WLFLMQLxxaopTyGHUBqoiA61cVdr63ajJWxhtu9g\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0x88037c44e04e0f23b63e64d5128c2f3898feab51439db807ab91f3e1805315dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21de8416c9391642ad88d1453aea42eb0d71c97a77f9e7f0a3fd37d4ee4591c8\",\"dweb:/ipfs/QmTPCXbnBYp8JydU2Y665Bs3BWms8kZydWYzmLiNmRhJkR\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x09305dcf7ae512906248a3696137422d3d36e72465660e372cd4fd64d13117ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://21d564eee4c8e31216cf6542ac925daac7659fbf8a33129e13d33f277c5efc8e\",\"dweb:/ipfs/QmRqXAqYeygYbT2qXUjZdUF8bzvmCrmqECRGcUzrUMBRf6\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xe889e9f6b8469155c967f403ad7508eaa66af8cad1cb9a003536a8e4f281d348\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e6e32c81c8d84199eda0de40d33bb77c7acbb482e3f545d5cfba8195af0a88e0\",\"dweb:/ipfs/Qmaf1WAinzjYWGNxRzCTmn2QABFWS912HwC8eiD7cyTgis\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xf3fcf2f2a0e47f544383abd83b229980d3b6046966618ea4e2b3cc933a9f3ffd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://727fa879fa42ec80678d45ee04b8cc29885fad0072db7b3fd6868788f157f66f\",\"dweb:/ipfs/QmZCaJubFPGNgaWazEezLzsefM1XEGQjStJMGKUtpJXy6E\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x1c15854d415493331ff06ef9b0899f81dc6960189fa86cfd1b29c4374cc336a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cb41bc9b9e1f5617d8e826c07fb21ecf986f70b4b5b395d6ecf9c5eb9f1a204\",\"dweb:/ipfs/QmNvJhvpJE8b3nyz7RaMCSPhfbmzj1TLuL3a7NkS9AHkGJ\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8edf51e08ea403df2542380d8fba4a3fc63aa07c571ee75cf55e18d1e353645b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5878fafb7c542c7b0d3f9d34447177b54a7ffa5a388a23c4da78116655b7fba6\",\"dweb:/ipfs/Qmb8VVEhtoUAEGsDRKmo9ER23eQfAEynDxvEDTeVWfG1Wm\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x3dcd533a3f709bda89bb8e649eb97aed96578e606f3796609544b1dcff975a0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83fa9b15077fd2f33f6c175d694e2f7ae9c9a289c7feaca40aa7d6feb8d87c26\",\"dweb:/ipfs/QmQLfKCJ7mjiEeCGN1sHgWT8wjAMbAmBqcBVoQQyUZa5ws\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0xeb7200ec49f3ea7e11b33794136c20ef2d891ccadaa71076f88e260c3598c018\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41577fbfd33a0aeef565f8d15ce93096eacd45c139cc492dbe2b178e6623b820\",\"dweb:/ipfs/QmQJqhQXyNKxYXozYn57LLcXvcPkkb1ZF8qiZFfkZ93EdL\"]},\"e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0x4e636cd794e7d55aa94f4f41799ced22734f29a1299c77679dabe01fcdb9729b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a72d61d25dcaed4a41f18733186fb498e04d178a9da7948a07c1888c44edbac9\",\"dweb:/ipfs/QmTDm4CFGZVNsp2Lweh3hnBj6kaU8hRxeZaVbH96ov4Aqg\"]}},\"version\":1}", + "bytecode": "610100604052346101a85760405161128c38819003601f8101601f191683016001600160401b03811184821017610194578392829160405283398101039060c082126101a8578051906001600160a01b03821682036101a857610064602082016101ac565b92610071604083016101ac565b906040610080606085016101ac565b91607f1901126101a85760408051939084016001600160401b03811185821017610194576100c29160a0916040526100ba608082016101c0565b8652016101c0565b93602084019485526080523315610181575f8054336001600160a01b0319821681178355604051979290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360a05260c05260018060a01b031660e0525115159060ff61ff006001549251151560081b1692169061ffff191617176001556110be90816101ce8239608051818181610dcd0152610f8f015260a05181610a28015260c05181610d57015260e051815050f35b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b03821682036101a857565b519081151582036101a85756fe6080806040526004361015610012575f80fd5b5f3560e01c90816308a13d6a14610b5e575080630b89f1821461095a57806318b6eb55146109195780631c149e28146108c95780632754888d146107d157806338be241d1461078157806345421ec7146107345780635211fa77146106fb5780636683635f1461064d5780636c55c7471461061f578063715018a6146105c85780638da5cb5b146105a1578063976907cc14610495578063a0e8f5ac1461044c578063b389771d146103e3578063ba5f9f401461034b578063c9e6e6ca14610312578063d77153a71461022e578063ec93c2d2146101815763f2fde38b146100f8575f80fd5b3461017d57602036600319011261017d57610111610b94565b610119610fd2565b6001600160a01b0316801561016a575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b3461017d57608036600319011261017d5761019b36610cc5565b6101a3610fd2565b60ff60015416156101cc5780516002556020810151600355604081015160045560600151600555005b60405162461bcd60e51b815260206004820152603460248201527f416d6f756e7420426173652052657761726473206973206e6f7420636f6e666960448201527333bab932b2103337b9103a3434b9902437b7b59760611b6064820152608490fd5b3461017d575f36600319011261017d576040516101408101908082106001600160401b038311176102fe57610140916040525f815260208101905f825260408101905f8252606081015f8152608082015f815260a083015f815260c08401915f835260e08501936101206101008701965f885201966001865260018852604051985f8a5251151560208a015251151560408901525115156060880152511515608087015251151560a086015251151560c085015251151560e0840152511515610100830152511515610120820152f35b634e487b7160e01b5f52604160045260245ffd5b3461017d575f36600319011261017d57600254600354600454600554604080519485526020850193909352918301526060820152608090f35b3461017d5760e036600319011261017d57610364610b94565b5061036d610baa565b506004604435101561017d576084356001600160401b03811161017d57610398903690600401610c13565b5060a4356001600160401b03811161017d576103b8903690600401610c13565b5060c4356001600160401b03811161017d576103d8903690600401610c70565b5060206040515f8152f35b3461017d57604036600319011261017d576103fc610b94565b610404610baa565b9060018060a01b03165f52600a60205260405f209060018060a01b03165f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b3461017d57606036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d57610485610baa565b50604080515f8082526020820152f35b3461017d5761010036600319011261017d576104af610b94565b6104b7610baa565b6005604435101561017d576064356001600160401b03811161017d576104e1903690600401610c13565b506084356001600160401b03811161017d57610501903690600401610c13565b9060c4356001600160401b03811161017d57610521903690600401610c13565b5060e435926001600160401b03841161017d57610545610553943690600401610c70565b5061054e610f8d565b610d46565b906040519182916040830190151583526040602084015281518091526020606084019201905f5b818110610588575050500390f35b825184528594506020938401939092019160010161057a565b3461017d575f36600319011261017d575f546040516001600160a01b039091168152602090f35b3461017d575f36600319011261017d576105e0610fd2565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017d575f36600319011261017d57604060015460ff8251918181161515835260081c1615156020820152f35b3461017d57608036600319011261017d5761066736610cc5565b61066f610fd2565b60ff60015460081c161561069b5780516006556020810151600755604081015160085560600151600955005b60405162461bcd60e51b815260206004820152603260248201527f54696d6520426173652052657761726473206973206e6f7420636f6e666967756044820152713932b2103337b9103a3434b9902437b7b59760711b6064820152608490fd5b3461017d57604036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d576103d8610baa565b3461017d5760e036600319011261017d5761074d610b94565b50610756610baa565b506005604435101561017d576064356001600160401b03811161017d57610398903690600401610c13565b3461017d57606036600319011261017d576004356001600160401b03811161017d576107b1903690600401610c13565b506044356001600160401b03811161017d576103d8903690600401610c70565b3461017d5761010036600319011261017d576107eb610b94565b506107f4610baa565b506004604435101561017d576084356001600160401b03811161017d5761081f903690600401610c13565b5060a4356001600160401b03811161017d5761083f903690600401610c13565b60c4356001600160401b03811161017d5761085e903690600401610c13565b5060e4356001600160401b03811161017d5761087e903690600401610c70565b506040518091604082015f83526040602084015281518091526020606084019201905f5b8181106108b0575050500390f35b82518452859450602093840193909201916001016108a2565b3461017d57604036600319011261017d576004356001600160401b03811161017d576108f9903690600401610c13565b506024356001600160401b03811161017d576103d8903690600401610c70565b3461017d57602036600319011261017d576004356001600160401b03811161017d5761018090600319903603011261017d57604080515f8082526020820152f35b3461017d5760e036600319011261017d57610973610b94565b61097b610baa565b906044356001600160401b03811161017d573660238201121561017d57806004013590602460206109ab84610bfc565b6109b86040519182610bdb565b848152019260071b8201019036821161017d57602401915b818310610ae157505050608060631936011261017d576109ee610f8d565b604051916001600160a01b0390811691168181307fcbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b45f80a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681149182610a66575b6020836040519015158152f35b636634b75360e01b8452600484015260209150829060249082905afa8015610ad6575f90610a9a575b602091508280610a59565b506020813d602011610ace575b81610ab460209383610bdb565b8101031261017d5751801515810361017d57602090610a8f565b3d9150610aa7565b6040513d5f823e3d90fd5b60808336031261017d5760405190610af882610bc0565b83356001600160a01b038116810361017d5782526020840135600281101561017d57602083015260408401356001600160a01b038116810361017d576040830152606084013590811515820361017d5782602092606060809501528152019201916109d0565b3461017d575f36600319011261017d57600654600754600854600954928452602084019190915260408301526060820152608090f35b600435906001600160a01b038216820361017d57565b602435906001600160a01b038216820361017d57565b608081019081106001600160401b038211176102fe57604052565b90601f801991011681019081106001600160401b038211176102fe57604052565b6001600160401b0381116102fe5760051b60200190565b9080601f8301121561017d578135610c2a81610bfc565b92610c386040519485610bdb565b81845260208085019260051b82010192831161017d57602001905b828210610c605750505090565b8135815260209182019101610c53565b81601f8201121561017d578035906001600160401b0382116102fe5760405192610ca4601f8401601f191660200185610bdb565b8284526020838301011161017d57815f926020809301838601378301015290565b608090600319011261017d5760405190610cde82610bc0565b6004358252602435602083015260443560408301526064356060830152565b8051821015610d115760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211610d3257565b634e487b7160e01b5f52601160045260245ffd5b9192916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168103610f8657602060049160405192838092632f00f5ad60e11b82525afa908115610ad6575f91610f44575b5060405163ca4f280360e01b81526001600160a01b039283166004820152915f90839060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610ad6575f92610ea1575b505f91825b8551841015610e9757610e85600191610e1b8689610cfd565b51838060a01b0386165f52600a60205260405f20848060a01b03610e3f8988610cfd565b5116858060a01b03165f52602052610e6260405f209182548015610e8d57610d25565b9055610e7f838060a01b03610e778887610cfd565b511686610ff8565b90610d25565b930192610e02565b4287850155610d25565b5050505060019190565b9091503d805f833e610eb38183610bdb565b81019060208183031261017d578051906001600160401b03821161017d57019080601f8301121561017d57815190610eea82610bfc565b92610ef86040519485610bdb565b82845260208085019360051b82010191821161017d57602001915b818310610f2457505050905f610dfd565b82516001600160a01b038116810361017d57815260209283019201610f13565b90506020813d602011610f7e575b81610f5f60209383610bdb565b8101031261017d57516001600160a01b038116810361017d575f610da3565b3d9150610f52565b50505f9190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610fbf57565b63089676d560e01b5f523360045260245ffd5b5f546001600160a01b03163303610fe557565b63118cdaa760e01b5f523360045260245ffd5b60ff60015416156110825760018060a01b03165f52600a60205260405f209060018060a01b03165f5260205260405f20604051606081018181106001600160401b038211176102fe576040526040600283549384845260018101546020850152015491015260035481115f1461106f575060055490565b600254101561107e5760045490565b5f90565b50505f9056fea2646970667358221220d1a194580747f948aa68dfadb2d073ae9d6c58ba71129ac634f6fba9daee73ba64736f6c634300081b0033", + "deployedBytecode": "6080806040526004361015610012575f80fd5b5f3560e01c90816308a13d6a14610b5e575080630b89f1821461095a57806318b6eb55146109195780631c149e28146108c95780632754888d146107d157806338be241d1461078157806345421ec7146107345780635211fa77146106fb5780636683635f1461064d5780636c55c7471461061f578063715018a6146105c85780638da5cb5b146105a1578063976907cc14610495578063a0e8f5ac1461044c578063b389771d146103e3578063ba5f9f401461034b578063c9e6e6ca14610312578063d77153a71461022e578063ec93c2d2146101815763f2fde38b146100f8575f80fd5b3461017d57602036600319011261017d57610111610b94565b610119610fd2565b6001600160a01b0316801561016a575f80546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b3461017d57608036600319011261017d5761019b36610cc5565b6101a3610fd2565b60ff60015416156101cc5780516002556020810151600355604081015160045560600151600555005b60405162461bcd60e51b815260206004820152603460248201527f416d6f756e7420426173652052657761726473206973206e6f7420636f6e666960448201527333bab932b2103337b9103a3434b9902437b7b59760611b6064820152608490fd5b3461017d575f36600319011261017d576040516101408101908082106001600160401b038311176102fe57610140916040525f815260208101905f825260408101905f8252606081015f8152608082015f815260a083015f815260c08401915f835260e08501936101206101008701965f885201966001865260018852604051985f8a5251151560208a015251151560408901525115156060880152511515608087015251151560a086015251151560c085015251151560e0840152511515610100830152511515610120820152f35b634e487b7160e01b5f52604160045260245ffd5b3461017d575f36600319011261017d57600254600354600454600554604080519485526020850193909352918301526060820152608090f35b3461017d5760e036600319011261017d57610364610b94565b5061036d610baa565b506004604435101561017d576084356001600160401b03811161017d57610398903690600401610c13565b5060a4356001600160401b03811161017d576103b8903690600401610c13565b5060c4356001600160401b03811161017d576103d8903690600401610c70565b5060206040515f8152f35b3461017d57604036600319011261017d576103fc610b94565b610404610baa565b9060018060a01b03165f52600a60205260405f209060018060a01b03165f52602052606060405f20805490600260018201549101549060405192835260208301526040820152f35b3461017d57606036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d57610485610baa565b50604080515f8082526020820152f35b3461017d5761010036600319011261017d576104af610b94565b6104b7610baa565b6005604435101561017d576064356001600160401b03811161017d576104e1903690600401610c13565b506084356001600160401b03811161017d57610501903690600401610c13565b9060c4356001600160401b03811161017d57610521903690600401610c13565b5060e435926001600160401b03841161017d57610545610553943690600401610c70565b5061054e610f8d565b610d46565b906040519182916040830190151583526040602084015281518091526020606084019201905f5b818110610588575050500390f35b825184528594506020938401939092019160010161057a565b3461017d575f36600319011261017d575f546040516001600160a01b039091168152602090f35b3461017d575f36600319011261017d576105e0610fd2565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017d575f36600319011261017d57604060015460ff8251918181161515835260081c1615156020820152f35b3461017d57608036600319011261017d5761066736610cc5565b61066f610fd2565b60ff60015460081c161561069b5780516006556020810151600755604081015160085560600151600955005b60405162461bcd60e51b815260206004820152603260248201527f54696d6520426173652052657761726473206973206e6f7420636f6e666967756044820152713932b2103337b9103a3434b9902437b7b59760711b6064820152608490fd5b3461017d57604036600319011261017d576004356001600160401b03811161017d5760e090600319903603011261017d576103d8610baa565b3461017d5760e036600319011261017d5761074d610b94565b50610756610baa565b506005604435101561017d576064356001600160401b03811161017d57610398903690600401610c13565b3461017d57606036600319011261017d576004356001600160401b03811161017d576107b1903690600401610c13565b506044356001600160401b03811161017d576103d8903690600401610c70565b3461017d5761010036600319011261017d576107eb610b94565b506107f4610baa565b506004604435101561017d576084356001600160401b03811161017d5761081f903690600401610c13565b5060a4356001600160401b03811161017d5761083f903690600401610c13565b60c4356001600160401b03811161017d5761085e903690600401610c13565b5060e4356001600160401b03811161017d5761087e903690600401610c70565b506040518091604082015f83526040602084015281518091526020606084019201905f5b8181106108b0575050500390f35b82518452859450602093840193909201916001016108a2565b3461017d57604036600319011261017d576004356001600160401b03811161017d576108f9903690600401610c13565b506024356001600160401b03811161017d576103d8903690600401610c70565b3461017d57602036600319011261017d576004356001600160401b03811161017d5761018090600319903603011261017d57604080515f8082526020820152f35b3461017d5760e036600319011261017d57610973610b94565b61097b610baa565b906044356001600160401b03811161017d573660238201121561017d57806004013590602460206109ab84610bfc565b6109b86040519182610bdb565b848152019260071b8201019036821161017d57602401915b818310610ae157505050608060631936011261017d576109ee610f8d565b604051916001600160a01b0390811691168181307fcbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b45f80a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681149182610a66575b6020836040519015158152f35b636634b75360e01b8452600484015260209150829060249082905afa8015610ad6575f90610a9a575b602091508280610a59565b506020813d602011610ace575b81610ab460209383610bdb565b8101031261017d5751801515810361017d57602090610a8f565b3d9150610aa7565b6040513d5f823e3d90fd5b60808336031261017d5760405190610af882610bc0565b83356001600160a01b038116810361017d5782526020840135600281101561017d57602083015260408401356001600160a01b038116810361017d576040830152606084013590811515820361017d5782602092606060809501528152019201916109d0565b3461017d575f36600319011261017d57600654600754600854600954928452602084019190915260408301526060820152608090f35b600435906001600160a01b038216820361017d57565b602435906001600160a01b038216820361017d57565b608081019081106001600160401b038211176102fe57604052565b90601f801991011681019081106001600160401b038211176102fe57604052565b6001600160401b0381116102fe5760051b60200190565b9080601f8301121561017d578135610c2a81610bfc565b92610c386040519485610bdb565b81845260208085019260051b82010192831161017d57602001905b828210610c605750505090565b8135815260209182019101610c53565b81601f8201121561017d578035906001600160401b0382116102fe5760405192610ca4601f8401601f191660200185610bdb565b8284526020838301011161017d57815f926020809301838601378301015290565b608090600319011261017d5760405190610cde82610bc0565b6004358252602435602083015260443560408301526064356060830152565b8051821015610d115760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211610d3257565b634e487b7160e01b5f52601160045260245ffd5b9192916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168103610f8657602060049160405192838092632f00f5ad60e11b82525afa908115610ad6575f91610f44575b5060405163ca4f280360e01b81526001600160a01b039283166004820152915f90839060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610ad6575f92610ea1575b505f91825b8551841015610e9757610e85600191610e1b8689610cfd565b51838060a01b0386165f52600a60205260405f20848060a01b03610e3f8988610cfd565b5116858060a01b03165f52602052610e6260405f209182548015610e8d57610d25565b9055610e7f838060a01b03610e778887610cfd565b511686610ff8565b90610d25565b930192610e02565b4287850155610d25565b5050505060019190565b9091503d805f833e610eb38183610bdb565b81019060208183031261017d578051906001600160401b03821161017d57019080601f8301121561017d57815190610eea82610bfc565b92610ef86040519485610bdb565b82845260208085019360051b82010191821161017d57602001915b818310610f2457505050905f610dfd565b82516001600160a01b038116810361017d57815260209283019201610f13565b90506020813d602011610f7e575b81610f5f60209383610bdb565b8101031261017d57516001600160a01b038116810361017d575f610da3565b3d9150610f52565b50505f9190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610fbf57565b63089676d560e01b5f523360045260245ffd5b5f546001600160a01b03163303610fe557565b63118cdaa760e01b5f523360045260245ffd5b60ff60015416156110825760018060a01b03165f52600a60205260405f209060018060a01b03165f5260205260405f20604051606081018181106001600160401b038211176102fe576040526040600283549384845260018101546020850152015491015260035481115f1461106f575060055490565b600254101561107e5760045490565b5f90565b50505f9056fea2646970667358221220d1a194580747f948aa68dfadb2d073ae9d6c58ba71129ac634f6fba9daee73ba64736f6c634300081b0033", + "sourceMap": "1684:8575:0:-:0;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;-1:-1:-1;;1684:8575:0;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;547:14:16;4554:10:0;1311:26:17;1307:97;;-1:-1:-1;1684:8575:0;;4554:10;-1:-1:-1;;;;;;1684:8575:0;;;;;;;;;;4554:10;;-1:-1:-1;;;;;1684:8575:0;;3149:40:17;;-1:-1:-1;3149:40:17;1684:8575:0;4577:32;1684:8575;4620:30;1684:8575;;;;;;4661:22;;1684:8575;;;;;;4694:42;1684:8575;;;;;;;;;;;;;;;;4694:42;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4661:22;1684:8575;;;;;1307:97:17;1361:31;;;-1:-1:-1;1361:31:17;-1:-1:-1;1361:31:17;1684:8575:0;;-1:-1:-1;1361:31:17;1684:8575:0;;;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;1684:8575:0;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;;;;;;;:::o", + "deployedSourceMap": "1684:8575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;-1:-1:-1;;;;;1684:8575:0;2711:22:17;;2707:93;;1684:8575:0;;;-1:-1:-1;;;;;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;3149:40:17;;1684:8575:0;3149:40:17;1684:8575:0;2707:93:17;2757:31;;;1684:8575:0;2757:31:17;1684:8575:0;;;;;2757:31:17;1684:8575:0;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;1684:8575:0;8068:21;1684:8575;;;;;;;8176:68;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4913:4;1684:8575;;4913:4;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;3281:72;1684:8575;3281:72;1684:8575;;;3281:72;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;3524:59;1684:8575;;;;;3524:59;1684:8575;;;;;;-1:-1:-1;1684:8575:0;;;;;-1:-1:-1;1684:8575:0;;;3524:59;;;;;1684:8575;3524:59;;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;5793:1424;1684:8575;;;;;;:::i;:::-;;577:70:16;;:::i;:::-;5793:1424:0;:::i;:::-;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;1547:65:17;;:::i;:::-;1684:8575:0;;;-1:-1:-1;;;;;;1684:8575:0;;;;-1:-1:-1;;;;;1684:8575:0;3149:40:17;1684:8575:0;;3149:40:17;1684:8575:0;;;;;;;-1:-1:-1;;1684:8575:0;;;;;3181:46;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;;:::i;:::-;1547:65:17;;:::i;:::-;1684:8575:0;8627:21;1684:8575;;;;;;;;;8731:64;1684:8575;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;1684:8575:0;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1684:8575:0;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;577:70:16;;:::i;:::-;1684:8575:0;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;5629:4;5592:58;1684:8575;;5592:58;5681:15;-1:-1:-1;;;;;1684:8575:0;5670:26;;;;:79;;1684:8575;;;;;;;;;;;5670:79;-1:-1:-1;;;5700:49:0;;1684:8575;5700:49;;1684:8575;;;-1:-1:-1;1684:8575:0;;;;;;5700:49;;;;;;1684:8575;5700:49;;;5670:79;1684:8575;5670:79;;;;;;5700:49;;1684:8575;5700:49;;1684:8575;5700:49;;;;;;1684:8575;5700:49;;;:::i;:::-;;;1684:8575;;;;;;;;;;;;;5700:49;;;;;;-1:-1:-1;5700:49:0;;;1684:8575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;3405:68;1684:8575;3405:68;1684:8575;3405:68;1684:8575;3405:68;1684:8575;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;:::o;:::-;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;-1:-1:-1;;1684:8575:0;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1684:8575:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;5793:1424;;;;-1:-1:-1;;;;;1684:8575:0;;;;6219:14;1684:8575;6209:24;;6205:191;;6425:33;;1684:8575;;;;;;;;;;6425:33;;;;;;;;;-1:-1:-1;6425:33:0;;;5793:1424;-1:-1:-1;1684:8575:0;;-1:-1:-1;;;6532:26:0;;-1:-1:-1;;;;;1684:8575:0;;;6425:33;6532:26;;1684:8575;;-1:-1:-1;;1684:8575:0;;6532:26;;1684:8575;;6532:6;1684:8575;6532:26;;;;;;;-1:-1:-1;6532:26:0;;;5793:1424;-1:-1:-1;;;;6656:3:0;1684:8575;;6631:23;;;;;7084:66;1684:8575;6698:15;;;;;:::i;:::-;1684:8575;;;;;;;;-1:-1:-1;1684:8575:0;6754:7;6425:33;1684:8575;;-1:-1:-1;1684:8575:0;;;;;;6770:9;;;;:::i;:::-;1684:8575;;;;;;;;-1:-1:-1;1684:8575:0;;;7016:47;1684:8575;-1:-1:-1;1684:8575:0;;;;6886:24;;6882:114;;7016:47;:::i;:::-;1684:8575;;7105:45;1684:8575;;;;;7140:9;;;;:::i;:::-;1684:8575;;7105:45;;:::i;:::-;7084:66;;:::i;:::-;6656:3;1684:8575;6616:13;;;6882:114;6961:15;6935:23;;;1684:8575;7016:47;:::i;6631:23::-;;;;;1684:8575;7182:27;5793:1424;:::o;6532:26::-;;;;;;-1:-1:-1;6532:26:0;;;;;;:::i;:::-;;;1684:8575;6425:33;1684:8575;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;6425:33;1684:8575;;;;;;;;;;;;;;6425:33;1684:8575;;;;;;;;6532:26;;;;;;;1684:8575;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;6425:33;1684:8575;;;;;;;6425:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1684:8575;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;6425:33;;;;;;-1:-1:-1;6425:33:0;;6205:191;6356:28;;6364:5;6356:28;;:::o;655:169:16:-;733:6;-1:-1:-1;;;;;1684:8575:0;711:10:16;:29;707:110;;655:169::o;707:110::-;764:41;;;;;711:10;764:41;1684:8575:0;;764:41:16;;1858:166:17;1766:6;1684:8575:0;-1:-1:-1;;;;;1684:8575:0;752:10:21;1918:23:17;1914:103;;1858:166::o;1914:103::-;1965:40;;;1766:6;1965:40;752:10:21;1965:40:17;1684:8575:0;;1766:6:17;1965:40;8811:703:0;1684:8575;8917:21;1684:8575;;8916:42;8913:81;;1684:8575;;;;;;;;9027:7;1684:8575;;;;;9027:22;1684:8575;;;;;;-1:-1:-1;1684:8575:0;;;;-1:-1:-1;1684:8575:0;;;;;;;;;-1:-1:-1;;;;;1684:8575:0;;;;;;;;;;;;;;;8917:21;1684:8575;;;;;;;;;;;;9095:64;1684:8575;9073:86;;9070:437;9095:64;;;1684:8575;9184:66;1684:8575;9177:73;:::o;9070:437::-;1684:8575;;-1:-1:-1;1684:8575:0;;;9384:66;1684:8575;9377:73;:::o;9270:237::-;1684:8575;9487:8;:::o;8913:81::-;8974:8;;1684:8575;8974:8;:::o", + "sourcePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "compiler": { + "name": "solc", + "version": "0.8.27+commit.40a35a09" + }, + "ast": { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/contracts/hooks/LPIncentivizedHook.sol", + "exportedSymbols": { + "AddLiquidityKind": [ + 2752 + ], + "BaseHooks": [ + 3061 + ], + "HookFlags": [ + 2572 + ], + "IBasePoolFactory": [ + 570 + ], + "IERC20": [ + 3506 + ], + "IHooks": [ + 772 + ], + "IRouterCommon": [ + 1144 + ], + "IVault": [ + 1181 + ], + "LPIncentivizedHook": [ + 484 + ], + "LiquidityManagement": [ + 2525 + ], + "Ownable": [ + 3258 + ], + "PoolSwapParams": [ + 2717 + ], + "RemoveLiquidityKind": [ + 2773 + ], + "TokenConfig": [ + 2639 + ], + "VaultGuard": [ + 3110 + ] + }, + "id": 485, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.8", + ".24" + ], + "nodeType": "PragmaDirective", + "src": "48:24:0" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol", + "id": 3, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3507, + "src": "76:137:0", + "symbolAliases": [ + { + "foreign": { + "id": 2, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "85:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/openzeppelin-contracts/contracts/access/Ownable.sol", + "id": 5, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3259, + "src": "215:134:0", + "symbolAliases": [ + { + "foreign": { + "id": 4, + "name": "Ownable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3258, + "src": "224:7:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IBasePoolFactory.sol", + "id": 7, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 571, + "src": "353:164:0", + "symbolAliases": [ + { + "foreign": { + "id": 6, + "name": "IBasePoolFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 570, + "src": "362:16:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IHooks.sol", + "id": 9, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 773, + "src": "519:144:0", + "symbolAliases": [ + { + "foreign": { + "id": 8, + "name": "IHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 772, + "src": "528:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IRouterCommon.sol", + "id": 11, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 1145, + "src": "665:158:0", + "symbolAliases": [ + { + "foreign": { + "id": 10, + "name": "IRouterCommon", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "674:13:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/IVault.sol", + "id": 13, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 1182, + "src": "825:144:0", + "symbolAliases": [ + { + "foreign": { + "id": 12, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1181, + "src": "834:6:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/interfaces/contracts/vault/VaultTypes.sol", + "id": 20, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 2819, + "src": "971:271:0", + "symbolAliases": [ + { + "foreign": { + "id": 14, + "name": "LiquidityManagement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2525, + "src": "985:19:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 15, + "name": "TokenConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2639, + "src": "1011:11:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 16, + "name": "PoolSwapParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2717, + "src": "1029:14:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 17, + "name": "HookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "1050:9:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 18, + "name": "AddLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "1066:16:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 19, + "name": "RemoveLiquidityKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "1089:19:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/VaultGuard.sol", + "id": 22, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3111, + "src": "1246:141:0", + "symbolAliases": [ + { + "foreign": { + "id": 21, + "name": "VaultGuard", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3110, + "src": "1255:10:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "absolutePath": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + "file": "e:/Blockchain/scaffold-balancer-v3/packages/foundry/lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + "id": 24, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 485, + "sourceUnit": 3062, + "src": "1389:139:0", + "symbolAliases": [ + { + "foreign": { + "id": 23, + "name": "BaseHooks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3061, + "src": "1398:9:0", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 26, + "name": "BaseHooks", + "nameLocations": [ + "1715:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3061, + "src": "1715:9:0" + }, + "id": 27, + "nodeType": "InheritanceSpecifier", + "src": "1715:9:0" + }, + { + "baseName": { + "id": 28, + "name": "VaultGuard", + "nameLocations": [ + "1726:10:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3110, + "src": "1726:10:0" + }, + "id": 29, + "nodeType": "InheritanceSpecifier", + "src": "1726:10:0" + }, + { + "baseName": { + "id": 30, + "name": "Ownable", + "nameLocations": [ + "1738:7:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3258, + "src": "1738:7:0" + }, + "id": 31, + "nodeType": "InheritanceSpecifier", + "src": "1738:7:0" + } + ], + "canonicalName": "LPIncentivizedHook", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 25, + "nodeType": "StructuredDocumentation", + "src": "1532:150:0", + "text": " @notice Hook that gives a swap fee discount to lpRWD holders.\n @dev Uses to reward Liquidity Providers (LPs) based on multiple factors" + }, + "fullyImplemented": true, + "id": 484, + "linearizedBaseContracts": [ + 484, + 3258, + 3562, + 3110, + 3061, + 772 + ], + "name": "LPIncentivizedHook", + "nameLocation": "1693:18:0", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 33, + "mutability": "immutable", + "name": "_allowedFactory", + "nameLocation": "1862:15:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "1836:41:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 32, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1836:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 35, + "mutability": "immutable", + "name": "_trustedRouter", + "nameLocation": "2069:14:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "2043:40:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 34, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2043:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 38, + "mutability": "immutable", + "name": "_lpRWD", + "nameLocation": "2176:6:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "2151:31:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 37, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 36, + "name": "IERC20", + "nameLocations": [ + "2151:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "2151:6:0" + }, + "referencedDeclaration": 3506, + "src": "2151:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "canonicalName": "LPIncentivizedHook.LPInfo", + "id": 45, + "members": [ + { + "constant": false, + "id": 40, + "mutability": "mutable", + "name": "totalLiquidity", + "nameLocation": "2263:14:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2255:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 39, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2255:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 42, + "mutability": "mutable", + "name": "liquidityStartTime", + "nameLocation": "2296:18:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2288:26:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 41, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2288:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 44, + "mutability": "mutable", + "name": "rewards", + "nameLocation": "2333:7:0", + "nodeType": "VariableDeclaration", + "scope": 45, + "src": "2325:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 43, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2325:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "LPInfo", + "nameLocation": "2237:6:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2230:118:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.LPIncentiveFactor", + "id": 50, + "members": [ + { + "constant": false, + "id": 47, + "mutability": "mutable", + "name": "amountBaseLiquidity", + "nameLocation": "2442:19:0", + "nodeType": "VariableDeclaration", + "scope": 50, + "src": "2437:24:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 46, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2437:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 49, + "mutability": "mutable", + "name": "timeBaseLiquidity", + "nameLocation": "2477:17:0", + "nodeType": "VariableDeclaration", + "scope": 50, + "src": "2472:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 48, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2472:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "LPIncentiveFactor", + "nameLocation": "2408:17:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2401:101:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.AmountBaseLiquidityParameters", + "id": 59, + "members": [ + { + "constant": false, + "id": 52, + "mutability": "mutable", + "name": "mediumLiquidityAmountTrigger", + "nameLocation": "2623:28:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2615:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 51, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2615:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 54, + "mutability": "mutable", + "name": "higherLiquidityAmountTrigger", + "nameLocation": "2670:28:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2662:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 53, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2662:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 56, + "mutability": "mutable", + "name": "mediumLiquidityAmountRewardFee", + "nameLocation": "2717:30:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2709:38:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 55, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2709:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58, + "mutability": "mutable", + "name": "higherLiquidityAmountRewardFee", + "nameLocation": "2766:30:0", + "nodeType": "VariableDeclaration", + "scope": 59, + "src": "2758:38:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 57, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2758:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "AmountBaseLiquidityParameters", + "nameLocation": "2574:29:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2567:237:0", + "visibility": "public" + }, + { + "canonicalName": "LPIncentivizedHook.TimeBaseLiquidityParameters", + "id": 68, + "members": [ + { + "constant": false, + "id": 61, + "mutability": "mutable", + "name": "mediumLiquidityTimeTrigger", + "nameLocation": "2957:26:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "2949:34:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2949:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63, + "mutability": "mutable", + "name": "higherLiquidityTimeTrigger", + "nameLocation": "3002:26:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "2994:34:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2994:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 65, + "mutability": "mutable", + "name": "mediumLiquidityTimeRewardFee", + "nameLocation": "3047:28:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3039:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 64, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3039:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 67, + "mutability": "mutable", + "name": "higherLiquidityTimeRewardFee", + "nameLocation": "3094:28:0", + "nodeType": "VariableDeclaration", + "scope": 68, + "src": "3086:36:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 66, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3086:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "TimeBaseLiquidityParameters", + "nameLocation": "2910:27:0", + "nodeType": "StructDefinition", + "scope": 484, + "src": "2903:227:0", + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "6c55c747", + "id": 71, + "mutability": "mutable", + "name": "activeIncentiveFactor", + "nameLocation": "3206:21:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3181:46:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + }, + "typeName": { + "id": 70, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 69, + "name": "LPIncentiveFactor", + "nameLocations": [ + "3181:17:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50, + "src": "3181:17:0" + }, + "referencedDeclaration": 50, + "src": "3181:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "c9e6e6ca", + "id": 74, + "mutability": "mutable", + "name": "activeAmountBaseLiquidityParameters", + "nameLocation": "3318:35:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3281:72:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + }, + "typeName": { + "id": 73, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 72, + "name": "AmountBaseLiquidityParameters", + "nameLocations": [ + "3281:29:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 59, + "src": "3281:29:0" + }, + "referencedDeclaration": 59, + "src": "3281:29:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "08a13d6a", + "id": 77, + "mutability": "mutable", + "name": "activeTimeBaseLiquidityParameters", + "nameLocation": "3440:33:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3405:68:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + }, + "typeName": { + "id": 76, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 75, + "name": "TimeBaseLiquidityParameters", + "nameLocations": [ + "3405:27:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 68, + "src": "3405:27:0" + }, + "referencedDeclaration": 68, + "src": "3405:27:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "b389771d", + "id": 85, + "mutability": "mutable", + "name": "lpInfos", + "nameLocation": "3576:7:0", + "nodeType": "VariableDeclaration", + "scope": 484, + "src": "3524:59:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo))" + }, + "typeName": { + "id": 84, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 78, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3532:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3524:44:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo))" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 83, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 80, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79, + "name": "IERC20", + "nameLocations": [ + "3550:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "3550:6:0" + }, + "referencedDeclaration": 3506, + "src": "3550:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "nodeType": "Mapping", + "src": "3542:25:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 82, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 81, + "name": "LPInfo", + "nameLocations": [ + "3560:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "3560:6:0" + }, + "referencedDeclaration": 45, + "src": "3560:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + } + } + }, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 86, + "nodeType": "StructuredDocumentation", + "src": "3592:381:0", + "text": " @notice A new `LPIncentivizedHook` contract has been registered successfully.\n @dev If the registration fails the call will revert, so there will be no event.\n @param hooksContract This contract\n @param factory The factory (must be the allowed factory, or the call will revert)\n @param pool The pool on which the hook was registered" + }, + "eventSelector": "cbd5d637d0dd0263537ef5c2432253bd1a309fc20240914e09aabaf6325231b4", + "id": 94, + "name": "LPIncentivizedHookRegistered", + "nameLocation": "3985:28:0", + "nodeType": "EventDefinition", + "parameters": { + "id": 93, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 88, + "indexed": true, + "mutability": "mutable", + "name": "hooksContract", + "nameLocation": "4040:13:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4024:29:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 87, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4024:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 90, + "indexed": true, + "mutability": "mutable", + "name": "factory", + "nameLocation": "4080:7:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4064:23:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 89, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4064:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 92, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nameLocation": "4114:4:0", + "nodeType": "VariableDeclaration", + "scope": 94, + "src": "4098:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 91, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4098:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4013:112:0" + }, + "src": "3979:147:0" + }, + { + "anonymous": false, + "documentation": { + "id": 95, + "nodeType": "StructuredDocumentation", + "src": "4134:155:0", + "text": " @dev Event if rewards distributed successfully.\n @param LPAddress Liquidity provider address\n @param reward Earn rewards" + }, + "eventSelector": "e34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea6", + "id": 101, + "name": "RewardDistributed", + "nameLocation": "4301:17:0", + "nodeType": "EventDefinition", + "parameters": { + "id": 100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 97, + "indexed": true, + "mutability": "mutable", + "name": "LPAddress", + "nameLocation": "4345:9:0", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "4329:25:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 96, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4329:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "indexed": false, + "mutability": "mutable", + "name": "reward", + "nameLocation": "4373:6:0", + "nodeType": "VariableDeclaration", + "scope": 101, + "src": "4365:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4365:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4318:68:0" + }, + "src": "4295:92:0" + }, + { + "body": { + "id": 141, + "nodeType": "Block", + "src": "4566:178:0", + "statements": [ + { + "expression": { + "id": 125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 123, + "name": "_allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "4577:15:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 124, + "name": "allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 106, + "src": "4595:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4577:32:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 126, + "nodeType": "ExpressionStatement", + "src": "4577:32:0" + }, + { + "expression": { + "id": 129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 127, + "name": "_trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "4620:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 128, + "name": "trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 110, + "src": "4637:13:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4620:30:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 130, + "nodeType": "ExpressionStatement", + "src": "4620:30:0" + }, + { + "expression": { + "id": 135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 131, + "name": "_lpRWD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 38, + "src": "4661:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 133, + "name": "lpRWD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 108, + "src": "4677:5:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 132, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3506, + "src": "4670:6:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$3506_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4670:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "src": "4661:22:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 136, + "nodeType": "ExpressionStatement", + "src": "4661:22:0" + }, + { + "expression": { + "id": 139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 137, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "4694:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 138, + "name": "_lpIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 113, + "src": "4718:18:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor memory" + } + }, + "src": "4694:42:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 140, + "nodeType": "ExpressionStatement", + "src": "4694:42:0" + } + ] + }, + "id": 142, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 116, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 104, + "src": "4539:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + } + ], + "id": 117, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 115, + "name": "VaultGuard", + "nameLocations": [ + "4528:10:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3110, + "src": "4528:10:0" + }, + "nodeType": "ModifierInvocation", + "src": "4528:17:0" + }, + { + "arguments": [ + { + "expression": { + "id": 119, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "4554:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4558:6:0", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4554:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 121, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 118, + "name": "Ownable", + "nameLocations": [ + "4546:7:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3258, + "src": "4546:7:0" + }, + "nodeType": "ModifierInvocation", + "src": "4546:19:0" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 114, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 104, + "mutability": "mutable", + "name": "vault", + "nameLocation": "4414:5:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4407:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + }, + "typeName": { + "id": 103, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 102, + "name": "IVault", + "nameLocations": [ + "4407:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 1181, + "src": "4407:6:0" + }, + "referencedDeclaration": 1181, + "src": "4407:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 106, + "mutability": "mutable", + "name": "allowedFactory", + "nameLocation": "4429:14:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4421:22:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 105, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4421:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 108, + "mutability": "mutable", + "name": "lpRWD", + "nameLocation": "4453:5:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4445:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 107, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4445:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 110, + "mutability": "mutable", + "name": "trustedRouter", + "nameLocation": "4468:13:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4460:21:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 109, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4460:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 113, + "mutability": "mutable", + "name": "_lpIncentiveFactor", + "nameLocation": "4508:18:0", + "nodeType": "VariableDeclaration", + "scope": 142, + "src": "4483:43:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + }, + "typeName": { + "id": 112, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 111, + "name": "LPIncentiveFactor", + "nameLocations": [ + "4483:17:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50, + "src": "4483:17:0" + }, + "referencedDeclaration": 50, + "src": "4483:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor" + } + }, + "visibility": "internal" + } + ], + "src": "4406:121:0" + }, + "returnParameters": { + "id": 122, + "nodeType": "ParameterList", + "parameters": [], + "src": "4566:0:0" + }, + "scope": 484, + "src": "4395:349:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2860 + ], + "body": { + "id": 162, + "nodeType": "Block", + "src": "4862:121:0", + "statements": [ + { + "expression": { + "id": 154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 150, + "name": "hookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "4873:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags memory" + } + }, + "id": 152, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4883:27:0", + "memberName": "shouldCallAfterAddLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 2567, + "src": "4873:37:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4913:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4873:44:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 155, + "nodeType": "ExpressionStatement", + "src": "4873:44:0" + }, + { + "expression": { + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 156, + "name": "hookFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "4928:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags memory" + } + }, + "id": 158, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4938:30:0", + "memberName": "shouldCallAfterRemoveLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 2571, + "src": "4928:40:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4971:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "4928:47:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 161, + "nodeType": "ExpressionStatement", + "src": "4928:47:0" + } + ] + }, + "documentation": { + "id": 143, + "nodeType": "StructuredDocumentation", + "src": "4752:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "d77153a7", + "id": 163, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getHookFlags", + "nameLocation": "4789:12:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 145, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4816:8:0" + }, + "parameters": { + "id": 144, + "nodeType": "ParameterList", + "parameters": [], + "src": "4801:2:0" + }, + "returnParameters": { + "id": 149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 148, + "mutability": "mutable", + "name": "hookFlags", + "nameLocation": "4851:9:0", + "nodeType": "VariableDeclaration", + "scope": 163, + "src": "4834:26:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_memory_ptr", + "typeString": "struct HookFlags" + }, + "typeName": { + "id": 147, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 146, + "name": "HookFlags", + "nameLocations": [ + "4834:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2572, + "src": "4834:9:0" + }, + "referencedDeclaration": 2572, + "src": "4834:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_HookFlags_$2572_storage_ptr", + "typeString": "struct HookFlags" + } + }, + "visibility": "internal" + } + ], + "src": "4833:28:0" + }, + "scope": 484, + "src": "4780:203:0", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2853 + ], + "body": { + "id": 203, + "nodeType": "Block", + "src": "5206:551:0", + "statements": [ + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "id": 186, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "5629:4:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_LPIncentivizedHook_$484", + "typeString": "contract LPIncentivizedHook" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_LPIncentivizedHook_$484", + "typeString": "contract LPIncentivizedHook" + } + ], + "id": 185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5621:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 184, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5621:7:0", + "typeDescriptions": {} + } + }, + "id": 187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5621:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 188, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5636:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 189, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 168, + "src": "5645:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 183, + "name": "LPIncentivizedHookRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 94, + "src": "5592:28:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address,address)" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5592:58:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 191, + "nodeType": "EmitStatement", + "src": "5587:63:0" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 192, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5670:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 193, + "name": "_allowedFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 33, + "src": "5681:15:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5670:26:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [ + { + "id": 199, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 168, + "src": "5744:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 196, + "name": "factory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 166, + "src": "5717:7:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 195, + "name": "IBasePoolFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 570, + "src": "5700:16:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBasePoolFactory_$570_$", + "typeString": "type(contract IBasePoolFactory)" + } + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5700:25:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBasePoolFactory_$570", + "typeString": "contract IBasePoolFactory" + } + }, + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5726:17:0", + "memberName": "isPoolFromFactory", + "nodeType": "MemberAccess", + "referencedDeclaration": 551, + "src": "5700:43:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", + "typeString": "function (address) view external returns (bool)" + } + }, + "id": 200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5700:49:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5670:79:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 182, + "id": 202, + "nodeType": "Return", + "src": "5663:86:0" + } + ] + }, + "documentation": { + "id": 164, + "nodeType": "StructuredDocumentation", + "src": "4991:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "0b89f182", + "id": 204, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 179, + "kind": "modifierInvocation", + "modifierName": { + "id": 178, + "name": "onlyVault", + "nameLocations": [ + "5181:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3089, + "src": "5181:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "5181:9:0" + } + ], + "name": "onRegister", + "nameLocation": "5028:10:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 177, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5172:8:0" + }, + "parameters": { + "id": 176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 166, + "mutability": "mutable", + "name": "factory", + "nameLocation": "5057:7:0", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5049:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5049:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 168, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5083:4:0", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5075:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 167, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5075:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 172, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5098:20:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_memory_ptr_$dyn_memory_ptr", + "typeString": "struct TokenConfig[]" + }, + "typeName": { + "baseType": { + "id": 170, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 169, + "name": "TokenConfig", + "nameLocations": [ + "5098:11:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2639, + "src": "5098:11:0" + }, + "referencedDeclaration": 2639, + "src": "5098:11:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TokenConfig_$2639_storage_ptr", + "typeString": "struct TokenConfig" + } + }, + "id": 171, + "nodeType": "ArrayTypeName", + "src": "5098:13:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_TokenConfig_$2639_storage_$dyn_storage_ptr", + "typeString": "struct TokenConfig[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 175, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5129:28:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_calldata_ptr", + "typeString": "struct LiquidityManagement" + }, + "typeName": { + "id": 174, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 173, + "name": "LiquidityManagement", + "nameLocations": [ + "5129:19:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2525, + "src": "5129:19:0" + }, + "referencedDeclaration": 2525, + "src": "5129:19:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LiquidityManagement_$2525_storage_ptr", + "typeString": "struct LiquidityManagement" + } + }, + "visibility": "internal" + } + ], + "src": "5038:126:0" + }, + "returnParameters": { + "id": 182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 181, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 204, + "src": "5200:4:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 180, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5200:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5199:6:0" + }, + "scope": 484, + "src": "5019:738:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2950 + ], + "body": { + "id": 336, + "nodeType": "Block", + "src": "6192:1025:0", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 236, + "name": "router", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "6209:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 237, + "name": "_trustedRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "6219:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6209:24:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 244, + "nodeType": "IfStatement", + "src": "6205:191:0", + "trueBody": { + "id": 243, + "nodeType": "Block", + "src": "6235:161:0", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6364:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 240, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6371:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 241, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6363:21:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 235, + "id": 242, + "nodeType": "Return", + "src": "6356:28:0" + } + ] + } + }, + { + "assignments": [ + 246 + ], + "declarations": [ + { + "constant": false, + "id": 246, + "mutability": "mutable", + "name": "sender", + "nameLocation": "6416:6:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6408:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 245, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6408:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 252, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 248, + "name": "router", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "6439:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 247, + "name": "IRouterCommon", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1144, + "src": "6425:13:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRouterCommon_$1144_$", + "typeString": "type(contract IRouterCommon)" + } + }, + "id": 249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6425:21:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRouterCommon_$1144", + "typeString": "contract IRouterCommon" + } + }, + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6447:9:0", + "memberName": "getSender", + "nodeType": "MemberAccess", + "referencedDeclaration": 1098, + "src": "6425:31:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6425:33:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6408:50:0" + }, + { + "assignments": [ + 254 + ], + "declarations": [ + { + "constant": false, + "id": 254, + "mutability": "mutable", + "name": "_totalLiquidity", + "nameLocation": "6477:15:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6469:23:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 253, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6469:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 256, + "initialValue": { + "hexValue": "30", + "id": 255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6495:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6469:27:0" + }, + { + "assignments": [ + 261 + ], + "declarations": [ + { + "constant": false, + "id": 261, + "mutability": "mutable", + "name": "tokens", + "nameLocation": "6523:6:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6507:22:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 259, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 258, + "name": "IERC20", + "nameLocations": [ + "6507:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "6507:6:0" + }, + "referencedDeclaration": 3506, + "src": "6507:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "id": 260, + "nodeType": "ArrayTypeName", + "src": "6507:8:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "id": 266, + "initialValue": { + "arguments": [ + { + "id": 264, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "6553:4:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 262, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3071, + "src": "6532:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$1181", + "typeString": "contract IVault" + } + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6539:13:0", + "memberName": "getPoolTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 2123, + "src": "6532:20:0", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr_$", + "typeString": "function (address) view external returns (contract IERC20[] memory)" + } + }, + "id": 265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6532:26:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6507:51:0" + }, + { + "assignments": [ + 268 + ], + "declarations": [ + { + "constant": false, + "id": 268, + "mutability": "mutable", + "name": "_amountBaseReward", + "nameLocation": "6577:17:0", + "nodeType": "VariableDeclaration", + "scope": 336, + "src": "6569:25:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6569:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 270, + "initialValue": { + "hexValue": "30", + "id": 269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6597:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6569:29:0" + }, + { + "body": { + "id": 330, + "nodeType": "Block", + "src": "6661:501:0", + "statements": [ + { + "expression": { + "id": 286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 282, + "name": "_totalLiquidity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 254, + "src": "6680:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 283, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6698:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 285, + "indexExpression": { + "id": 284, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6711:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6698:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6680:33:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 287, + "nodeType": "ExpressionStatement", + "src": "6680:33:0" + }, + { + "assignments": [ + 290 + ], + "declarations": [ + { + "constant": false, + "id": 290, + "mutability": "mutable", + "name": "info", + "nameLocation": "6747:4:0", + "nodeType": "VariableDeclaration", + "scope": 330, + "src": "6732:19:0", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 289, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 288, + "name": "LPInfo", + "nameLocations": [ + "6732:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "6732:6:0" + }, + "referencedDeclaration": 45, + "src": "6732:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 298, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 291, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "6754:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 293, + "indexExpression": { + "id": 292, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 246, + "src": "6762:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6754:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 297, + "indexExpression": { + "baseExpression": { + "id": 294, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "6770:6:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 296, + "indexExpression": { + "id": 295, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6777:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6770:9:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6754:26:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6732:48:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 299, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "6886:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 300, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6891:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "6886:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6909:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6886:24:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 311, + "nodeType": "IfStatement", + "src": "6882:114:0", + "trueBody": { + "id": 310, + "nodeType": "Block", + "src": "6912:84:0", + "statements": [ + { + "expression": { + "id": 308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 303, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "6935:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 305, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6940:18:0", + "memberName": "liquidityStartTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 42, + "src": "6935:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 306, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "6961:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6967:9:0", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6961:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6935:41:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 309, + "nodeType": "ExpressionStatement", + "src": "6935:41:0" + } + ] + } + }, + { + "expression": { + "id": 319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 312, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 290, + "src": "7016:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo storage pointer" + } + }, + "id": 314, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "7021:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "7016:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "id": 317, + "name": "_totalLiquidity", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 254, + "src": "7047:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7039:7:0", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 315, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7039:7:0", + "typeDescriptions": {} + } + }, + "id": 318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7039:24:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7016:47:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 320, + "nodeType": "ExpressionStatement", + "src": "7016:47:0" + }, + { + "expression": { + "id": 328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 321, + "name": "_amountBaseReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 268, + "src": "7084:17:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "id": 323, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 246, + "src": "7133:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 324, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 261, + "src": "7140:6:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$3506_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 326, + "indexExpression": { + "id": 325, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "7147:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7140:9:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + ], + "id": 322, + "name": "_calculateAmountBaseRewards", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 427, + "src": "7105:27:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$3506_$returns$_t_uint256_$", + "typeString": "function (address,contract IERC20) returns (uint256)" + } + }, + "id": 327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7105:45:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7084:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 329, + "nodeType": "ExpressionStatement", + "src": "7084:66:0" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 275, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6631:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 276, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "6635:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6648:6:0", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6635:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6631:23:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 331, + "initializationExpression": { + "assignments": [ + 272 + ], + "declarations": [ + { + "constant": false, + "id": 272, + "mutability": "mutable", + "name": "i", + "nameLocation": "6624:1:0", + "nodeType": "VariableDeclaration", + "scope": 331, + "src": "6616:9:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 271, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6616:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 274, + "initialValue": { + "hexValue": "30", + "id": 273, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6628:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6616:13:0" + }, + "isSimpleCounterLoop": true, + "loopExpression": { + "expression": { + "id": 280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "6656:3:0", + "subExpression": { + "id": 279, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 272, + "src": "6656:1:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 281, + "nodeType": "ExpressionStatement", + "src": "6656:3:0" + }, + "nodeType": "ForStatement", + "src": "6611:551:0" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7190:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 333, + "name": "amountsInRaw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 218, + "src": "7196:12:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 334, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7189:20:0", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bool,uint256[] memory)" + } + }, + "functionReturnParameters": 235, + "id": 335, + "nodeType": "Return", + "src": "7182:27:0" + } + ] + }, + "documentation": { + "id": 205, + "nodeType": "StructuredDocumentation", + "src": "5765:22:0", + "text": "@inheritdoc IHooks" + }, + "functionSelector": "976907cc", + "id": 337, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 229, + "kind": "modifierInvocation", + "modifierName": { + "id": 228, + "name": "onlyVault", + "nameLocations": [ + "6117:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3089, + "src": "6117:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "6117:9:0" + } + ], + "name": "onAfterAddLiquidity", + "nameLocation": "5802:19:0", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 227, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6108:8:0" + }, + "parameters": { + "id": 226, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 207, + "mutability": "mutable", + "name": "router", + "nameLocation": "5840:6:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5832:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5832:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 209, + "mutability": "mutable", + "name": "pool", + "nameLocation": "5865:4:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5857:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 208, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5857:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 212, + "mutability": "mutable", + "name": "kind", + "nameLocation": "5897:4:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5880:21:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + }, + "typeName": { + "id": 211, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 210, + "name": "AddLiquidityKind", + "nameLocations": [ + "5880:16:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 2752, + "src": "5880:16:0" + }, + "referencedDeclaration": 2752, + "src": "5880:16:0", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AddLiquidityKind_$2752", + "typeString": "enum AddLiquidityKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 215, + "mutability": "mutable", + "name": "amountsInScaled18", + "nameLocation": "5929:17:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5912:34:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5912:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 214, + "nodeType": "ArrayTypeName", + "src": "5912:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 218, + "mutability": "mutable", + "name": "amountsInRaw", + "nameLocation": "5974:12:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5957:29:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5957:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 217, + "nodeType": "ArrayTypeName", + "src": "5957:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 220, + "mutability": "mutable", + "name": "bptAmountOut", + "nameLocation": "6005:12:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "5997:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5997:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 223, + "mutability": "mutable", + "name": "balancesScaled18", + "nameLocation": "6045:16:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6028:33:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 221, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6028:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 222, + "nodeType": "ArrayTypeName", + "src": "6028:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 225, + "mutability": "mutable", + "name": "userData", + "nameLocation": "6085:8:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6072:21:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 224, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6072:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5821:279:0" + }, + "returnParameters": { + "id": 235, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 231, + "mutability": "mutable", + "name": "success", + "nameLocation": "6141:7:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6136:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 230, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6136:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 234, + "mutability": "mutable", + "name": "hookAdjustedAmountsInRaw", + "nameLocation": "6167:24:0", + "nodeType": "VariableDeclaration", + "scope": 337, + "src": "6150:41:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6150:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 233, + "nodeType": "ArrayTypeName", + "src": "6150:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6135:57:0" + }, + "scope": 484, + "src": "5793:1424:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 356, + "nodeType": "Block", + "src": "8049:203:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 347, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8068:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 348, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8090:19:0", + "memberName": "amountBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 47, + "src": "8068:41:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "416d6f756e7420426173652052657761726473206973206e6f7420636f6e6669677572656420666f72207468697320486f6f6b2e", + "id": 349, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8110:54:0", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1b67d99abc4da4796a057c6980cb1dd9a385615b987b28bf660caf10a566f8e8", + "typeString": "literal_string \"Amount Base Rewards is not configured for this Hook.\"" + }, + "value": "Amount Base Rewards is not configured for this Hook." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1b67d99abc4da4796a057c6980cb1dd9a385615b987b28bf660caf10a566f8e8", + "typeString": "literal_string \"Amount Base Rewards is not configured for this Hook.\"" + } + ], + "id": 346, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "8060:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8060:105:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 351, + "nodeType": "ExpressionStatement", + "src": "8060:105:0" + }, + { + "expression": { + "id": 354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 352, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "8176:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 353, + "name": "_amountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 341, + "src": "8214:30:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_memory_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters memory" + } + }, + "src": "8176:68:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 355, + "nodeType": "ExpressionStatement", + "src": "8176:68:0" + } + ] + }, + "documentation": { + "id": 338, + "nodeType": "StructuredDocumentation", + "src": "7689:224:0", + "text": " @dev Sets the Amount based liquidity rewards parameters for the hook\n This function must be permissioned.\n @param _amountBaseLiquidityParameters The amount base liquidity parameters" + }, + "functionSelector": "ec93c2d2", + "id": 357, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 344, + "kind": "modifierInvocation", + "modifierName": { + "id": 343, + "name": "onlyOwner", + "nameLocations": [ + "8039:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "8039:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "8039:9:0" + } + ], + "name": "setAmountBaseLiquidityParameters", + "nameLocation": "7928:32:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 341, + "mutability": "mutable", + "name": "_amountBaseLiquidityParameters", + "nameLocation": "7998:30:0", + "nodeType": "VariableDeclaration", + "scope": 357, + "src": "7961:67:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_memory_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + }, + "typeName": { + "id": 340, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 339, + "name": "AmountBaseLiquidityParameters", + "nameLocations": [ + "7961:29:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 59, + "src": "7961:29:0" + }, + "referencedDeclaration": 59, + "src": "7961:29:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage_ptr", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters" + } + }, + "visibility": "internal" + } + ], + "src": "7960:69:0" + }, + "returnParameters": { + "id": 345, + "nodeType": "ParameterList", + "parameters": [], + "src": "8049:0:0" + }, + "scope": 484, + "src": "7919:333:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 376, + "nodeType": "Block", + "src": "8608:195:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 367, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8627:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 368, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8649:17:0", + "memberName": "timeBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 49, + "src": "8627:39:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "54696d6520426173652052657761726473206973206e6f7420636f6e6669677572656420666f72207468697320486f6f6b2e", + "id": 369, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8667:52:0", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8547d7d0e4f07cab9978e2dabd7f51512e4e009423b0221a8c8bdd100a7cb24a", + "typeString": "literal_string \"Time Base Rewards is not configured for this Hook.\"" + }, + "value": "Time Base Rewards is not configured for this Hook." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_8547d7d0e4f07cab9978e2dabd7f51512e4e009423b0221a8c8bdd100a7cb24a", + "typeString": "literal_string \"Time Base Rewards is not configured for this Hook.\"" + } + ], + "id": 366, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "8619:7:0", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8619:101:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 371, + "nodeType": "ExpressionStatement", + "src": "8619:101:0" + }, + { + "expression": { + "id": 374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 372, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "8731:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 373, + "name": "_timeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 361, + "src": "8767:28:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_memory_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters memory" + } + }, + "src": "8731:64:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 375, + "nodeType": "ExpressionStatement", + "src": "8731:64:0" + } + ] + }, + "documentation": { + "id": 358, + "nodeType": "StructuredDocumentation", + "src": "8260:218:0", + "text": " @dev Sets the Time based liquidity rewards parameters for the hook\n This function must be permissioned.\n @param _timeBaseLiquidityParameters The time base liquidity parameters" + }, + "functionSelector": "6683635f", + "id": 377, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 364, + "kind": "modifierInvocation", + "modifierName": { + "id": 363, + "name": "onlyOwner", + "nameLocations": [ + "8598:9:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3169, + "src": "8598:9:0" + }, + "nodeType": "ModifierInvocation", + "src": "8598:9:0" + } + ], + "name": "setTimeBaseLiquidityParameters", + "nameLocation": "8493:30:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 361, + "mutability": "mutable", + "name": "_timeBaseLiquidityParameters", + "nameLocation": "8559:28:0", + "nodeType": "VariableDeclaration", + "scope": 377, + "src": "8524:63:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_memory_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + }, + "typeName": { + "id": 360, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 359, + "name": "TimeBaseLiquidityParameters", + "nameLocations": [ + "8524:27:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 68, + "src": "8524:27:0" + }, + "referencedDeclaration": 68, + "src": "8524:27:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage_ptr", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters" + } + }, + "visibility": "internal" + } + ], + "src": "8523:65:0" + }, + "returnParameters": { + "id": 365, + "nodeType": "ParameterList", + "parameters": [], + "src": "8608:0:0" + }, + "scope": 484, + "src": "8484:319:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 426, + "nodeType": "Block", + "src": "8902:612:0", + "statements": [ + { + "condition": { + "id": 389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "8916:42:0", + "subExpression": { + "expression": { + "id": 387, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "8917:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 388, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8939:19:0", + "memberName": "amountBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 47, + "src": "8917:41:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 393, + "nodeType": "IfStatement", + "src": "8913:81:0", + "trueBody": { + "id": 392, + "nodeType": "Block", + "src": "8959:35:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8981:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 386, + "id": 391, + "nodeType": "Return", + "src": "8974:8:0" + } + ] + } + }, + { + "assignments": [ + 396 + ], + "declarations": [ + { + "constant": false, + "id": 396, + "mutability": "mutable", + "name": "info", + "nameLocation": "9020:4:0", + "nodeType": "VariableDeclaration", + "scope": 426, + "src": "9006:18:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 395, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 394, + "name": "LPInfo", + "nameLocations": [ + "9006:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "9006:6:0" + }, + "referencedDeclaration": 45, + "src": "9006:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 402, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 397, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9027:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 399, + "indexExpression": { + "id": 398, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 379, + "src": "9035:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9027:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 401, + "indexExpression": { + "id": 400, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 382, + "src": "9043:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9027:22:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9006:43:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 403, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "9073:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 404, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9078:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "9073:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 405, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9095:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 406, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9131:28:0", + "memberName": "higherLiquidityAmountTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 54, + "src": "9095:64:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9073:86:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 412, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 396, + "src": "9273:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 413, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9278:14:0", + "memberName": "totalLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 40, + "src": "9273:19:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 414, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9295:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 415, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9331:28:0", + "memberName": "mediumLiquidityAmountTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 52, + "src": "9295:64:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9273:86:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 423, + "nodeType": "Block", + "src": "9470:37:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 421, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9494:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 386, + "id": 422, + "nodeType": "Return", + "src": "9487:8:0" + } + ] + }, + "id": 424, + "nodeType": "IfStatement", + "src": "9270:237:0", + "trueBody": { + "id": 420, + "nodeType": "Block", + "src": "9360:104:0", + "statements": [ + { + "expression": { + "expression": { + "id": 417, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9384:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 418, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9420:30:0", + "memberName": "mediumLiquidityAmountRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 56, + "src": "9384:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 386, + "id": 419, + "nodeType": "Return", + "src": "9377:73:0" + } + ] + } + }, + "id": 425, + "nodeType": "IfStatement", + "src": "9070:437:0", + "trueBody": { + "id": 411, + "nodeType": "Block", + "src": "9160:104:0", + "statements": [ + { + "expression": { + "expression": { + "id": 408, + "name": "activeAmountBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 74, + "src": "9184:35:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AmountBaseLiquidityParameters_$59_storage", + "typeString": "struct LPIncentivizedHook.AmountBaseLiquidityParameters storage ref" + } + }, + "id": 409, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9220:30:0", + "memberName": "higherLiquidityAmountRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 58, + "src": "9184:66:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 386, + "id": 410, + "nodeType": "Return", + "src": "9177:73:0" + } + ] + } + } + ] + }, + "id": 427, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calculateAmountBaseRewards", + "nameLocation": "8820:27:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 383, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 379, + "mutability": "mutable", + "name": "sender", + "nameLocation": "8856:6:0", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8848:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 378, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8848:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 382, + "mutability": "mutable", + "name": "token", + "nameLocation": "8871:5:0", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8864:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 381, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 380, + "name": "IERC20", + "nameLocations": [ + "8864:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "8864:6:0" + }, + "referencedDeclaration": 3506, + "src": "8864:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "8847:30:0" + }, + "returnParameters": { + "id": 386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 385, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "8894:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8894:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8893:9:0" + }, + "scope": 484, + "src": "8811:703:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 482, + "nodeType": "Block", + "src": "9611:645:0", + "statements": [ + { + "condition": { + "id": 439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9625:40:0", + "subExpression": { + "expression": { + "id": 437, + "name": "activeIncentiveFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "9626:21:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPIncentiveFactor_$50_storage", + "typeString": "struct LPIncentivizedHook.LPIncentiveFactor storage ref" + } + }, + "id": 438, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9648:17:0", + "memberName": "timeBaseLiquidity", + "nodeType": "MemberAccess", + "referencedDeclaration": 49, + "src": "9626:39:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 443, + "nodeType": "IfStatement", + "src": "9622:79:0", + "trueBody": { + "id": 442, + "nodeType": "Block", + "src": "9666:35:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9688:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 436, + "id": 441, + "nodeType": "Return", + "src": "9681:8:0" + } + ] + } + }, + { + "assignments": [ + 446 + ], + "declarations": [ + { + "constant": false, + "id": 446, + "mutability": "mutable", + "name": "info", + "nameLocation": "9727:4:0", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "9713:18:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + }, + "typeName": { + "id": 445, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 444, + "name": "LPInfo", + "nameLocations": [ + "9713:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 45, + "src": "9713:6:0" + }, + "referencedDeclaration": 45, + "src": "9713:6:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo" + } + }, + "visibility": "internal" + } + ], + "id": 452, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 447, + "name": "lpInfos", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9734:7:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$_$", + "typeString": "mapping(address => mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref))" + } + }, + "id": 449, + "indexExpression": { + "id": 448, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 429, + "src": "9742:6:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9734:15:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_contract$_IERC20_$3506_$_t_struct$_LPInfo_$45_storage_$", + "typeString": "mapping(contract IERC20 => struct LPIncentivizedHook.LPInfo storage ref)" + } + }, + "id": 451, + "indexExpression": { + "id": 450, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "9750:5:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9734:22:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_storage", + "typeString": "struct LPIncentivizedHook.LPInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9713:43:0" + }, + { + "assignments": [ + 454 + ], + "declarations": [ + { + "constant": false, + "id": 454, + "mutability": "mutable", + "name": "duration", + "nameLocation": "9777:8:0", + "nodeType": "VariableDeclaration", + "scope": 482, + "src": "9769:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 453, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9769:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 460, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 455, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967292, + "src": "9788:5:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9794:9:0", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "9788:15:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 457, + "name": "info", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 446, + "src": "9806:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_LPInfo_$45_memory_ptr", + "typeString": "struct LPIncentivizedHook.LPInfo memory" + } + }, + "id": 458, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9811:18:0", + "memberName": "liquidityStartTime", + "nodeType": "MemberAccess", + "referencedDeclaration": 42, + "src": "9806:23:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9788:41:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9769:60:0" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 461, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 454, + "src": "9853:8:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 462, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "9864:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 463, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9898:26:0", + "memberName": "higherLiquidityTimeTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 63, + "src": "9864:60:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9853:71:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 469, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 454, + "src": "10034:8:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 470, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "10045:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10079:26:0", + "memberName": "mediumLiquidityTimeTrigger", + "nodeType": "MemberAccess", + "referencedDeclaration": 61, + "src": "10045:60:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10034:71:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 479, + "nodeType": "Block", + "src": "10212:37:0", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10236:1:0", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 436, + "id": 478, + "nodeType": "Return", + "src": "10229:8:0" + } + ] + }, + "id": 480, + "nodeType": "IfStatement", + "src": "10031:218:0", + "trueBody": { + "id": 476, + "nodeType": "Block", + "src": "10106:100:0", + "statements": [ + { + "expression": { + "expression": { + "id": 473, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "10130:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 474, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10164:28:0", + "memberName": "mediumLiquidityTimeRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 65, + "src": "10130:62:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 436, + "id": 475, + "nodeType": "Return", + "src": "10123:69:0" + } + ] + } + }, + "id": 481, + "nodeType": "IfStatement", + "src": "9850:399:0", + "trueBody": { + "id": 468, + "nodeType": "Block", + "src": "9925:100:0", + "statements": [ + { + "expression": { + "expression": { + "id": 465, + "name": "activeTimeBaseLiquidityParameters", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "9949:33:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimeBaseLiquidityParameters_$68_storage", + "typeString": "struct LPIncentivizedHook.TimeBaseLiquidityParameters storage ref" + } + }, + "id": 466, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9983:28:0", + "memberName": "higherLiquidityTimeRewardFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 67, + "src": "9949:62:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 436, + "id": 467, + "nodeType": "Return", + "src": "9942:69:0" + } + ] + } + } + ] + }, + "id": 483, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calculateTimeBaseRewards", + "nameLocation": "9531:25:0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 429, + "mutability": "mutable", + "name": "sender", + "nameLocation": "9565:6:0", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9557:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 428, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9557:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 432, + "mutability": "mutable", + "name": "token", + "nameLocation": "9580:5:0", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9573:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 431, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 430, + "name": "IERC20", + "nameLocations": [ + "9573:6:0" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 3506, + "src": "9573:6:0" + }, + "referencedDeclaration": 3506, + "src": "9573:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$3506", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "9556:30:0" + }, + "returnParameters": { + "id": 436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 435, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 483, + "src": "9603:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9603:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9602:9:0" + }, + "scope": 484, + "src": "9522:734:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 485, + "src": "1684:8575:0", + "usedErrors": [ + 1686, + 3124, + 3129 + ], + "usedEvents": [ + 94, + 101, + 3135 + ] + } + ], + "src": "48:10213:0" + }, + "functionHashes": { + "activeAmountBaseLiquidityParameters()": "c9e6e6ca", + "activeIncentiveFactor()": "6c55c747", + "activeTimeBaseLiquidityParameters()": "08a13d6a", + "getHookFlags()": "d77153a7", + "lpInfos(address,address)": "b389771d", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "976907cc", + "onAfterInitialize(uint256[],uint256,bytes)": "38be241d", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "2754888d", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "18b6eb55", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "45421ec7", + "onBeforeInitialize(uint256[],bytes)": "1c149e28", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "ba5f9f40", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "5211fa77", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "a0e8f5ac", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "0b89f182", + "owner()": "8da5cb5b", + "renounceOwnership()": "715018a6", + "setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "ec93c2d2", + "setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "6683635f", + "transferOwnership(address)": "f2fde38b" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "857200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "activeAmountBaseLiquidityParameters()": "8977", + "activeIncentiveFactor()": "2502", + "activeTimeBaseLiquidityParameters()": "8614", + "getHookFlags()": "1027", + "lpInfos(address,address)": "7126", + "onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)": "infinite", + "onAfterInitialize(uint256[],uint256,bytes)": "infinite", + "onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)": "infinite", + "onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))": "294", + "onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)": "infinite", + "onBeforeInitialize(uint256[],bytes)": "infinite", + "onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)": "infinite", + "onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)": "461", + "onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)": "611", + "onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))": "infinite", + "owner()": "2521", + "renounceOwnership()": "28270", + "setAmountBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "93499", + "setTimeBaseLiquidityParameters((uint256,uint256,uint256,uint256))": "93285", + "transferOwnership(address)": "28585" + }, + "internal": { + "_calculateAmountBaseRewards(address,contract IERC20)": "infinite", + "_calculateTimeBaseRewards(address,contract IERC20)": "infinite" + } + } +} \ No newline at end of file diff --git a/packages/foundry/contracts/hooks/LPIncentivizedHook.sol b/packages/foundry/contracts/hooks/LPIncentivizedHook.sol new file mode 100644 index 00000000..84dfa414 --- /dev/null +++ b/packages/foundry/contracts/hooks/LPIncentivizedHook.sol @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.24; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +import { IBasePoolFactory } from "@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol"; +import { IHooks } from "@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol"; +import { IRouterCommon } from "@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol"; +import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol"; +import { + LiquidityManagement, + TokenConfig, + PoolSwapParams, + HookFlags, + AddLiquidityKind, + RemoveLiquidityKind +} from "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol"; + +import { VaultGuard } from "@balancer-labs/v3-vault/contracts/VaultGuard.sol"; +import { BaseHooks } from "@balancer-labs/v3-vault/contracts/BaseHooks.sol"; + +// Interface to MockLPReward Token +interface LPRewardToken { + function mint(address sender, uint256 amount) external; +} + +/** + * @notice Hook that gives a swap fee discount to lpRWD holders. + * @dev Uses to reward Liquidity Providers (LPs) based on multiple factors + */ +contract LPIncentivizedHook is BaseHooks, VaultGuard, Ownable { + // Only pools from a specific factory are able to register and use this hook. + address private immutable _allowedFactory; + // Only trusted routers are allowed to call this hook, because the hook relies on the `getSender` implementation + // implementation to work properly. + address private immutable _trustedRouter; + + // Struct to store LP information + struct LPInfo { + uint256 totalLiquidity; + uint256 liquidityStartTime; + uint256 rewards; + } + + // Struct to store LP Incentive Factors + struct LPIncentiveFactor { + bool amountBaseLiquidity; + bool timeBaseLiquidity; + } + + // Struct to store Amount Base Liquidity Parameters + struct AmountBaseLiquidityParameters { + uint256 mediumLiquidityAmountTrigger; + uint256 higherLiquidityAmountTrigger; + uint256 mediumLiquidityAmountRewardFee; + uint256 higherLiquidityAmountRewardFee; + } + + // Struct to store Time Base Liquidity Parameters (Time Trigger should be in seconds) + struct TimeBaseLiquidityParameters { + uint256 mediumLiquidityTimeTrigger; + uint256 higherLiquidityTimeTrigger; + uint256 mediumLiquidityTimeRewardFee; + uint256 higherLiquidityTimeRewardFee; + } + + // Active Rewards Factor for the hook + LPIncentiveFactor public activeIncentiveFactor; + + // Active Amount parameter for the hook + AmountBaseLiquidityParameters public activeAmountBaseLiquidityParameters; + + // Active Time parameter for the hook + TimeBaseLiquidityParameters public activeTimeBaseLiquidityParameters; + + // Mapping from LP address to LPInfo + mapping(address => mapping(IERC20 => LPInfo)) public lpInfos; + + // LP Reward token + LPRewardToken private _lpRWD; + + /** + * @notice A new `LPIncentivizedHook` contract has been registered successfully. + * @dev If the registration fails the call will revert, so there will be no event. + * @param hooksContract This contract + * @param factory The factory (must be the allowed factory, or the call will revert) + * @param pool The pool on which the hook was registered + */ + event LPIncentivizedHookRegistered(address indexed hooksContract, address indexed factory, address indexed pool); + + /** + * @dev Event if rewards distributed successfully. + * @param LPAddress Liquidity provider address + * @param reward Earn rewards + */ + event RewardDistributed(address indexed LPAddress, uint256 reward); + + constructor( + IVault vault, + address allowedFactory, + address trustedRouter, + address lpRewardToken, + LPIncentiveFactor memory _lpIncentiveFactor + ) VaultGuard(vault) Ownable(msg.sender) { + _allowedFactory = allowedFactory; + _trustedRouter = trustedRouter; + activeIncentiveFactor = _lpIncentiveFactor; + _lpRWD = LPRewardToken(lpRewardToken); + } + + /// @inheritdoc IHooks + function getHookFlags() public pure override returns (HookFlags memory hookFlags) { + hookFlags.shouldCallAfterAddLiquidity = true; + hookFlags.shouldCallAfterRemoveLiquidity = true; + } + + /// @inheritdoc IHooks + function onRegister( + address factory, + address pool, + TokenConfig[] memory, + LiquidityManagement calldata + ) public override onlyVault returns (bool) { + // This hook implements a restrictive approach, where we check if the factory is an allowed factory and if + // the pool was created by the allowed factory. Since we only use onComputeDynamicSwapFeePercentage, this + // might be an overkill in real applications because the pool math doesn't play a role in the discount + // calculation. + + emit LPIncentivizedHookRegistered(address(this), factory, pool); + + return factory == _allowedFactory && IBasePoolFactory(factory).isPoolFromFactory(pool); + } + + /// @inheritdoc IHooks + function onAfterAddLiquidity( + address router, + address pool, + AddLiquidityKind, + uint256[] memory, + uint256[] memory amountsInRaw, + uint256, + uint256[] memory, + bytes memory + ) public override onlyVault returns (bool success, uint256[] memory hookAdjustedAmountsInRaw) { + if (router != _trustedRouter) { + // Returning false will make the transaction revert, so the second argument does not matter. + return (false, amountsInRaw); + } + + address sender = IRouterCommon(router).getSender(); + IERC20[] memory tokens = _vault.getPoolTokens(pool); + uint256 totalReward = 0; + + for (uint256 i = 0; i < amountsInRaw.length; i++) { + LPInfo storage info = lpInfos[sender][tokens[i]]; + // If this is the first time adding liquidity, set the start time + if (info.totalLiquidity == 0) { + info.liquidityStartTime = block.timestamp; + } + + info.totalLiquidity += uint256(amountsInRaw[i]); + uint256 _rewards = 0; + _rewards += _calculateAmountBaseRewards(amountsInRaw[i]); + _rewards += _calculateTimeBaseRewards(sender, tokens[i]); + info.rewards += _rewards; + totalReward += _rewards; + _lpRWD.mint(sender,_rewards); + } + emit RewardDistributed(sender, totalReward); + return (true, amountsInRaw); + } + /// @inheritdoc IHooks + function onAfterRemoveLiquidity( + address router, + address pool, + RemoveLiquidityKind, + uint256, + uint256[] memory, + uint256[] memory amountsOutRaw, + uint256[] memory, + bytes memory + ) public override onlyVault returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw) { + if (router != _trustedRouter) { + // Returning false will make the transaction revert, so the second argument does not matter. + return (false, amountsOutRaw); + } + + address sender = IRouterCommon(router).getSender(); + IERC20[] memory tokens = _vault.getPoolTokens(pool); + + for (uint256 i = 0; i < amountsOutRaw.length; i++) { + LPInfo storage info = lpInfos[sender][tokens[i]]; + + info.totalLiquidity -= uint256(amountsOutRaw[i]); + } + return (true, amountsOutRaw); + } + + /** + * @dev Sets the Amount based liquidity rewards parameters for the hook + * This function must be permissioned. + * + * @param _amountBaseLiquidityParameters The amount base liquidity parameters + */ + function setAmountBaseLiquidityParameters( + AmountBaseLiquidityParameters memory _amountBaseLiquidityParameters + ) external onlyOwner { + require(activeIncentiveFactor.amountBaseLiquidity, "Amount Base Rewards is not configured for this Hook."); + activeAmountBaseLiquidityParameters = _amountBaseLiquidityParameters; + } + + /** + * @dev Sets the Time based liquidity rewards parameters for the hook + * This function must be permissioned. + * + * @param _timeBaseLiquidityParameters The time base liquidity parameters + */ + function setTimeBaseLiquidityParameters( + TimeBaseLiquidityParameters memory _timeBaseLiquidityParameters + ) external onlyOwner { + require(activeIncentiveFactor.timeBaseLiquidity, "Time Base Rewards is not configured for this Hook."); + activeTimeBaseLiquidityParameters = _timeBaseLiquidityParameters; + } + + function _calculateAmountBaseRewards( + uint256 amountIn + ) private view returns (uint256) { + if (!activeIncentiveFactor.amountBaseLiquidity) { + return 0; + } + + if (amountIn > activeAmountBaseLiquidityParameters.higherLiquidityAmountTrigger) { + return activeAmountBaseLiquidityParameters.higherLiquidityAmountRewardFee; + } else if (amountIn > activeAmountBaseLiquidityParameters.mediumLiquidityAmountTrigger) { + return activeAmountBaseLiquidityParameters.mediumLiquidityAmountRewardFee; + } else { + return 0; + } + } + + function _calculateTimeBaseRewards(address sender, IERC20 token) private view returns (uint256) { + if (!activeIncentiveFactor.timeBaseLiquidity) { + return 0; + } + + LPInfo memory info = lpInfos[sender][token]; + + uint256 duration = block.timestamp - info.liquidityStartTime; + + if (duration > activeTimeBaseLiquidityParameters.higherLiquidityTimeTrigger) { + return activeTimeBaseLiquidityParameters.higherLiquidityTimeRewardFee; + } else if (duration > activeTimeBaseLiquidityParameters.mediumLiquidityTimeTrigger) { + return activeTimeBaseLiquidityParameters.mediumLiquidityTimeRewardFee; + } else { + return 0; + } + } +} diff --git a/packages/foundry/contracts/hooks/SwapReferralHook.sol b/packages/foundry/contracts/hooks/SwapReferralHook.sol new file mode 100644 index 00000000..afaf1767 --- /dev/null +++ b/packages/foundry/contracts/hooks/SwapReferralHook.sol @@ -0,0 +1,287 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.24; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +import { IBasePoolFactory } from "@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol"; +import { IHooks } from "@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol"; +import { IRouterCommon } from "@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol"; +import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol"; +import { + LiquidityManagement, + TokenConfig, + PoolSwapParams, + HookFlags, + AfterSwapParams +} from "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol"; + +import { VaultGuard } from "@balancer-labs/v3-vault/contracts/VaultGuard.sol"; +import { BaseHooks } from "@balancer-labs/v3-vault/contracts/BaseHooks.sol"; + +/** + * @notice Hook that gives a swap fee discount to lpRWD holders. + * @dev Uses to reward Liquidity Providers (LPs) based on multiple factors + */ +contract SwapReferralHook is BaseHooks, VaultGuard, Ownable { + // Only pools from a specific factory are able to register and use this hook. + address private immutable _allowedFactory; + // Only trusted routers are allowed to call this hook, because the hook relies on the `getSender` implementation + // implementation to work properly. + address private immutable _trustedRouter; + + IVault private immutable vault; + + struct User { + bool hasSwapped; // Tracks if the user has swapped before + string referralCodeUsed; // Referral code the user used + } + + struct Referrer { + uint256 accumulatedDiscount; // Accumulated discount for referrer, to be redeemed on next swap + } + + mapping(address => User) public users; // Tracks all user data + mapping(string => address) public codeToAddress; // Maps referral codes to user addresses + mapping(address => string) public AddressToCode; // Maps referral user addresses to codes + mapping(address => Referrer) public referrers; // Tracks referrer data + mapping(string => bool) public referralCodeExists; // Ensures unique referral codes + mapping(address => uint256) private finalSwapFeePercentage; // Used to store the finalSwapFeePercent in before Swap action and reset to zero in after Swap action + + uint256 public userDiscountPercentage = 0.50e18; // User gets 50% discount on swap fee using referral code + uint256 public referrerDiscountPerUser = 0.20e18; // Referrer gets 20% discount for each user who uses their referral code + + /** + * @notice A new `LPIncentivizedHook` contract has been registered successfully. + * @dev If the registration fails the call will revert, so there will be no event. + * @param hooksContract This contract + * @param factory The factory (must be the allowed factory, or the call will revert) + * @param pool The pool on which the hook was registered + */ + event SwapReferralHookRegistered(address indexed hooksContract, address indexed factory, address indexed pool); + + /** + * @dev Referral code is generated successfully. + * @param user address of user + * @param referralCode Unique referralcode + */ + event ReferralCodeGenerated(address indexed user, string referralCode); + + /** + * @dev Swap Executed successfully. + * @param user address of user + * @param swapFee swapfee discount + * @param userDiscount user discount + * @param referrerDiscount referrel discount + */ + event SwapFeeUpdated(address indexed user, uint256 swapFee, uint256 userDiscount, uint256 referrerDiscount); + + /** + * @dev Referrer Discount Granted successfully. + * @param referrer address of referrer + * @param discount swapfee discount + */ + event ReferrerDiscountGranted(address indexed referrer, uint256 discount); + + constructor( + IVault _vault, + address allowedFactory, + address trustedRouter + ) VaultGuard(_vault) Ownable(msg.sender) { + _allowedFactory = allowedFactory; + _trustedRouter = trustedRouter; + vault = _vault; + } + + /// @inheritdoc IHooks + function getHookFlags() public pure override returns (HookFlags memory hookFlags) { + hookFlags.shouldCallComputeDynamicSwapFee = true; + hookFlags.shouldCallBeforeSwap = true; + hookFlags.shouldCallAfterSwap = true; + } + + /// @inheritdoc IHooks + function onRegister( + address factory, + address pool, + TokenConfig[] memory, + LiquidityManagement calldata + ) public override onlyVault returns (bool) { + // This hook implements a restrictive approach, where we check if the factory is an allowed factory and if + // the pool was created by the allowed factory. Since we only use onComputeDynamicSwapFeePercentage, this + // might be an overkill in real applications because the pool math doesn't play a role in the discount + // calculation. + + emit SwapReferralHookRegistered(address(this), factory, pool); + + return factory == _allowedFactory && IBasePoolFactory(factory).isPoolFromFactory(pool); + } + + /// @inheritdoc IHooks + function onBeforeSwap(PoolSwapParams calldata params, address pool) public override onlyVault() returns (bool success) { + address user = IRouterCommon(params.router).getSender(); + if (params.router != _trustedRouter) { + finalSwapFeePercentage[user] = 0; + return (true); + } + // Calculating the discount on swap fee + uint256 _finalSwapFeePercentage = calculateSwapFee(params,user,pool); + finalSwapFeePercentage[user] = _finalSwapFeePercentage; + + return (true); + } + + /// @inheritdoc IHooks + function onComputeDynamicSwapFeePercentage( + PoolSwapParams calldata params, + address, + uint256 staticSwapFeePercentage + ) public view override onlyVault returns (bool, uint256) { + // If the router is not trusted, do not apply the veBAL discount. `getSender` may be manipulated by a + // malicious router. + if (params.router != _trustedRouter) { + return (true, staticSwapFeePercentage); + } + + address user = IRouterCommon(params.router).getSender(); + //get the last calculated discounted swap fee percentage + uint256 _finalSwapFeePercentage = finalSwapFeePercentage[user]; + + if(_finalSwapFeePercentage == 0){ + return (true, staticSwapFeePercentage); + } + return (true, _finalSwapFeePercentage); + } + + /// @inheritdoc IHooks + function onAfterSwap( + AfterSwapParams calldata params + ) public override onlyVault returns (bool success, uint256 hookAdjustedAmountCalculatedRaw) { + hookAdjustedAmountCalculatedRaw = params.amountCalculatedRaw; + + // If the router is not trusted, do not apply the veBAL discount. `getSender` may be manipulated by a + // malicious router. + if (params.router != _trustedRouter) { + return (true, hookAdjustedAmountCalculatedRaw); + } + address user = IRouterCommon(params.router).getSender(); + // Reset the last discounted swapped fee amount + finalSwapFeePercentage[user] = 0; + return (true, hookAdjustedAmountCalculatedRaw); + } + + function calculateSwapFee(PoolSwapParams calldata params, address user, address pool) internal returns (uint256){ + bytes memory userData = params.userData; + string memory referralCode; + if(userData.length > 0) { + referralCode = abi.decode(userData, (string)); + } + uint256 _staticSwapFeePercentage = vault.getStaticSwapFeePercentage(pool); + + uint256 userDiscount = 0; + uint256 referrerDiscountToApply = 0; + + // Check if it's the user's first swap + if (!users[user].hasSwapped) { + users[user].hasSwapped = true; + + if (bytes(referralCode).length > 0) { + address referrer = codeToAddress[referralCode]; + require(referrer != address(0), "Invalid referral code"); + require(referrer != user, "Cannot use your own referral code"); + + users[user].referralCodeUsed = referralCode; + + // Apply 50% discount for the referred user + userDiscount = (_staticSwapFeePercentage * userDiscountPercentage) / 1e18; + + // Grant 20% discount to referrer (accumulated for their next swap) + referrers[referrer].accumulatedDiscount += referrerDiscountPerUser; + emit ReferrerDiscountGranted(referrer, referrerDiscountPerUser); + } + + // Generate referral code for the user after their first swap + string memory newReferralCode = generateReferralCode(user); + } + + // Handle referrer discount if they have any pending discounts + referrerDiscountToApply = _applyReferrerDiscount(user, _staticSwapFeePercentage, userDiscount); + + // Calculate the final swap fee percentage after applying both discounts + uint256 finalSwapFeePer = _staticSwapFeePercentage - userDiscount - referrerDiscountToApply; + + // Ensure the final swap fee percentage is not less than 0% + if (finalSwapFeePer > _staticSwapFeePercentage) { + finalSwapFeePer = 0; + } + + // Execute the swap logic (swap fee is now discounted) + emit SwapFeeUpdated(user, finalSwapFeePer, userDiscount, referrerDiscountToApply); + return finalSwapFeePer; + } + + // Function to generate a unique referral code for the user + function generateReferralCode(address user) internal returns (string memory) { + string memory newReferralCode; + + newReferralCode = _generateCode(user, block.timestamp); + + referralCodeExists[newReferralCode] = true; + codeToAddress[newReferralCode] = user; + AddressToCode[user] = newReferralCode; + + emit ReferralCodeGenerated(user, newReferralCode); + return newReferralCode; + } + + // Internal function to generate a unique referral code + function _generateCode(address user, uint256 salt) internal pure returns (string memory) { + bytes32 hash = keccak256(abi.encodePacked(user, salt)); + return _toAlphanumericString(hash); + } + + // Convert bytes32 to alphanumeric string + function _toAlphanumericString(bytes32 _bytes) internal pure returns (string memory) { + bytes memory ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + bytes memory str = new bytes(10); + + for (uint256 i = 0; i < 10; i++) { + str[i] = ALPHABET[uint8(_bytes[i]) % ALPHABET.length]; + } + + return string(str); + } + + // Internal function to apply the referrer's discount and carry over any excess discount + function _applyReferrerDiscount(address referrer, uint256 staticSwapFeePercentage, uint256 _userDiscount) internal returns (uint256) { + uint256 referrerDiscount = (referrers[referrer].accumulatedDiscount * staticSwapFeePercentage) / 1e18; + uint256 discountApplied = 0; + + if (referrerDiscount > 0) { + uint256 maxDiscount = (staticSwapFeePercentage - _userDiscount); // Cap referrer discount at 100% of the staticSwapFeePercentage + + if (referrerDiscount > maxDiscount) { + discountApplied = maxDiscount; // Apply up to 100% discount + referrers[referrer].accumulatedDiscount -= maxDiscount; // Carry over excess discount + } else { + discountApplied = referrerDiscount; // Apply full available discount + referrers[referrer].accumulatedDiscount = 0; // Reset referrer discount + } + } + + return discountApplied; + } + + // Update user discount percentage (e.g., 0.50e18 for 50%) + function updateUserDiscountPercentage(uint256 newDiscount) external onlyOwner{ + // Only pool owner or admin should have the authority to update + userDiscountPercentage = newDiscount; + } + + // Update referrer discount percentage (e.g., 0.20e18 for 20% per user referred) + function updateReferrerDiscountPerUser(uint256 newDiscount) external onlyOwner{ + // Only pool owner or admin should have the authority to update + referrerDiscountPerUser = newDiscount; + } +} diff --git a/packages/foundry/contracts/mocks/MockLPRewardToken.sol b/packages/foundry/contracts/mocks/MockLPRewardToken.sol new file mode 100644 index 00000000..4e286d8d --- /dev/null +++ b/packages/foundry/contracts/mocks/MockLPRewardToken.sol @@ -0,0 +1,85 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +contract MockLPRewardToken is ERC20,Ownable{ + uint256 private _totalPointSupply; + mapping(address => uint256) private LPRewardPoints; + + address public HOOK_ADDRESS; + + error TransferNotAllowed(); + + // Mint the initial supply to the deployer + constructor(string memory name, string memory symbol) ERC20(name, symbol) Ownable(msg.sender){ + } + + modifier onlyHook + { + require(HOOK_ADDRESS == msg.sender); + _; + } + + function updateHookAddress(address _hook) external onlyOwner{ + HOOK_ADDRESS = _hook; + } + + // Allow any user to mint any amount of tokens to their wallet + function mint(address sender,uint256 amount) external onlyHook { + LPRewardPoints[sender] += amount; + _totalPointSupply += amount; + } + + /** + * @notice Retrieves the number of decimals for the Eduxp points. + * @dev This function is an override of the ERC20 function, so that we can pass the 0 value. + */ + function decimals() public pure override returns (uint8) { + return 0; + } + + /** + * @notice Retrieves the total supply of Eduxp points. + * @dev This overrides the ERC20 function because we don't have access to `_totalSupply` and we aren't using the + * internal transfer method. + */ + function totalSupply() public view override returns (uint256) { + return _totalPointSupply; + } + + /** + * @notice Retrieves the Eduxp points balance of an account. + * @dev This overrides the ERC20 function because we don't have access to `_totalSupply` and we aren't using the + * internal transfer method. + * @param account The account to retrieve the EDUXP points balance of + * @return The EDUXP points balance of the account + */ + function balanceOf(address account) public view override returns (uint256) { + return LPRewardPoints[account]; + } + + /** + * @notice The override of the transfer method to prevent the EDUXP token from being transferred. + * @dev This function will always revert as we don't allow EDUXP transfers. + * @param recipient The recipient of the EDUXP points + * @param amount The amount of EDUXP points to transfer + * @return A boolean indicating if the transfer was successful + */ + function transfer(address recipient, uint256 amount) public override returns (bool) { + revert TransferNotAllowed(); + } + + /** + * @notice The override of the transferFrom method to prevent the EDUXP token from being transferred. + * @dev This function will always revert as we don't allow EDUXP transfers. + * @param sender The sender of the EDUXP points + * @param recipient The recipient of the EDUXP points + * @param amount The amount of EDUXP points to transfer + * @return A boolean indicating if the transfer was successful + */ + function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { + revert TransferNotAllowed(); + } +} diff --git a/packages/foundry/foundry.toml b/packages/foundry/foundry.toml index d106dfe9..e5bde6fd 100644 --- a/packages/foundry/foundry.toml +++ b/packages/foundry/foundry.toml @@ -7,10 +7,10 @@ ffi = true solc_version = '0.8.24' auto_detect_solc = false evm_version = 'cancun' +via_ir = true ignored_error_codes = [2394] # Transient storage fs_permissions = [{ access = "read-write", path = "./"}] # SE-2 default to allow script to write contract info from /foundry to /nextjs - [rpc_endpoints] default_network = "http://127.0.0.1:8545" localhost = "http://127.0.0.1:8545" diff --git a/packages/foundry/script/01_DeployConstantSumPool.s.sol b/packages/foundry/script/01_DeployConstantSumPool.s.sol index 21d13c1b..f8033bb6 100644 --- a/packages/foundry/script/01_DeployConstantSumPool.s.sol +++ b/packages/foundry/script/01_DeployConstantSumPool.s.sol @@ -14,14 +14,15 @@ import { IERC20 } from "@openzeppelin/contracts/interfaces/IERC20.sol"; import { PoolHelpers, CustomPoolConfig, InitializationConfig } from "./PoolHelpers.sol"; import { ScaffoldHelpers, console } from "./ScaffoldHelpers.sol"; import { ConstantSumFactory } from "../contracts/factories/ConstantSumFactory.sol"; -import { VeBALFeeDiscountHookExample } from "../contracts/hooks/VeBALFeeDiscountHookExample.sol"; +import { LPIncentivizedHook } from "../contracts/hooks/LPIncentivizedHook.sol"; +import { MockLPRewardToken } from "../contracts/mocks/MockLPRewardToken.sol"; /** * @title Deploy Constant Sum Pool * @notice Deploys, registers, and initializes a constant sum pool that uses a swap fee discount hook */ contract DeployConstantSumPool is PoolHelpers, ScaffoldHelpers { - function deployConstantSumPool(address token1, address token2, address veBAL) internal { + function deployConstantSumPool(address token1, address token2) internal { // Set the pool's deployment, registration, and initialization config CustomPoolConfig memory poolConfig = getSumPoolConfig(token1, token2); InitializationConfig memory initConfig = getSumPoolInitConfig(token1, token2); @@ -34,11 +35,14 @@ contract DeployConstantSumPool is PoolHelpers, ScaffoldHelpers { ConstantSumFactory factory = new ConstantSumFactory(vault, 365 days); // pauseWindowDuration console.log("Constant Sum Factory deployed at: %s", address(factory)); + address mockLPRewardToken = address(new MockLPRewardToken("LP Reward Token", "LPRWD")); + console.log("MockLPRewardToken deployed at address: %s", mockLPRewardToken); + // Deploy a hook - address veBALFeeDiscountHook = address( - new VeBALFeeDiscountHookExample(vault, address(factory), address(router), veBAL) + address LPIncentivizedHook_ = address( + new LPIncentivizedHook(vault, address(factory), address(router), mockLPRewardToken ,LPIncentivizedHook.LPIncentiveFactor(true,false)) ); - console.log("VeBALFeeDiscountHookExample deployed at address: %s", veBALFeeDiscountHook); + console.log("LPIncentivizedHook deployed at address: %s", LPIncentivizedHook_); // Deploy a pool and register it with the vault address pool = factory.create( @@ -49,7 +53,7 @@ contract DeployConstantSumPool is PoolHelpers, ScaffoldHelpers { poolConfig.swapFeePercentage, poolConfig.protocolFeeExempt, poolConfig.roleAccounts, - veBALFeeDiscountHook, // poolHooksContract + LPIncentivizedHook_, // poolHooksContract poolConfig.liquidityManagement ); console.log("Constant Sum Pool deployed at: %s", pool); diff --git a/packages/foundry/script/02_DeployConstantProductPool.s.sol b/packages/foundry/script/02_DeployConstantProductPool.s.sol index f6cbd527..f10a1607 100644 --- a/packages/foundry/script/02_DeployConstantProductPool.s.sol +++ b/packages/foundry/script/02_DeployConstantProductPool.s.sol @@ -15,7 +15,7 @@ import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol" import { PoolHelpers, CustomPoolConfig, InitializationConfig } from "./PoolHelpers.sol"; import { ScaffoldHelpers, console } from "./ScaffoldHelpers.sol"; import { ConstantProductFactory } from "../contracts/factories/ConstantProductFactory.sol"; -import { LotteryHookExample } from "../contracts/hooks/LotteryHookExample.sol"; +import { SwapReferralHook } from "../contracts/hooks/SwapReferralHook.sol"; /** * @title Deploy Constant Product Pool @@ -36,8 +36,8 @@ contract DeployConstantProductPool is PoolHelpers, ScaffoldHelpers { console.log("Constant Product Factory deployed at: %s", address(factory)); // Deploy a hook - address lotteryHook = address(new LotteryHookExample(vault, address(router))); - console.log("LotteryHookExample deployed at address: %s", lotteryHook); + address swapReferralhook = address(new SwapReferralHook(vault, address(factory), address(router))); + console.log("SwapReferralHook deployed at address: %s", swapReferralhook); // Deploy a pool and register it with the vault address pool = factory.create( @@ -48,7 +48,7 @@ contract DeployConstantProductPool is PoolHelpers, ScaffoldHelpers { poolConfig.swapFeePercentage, poolConfig.protocolFeeExempt, poolConfig.roleAccounts, - lotteryHook, // poolHooksContract + swapReferralhook, // poolHooksContract poolConfig.liquidityManagement ); console.log("Constant Product Pool deployed at: %s", pool); @@ -106,7 +106,7 @@ contract DeployConstantProductPool is PoolHelpers, ScaffoldHelpers { poolCreator: address(0) // Account empowered to set the pool creator fee percentage }); LiquidityManagement memory liquidityManagement = LiquidityManagement({ - disableUnbalancedLiquidity: true, // Must be true to register pool with the Lottery Hook + disableUnbalancedLiquidity: true, // Must be true to register pool with the swapReferralhook enableAddLiquidityCustom: false, enableRemoveLiquidityCustom: false, enableDonation: false diff --git a/packages/foundry/script/Deploy.s.sol b/packages/foundry/script/Deploy.s.sol index 9efde461..3f550170 100644 --- a/packages/foundry/script/Deploy.s.sol +++ b/packages/foundry/script/Deploy.s.sol @@ -25,7 +25,7 @@ contract DeployScript is (address mockToken1, address mockToken2, address mockVeBAL) = deployMockTokens(); // Deploy, register, and initialize a constant sum pool with a swap fee discount hook - deployConstantSumPool(mockToken1, mockToken2, mockVeBAL); + deployConstantSumPool(mockToken1, mockToken2); // Deploy, register, and initialize a constant product pool with a lottery hook deployConstantProductPool(mockToken1, mockToken2); diff --git a/packages/foundry/test/SwapReferralHook.t.sol b/packages/foundry/test/SwapReferralHook.t.sol new file mode 100644 index 00000000..c2897efa --- /dev/null +++ b/packages/foundry/test/SwapReferralHook.t.sol @@ -0,0 +1,255 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; + +import { IVault } from "@balancer-labs/v3-interfaces/contracts/vault/IVault.sol"; +import { IVaultAdmin } from "@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol"; +import { IVaultErrors } from "@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol"; +import { + HooksConfig, + LiquidityManagement, + PoolRoleAccounts, + TokenConfig +} from "@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol"; + +import { CastingHelpers } from "@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol"; +import { ArrayHelpers } from "@balancer-labs/v3-solidity-utils/contracts/test/ArrayHelpers.sol"; +import { FixedPoint } from "@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol"; + +import { BaseVaultTest } from "@balancer-labs/v3-vault/test/foundry/utils/BaseVaultTest.sol"; +import { PoolMock } from "@balancer-labs/v3-vault/contracts/test/PoolMock.sol"; +import { PoolFactoryMock } from "@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol"; +import { RouterMock } from "@balancer-labs/v3-vault/contracts/test/RouterMock.sol"; + +import { SwapReferralHook } from "../contracts/hooks/SwapReferralHook.sol"; + +contract SwapReferralHookTest is BaseVaultTest { + using CastingHelpers for address[]; + using FixedPoint for uint256; + using ArrayHelpers for *; + + uint256 internal daiIdx; + uint256 internal usdcIdx; + + // Maximum swap fee of 10% + uint64 public constant MAX_SWAP_FEE_PERCENTAGE = 10e16; + + address payable internal trustedRouter; + + function setUp() public override { + super.setUp(); + + (daiIdx, usdcIdx) = getSortedIndexes(address(dai), address(usdc)); + + // Grants LP the ability to change the static swap fee percentage. + authorizer.grantRole(vault.getActionId(IVaultAdmin.setStaticSwapFeePercentage.selector), lp); + } + + function createHook() internal override returns (address) { + trustedRouter = payable(router); + + // lp will be the owner of the hook. Only LP is able to set hook fee percentages. + vm.prank(lp); + address swapReferralHook = address( + new SwapReferralHook(IVault(address(vault)), address(factoryMock), trustedRouter) + ); + vm.label(swapReferralHook, "SwapReferral Fee Hook"); + return swapReferralHook; + } + + function testRegistryWithWrongFactory() public { + address swapReferralPool = _createPoolToRegister(); + TokenConfig[] memory tokenConfig = vault.buildTokenConfig( + [address(dai), address(usdc)].toMemoryArray().asIERC20() + ); + + uint32 pauseWindowEndTime = IVaultAdmin(address(vault)).getPauseWindowEndTime(); + uint32 bufferPeriodDuration = IVaultAdmin(address(vault)).getBufferPeriodDuration(); + uint32 pauseWindowDuration = pauseWindowEndTime - bufferPeriodDuration; + address unauthorizedFactory = address(new PoolFactoryMock(IVault(address(vault)), pauseWindowDuration)); + + vm.expectRevert( + abi.encodeWithSelector( + IVaultErrors.HookRegistrationFailed.selector, + poolHooksContract, + swapReferralPool, + unauthorizedFactory + ) + ); + _registerPoolWithHook(swapReferralPool, tokenConfig, unauthorizedFactory); + } + + function testCreationWithWrongFactory() public { + address swapReferralPool = _createPoolToRegister(); + TokenConfig[] memory tokenConfig = vault.buildTokenConfig( + [address(dai), address(usdc)].toMemoryArray().asIERC20() + ); + + vm.expectRevert( + abi.encodeWithSelector( + IVaultErrors.HookRegistrationFailed.selector, + poolHooksContract, + swapReferralPool, + address(factoryMock) + ) + ); + _registerPoolWithHook(swapReferralPool, tokenConfig, address(factoryMock)); + } + + function testSuccessfulRegistry() public { + // Register with the allowed factory. + address swapReferralPool = factoryMock.createPool("Test Pool", "TEST"); + TokenConfig[] memory tokenConfig = vault.buildTokenConfig( + [address(dai), address(usdc)].toMemoryArray().asIERC20() + ); + + vm.expectEmit(); + emit SwapReferralHook.SwapReferralHookRegistered( + poolHooksContract, + address(factoryMock), + swapReferralPool + ); + + _registerPoolWithHook(swapReferralPool, tokenConfig, address(factoryMock)); + + HooksConfig memory hooksConfig = vault.getHooksConfig(swapReferralPool); + + assertEq(hooksConfig.hooksContract, poolHooksContract, "Wrong poolHooksContract"); + assertEq(hooksConfig.shouldCallComputeDynamicSwapFee, true, "shouldCallComputeDynamicSwapFee is false"); + assertEq(hooksConfig.shouldCallBeforeSwap, true, "shouldCallBeforeSwap is false"); + assertEq(hooksConfig.shouldCallAfterSwap, true, "shouldCallAfterSwap is false"); + } + + function testSwapWithoutReferralCode() public { + (bool _hasSwapped, string memory _referralCodeUsed) = SwapReferralHook(poolHooksContract).users(bob); + assertEq(_referralCodeUsed, '', "Bob used referral code"); + + // Bob is not using any referral code so the bob doesn't get any discount + uint256 _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE; + bytes memory _userData = bytes(""); + + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,bob,_userData); + } + + function testSwapWithReferralCode() public { + // Bob is not using any referral code so the bob doesn't get any discount + uint256 _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE; + bytes memory _userData = bytes(""); + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,bob,_userData); + + (string memory _referralCode) = SwapReferralHook(poolHooksContract).AddressToCode(bob); + // Alice is using any referral code of the bob so the alice will get discount + _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE/2; + _userData = abi.encode(_referralCode); + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,alice,_userData); + } + + function testSwapTocheckReferrerDiscount() public { + // Bob is not using any referral code so the bob doesn't get any discount + uint256 _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE; + bytes memory _userData = bytes(""); + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,bob,_userData); + + (string memory _referralCode) = SwapReferralHook(poolHooksContract).AddressToCode(bob); + // Alice is using any referral code of the bob so the alice will get discount + _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE/2; + _userData = abi.encode(_referralCode); + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,alice,_userData); + + // Alice used the referral code of bob for the swap.Now, the bob will get 20% discount on the next swap + _expectedHookFeePercentage = MAX_SWAP_FEE_PERCENTAGE - (MAX_SWAP_FEE_PERCENTAGE/5); + _userData = bytes(""); + + _doSwapAndCheckBalances(trustedRouter,_expectedHookFeePercentage,bob,_userData); + } + + function _doSwapAndCheckBalances(address payable routerToUse, uint256 expectedHookFeePercentage, address _user, bytes memory userData) private { + // Since the Vault has no swap fee, the fee will stay in the pool. + uint256 swapFeePercentage = MAX_SWAP_FEE_PERCENTAGE; + + vm.prank(lp); + vault.setStaticSwapFeePercentage(pool, swapFeePercentage); + + uint256 exactAmountIn = 1e18; + // PoolMock uses linear math with a rate of 1, so amountIn == amountOut when no fees are applied. + uint256 expectedAmountOut = exactAmountIn; + uint256 expectedHookFee = exactAmountIn.mulDown(expectedHookFeePercentage); + // The hook fee will remain in the pool, so the expected amountOut discounts the fees. + expectedAmountOut -= expectedHookFee; + + BaseVaultTest.Balances memory balancesBefore = getBalances(_user); + + vm.prank(_user); + RouterMock(routerToUse).swapSingleTokenExactIn( + pool, + dai, + usdc, + exactAmountIn, + expectedAmountOut, + MAX_UINT256, + false, + userData + ); + + BaseVaultTest.Balances memory balancesAfter = getBalances(_user); + + // User's balance of DAI is supposed to decrease, since DAI is the token in + assertEq( + balancesBefore.userTokens[daiIdx] - balancesAfter.userTokens[daiIdx], + exactAmountIn, + "User's DAI balance is wrong" + ); + // User's balance of USDC is supposed to increase, since USDC is the token out + assertEq( + balancesAfter.userTokens[usdcIdx] - balancesBefore.userTokens[usdcIdx], + expectedAmountOut, + "User's USDC balance is wrong" + ); + + // Vault's balance of DAI is supposed to increase, since DAI was added by Bob + assertEq( + balancesAfter.vaultTokens[daiIdx] - balancesBefore.vaultTokens[daiIdx], + exactAmountIn, + "Vault's DAI balance is wrong" + ); + // Vault's balance of USDC is supposed to decrease, since USDC was given to Bob + assertEq( + balancesBefore.vaultTokens[usdcIdx] - balancesAfter.vaultTokens[usdcIdx], + expectedAmountOut, + "Vault's USDC balance is wrong" + ); + + // Pool deltas should equal vault's deltas + assertEq( + balancesAfter.poolTokens[daiIdx] - balancesBefore.poolTokens[daiIdx], + exactAmountIn, + "Pool's DAI balance is wrong" + ); + assertEq( + balancesBefore.poolTokens[usdcIdx] - balancesAfter.poolTokens[usdcIdx], + expectedAmountOut, + "Pool's USDC balance is wrong" + ); + } + + // Registry tests require a new pool, because an existing pool may be already registered + function _createPoolToRegister() private returns (address newPool) { + newPool = address(new PoolMock(IVault(address(vault)), "SwapReferralPool Fee Pool", "swapReferralPool")); + vm.label(newPool, "SwapReferralPool Fee Pool"); + } + + function _registerPoolWithHook(address exitFeePool, TokenConfig[] memory tokenConfig, address factory) private { + PoolRoleAccounts memory roleAccounts; + LiquidityManagement memory liquidityManagement; + + PoolFactoryMock(factory).registerPool( + exitFeePool, + tokenConfig, + roleAccounts, + poolHooksContract, + liquidityManagement + ); + } +} diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index 5788ab86..b06de320 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -7,7 +7,7 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; const deployedContracts = { 31337: { MockToken1: { - address: "0xfdc90fb27105f322b384af5c3a39183047dec080", + address: "0xf31bF6E9a80DfdD31318100F1C36154b105D0Ae2", abi: [ { type: "constructor", @@ -365,7 +365,7 @@ const deployedContracts = { }, }, MockToken2: { - address: "0xd2ed70a2ddc08f9e302b5298ef2e656959e79dd5", + address: "0xC37e30f2f643E3d314536edFe489f09E94d7F575", abi: [ { type: "constructor", @@ -723,7 +723,7 @@ const deployedContracts = { }, }, MockVeBAL: { - address: "0x8e18528aa76be18c51653a3f61fe79cea130620f", + address: "0xd362926520308e3DaACf6767b408f9D9e8745b25", abi: [ { type: "constructor", @@ -1081,7 +1081,7 @@ const deployedContracts = { }, }, ConstantSumFactory: { - address: "0x1f16730c011b43dc6a62259b30e5721265883dde", + address: "0x42c3aE95999a5c26C016D81768B03F670b649F29", abi: [ { type: "constructor", @@ -1464,8 +1464,474 @@ const deployedContracts = { isPoolFromFactory: "lib/balancer-v3-monorepo/pkg/pool-utils/contracts/BasePoolFactory.sol", }, }, - VeBALFeeDiscountHookExample: { - address: "0x0d5e217f22a9f92f1dd2d5d5ede64ffc913a626d", + MockLPRewardToken: { + address: "0x99eB6c5521560a471BdBe043Fc08E63b3960ff6a", + abi: [ + { + type: "constructor", + inputs: [ + { + name: "name", + type: "string", + internalType: "string", + }, + { + name: "symbol", + type: "string", + internalType: "string", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "HOOK_ADDRESS", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "allowance", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + { + name: "spender", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "approve", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + { + name: "value", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "balanceOf", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "decimals", + inputs: [], + outputs: [ + { + name: "", + type: "uint8", + internalType: "uint8", + }, + ], + stateMutability: "pure", + }, + { + type: "function", + name: "mint", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "name", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "owner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "symbol", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "totalSupply", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "transfer", + inputs: [ + { + name: "recipient", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "transferFrom", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "recipient", + type: "address", + internalType: "address", + }, + { + name: "amount", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "transferOwnership", + inputs: [ + { + name: "newOwner", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateHookAddress", + inputs: [ + { + name: "_hook", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Approval", + inputs: [ + { + name: "owner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "spender", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "OwnershipTransferred", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Transfer", + inputs: [ + { + name: "from", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "value", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "ERC20InsufficientAllowance", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + { + name: "allowance", + type: "uint256", + internalType: "uint256", + }, + { + name: "needed", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + type: "error", + name: "ERC20InsufficientBalance", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "balance", + type: "uint256", + internalType: "uint256", + }, + { + name: "needed", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidApprover", + inputs: [ + { + name: "approver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidReceiver", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidSender", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC20InvalidSpender", + inputs: [ + { + name: "spender", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "OwnableInvalidOwner", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "OwnableUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "TransferNotAllowed", + inputs: [], + }, + ], + inheritedFunctions: { + allowance: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + approve: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + balanceOf: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + decimals: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + name: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + symbol: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + totalSupply: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + transfer: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + transferFrom: "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol", + owner: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", + renounceOwnership: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", + transferOwnership: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", + }, + }, + LPIncentivizedHook: { + address: "0x590f9B6664f01a4FfFFCA084e2c775F820524530", abi: [ { type: "constructor", @@ -1476,22 +1942,113 @@ const deployedContracts = { internalType: "contract IVault", }, { - name: "allowedFactory", - type: "address", - internalType: "address", + name: "allowedFactory", + type: "address", + internalType: "address", + }, + { + name: "trustedRouter", + type: "address", + internalType: "address", + }, + { + name: "lpRewardToken", + type: "address", + internalType: "address", + }, + { + name: "_lpIncentiveFactor", + type: "tuple", + internalType: "struct LPIncentivizedHook.LPIncentiveFactor", + components: [ + { + name: "amountBaseLiquidity", + type: "bool", + internalType: "bool", + }, + { + name: "timeBaseLiquidity", + type: "bool", + internalType: "bool", + }, + ], + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "activeAmountBaseLiquidityParameters", + inputs: [], + outputs: [ + { + name: "mediumLiquidityAmountTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityAmountTrigger", + type: "uint256", + internalType: "uint256", }, { - name: "veBAL", - type: "address", - internalType: "address", + name: "mediumLiquidityAmountRewardFee", + type: "uint256", + internalType: "uint256", }, { - name: "trustedRouter", - type: "address", - internalType: "address", + name: "higherLiquidityAmountRewardFee", + type: "uint256", + internalType: "uint256", }, ], - stateMutability: "nonpayable", + stateMutability: "view", + }, + { + type: "function", + name: "activeIncentiveFactor", + inputs: [], + outputs: [ + { + name: "amountBaseLiquidity", + type: "bool", + internalType: "bool", + }, + { + name: "timeBaseLiquidity", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "activeTimeBaseLiquidityParameters", + inputs: [], + outputs: [ + { + name: "mediumLiquidityTimeTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityTimeTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "mediumLiquidityTimeRewardFee", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityTimeRewardFee", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", }, { type: "function", @@ -1560,7 +2117,7 @@ const deployedContracts = { }, { type: "function", - name: "onAfterAddLiquidity", + name: "lpInfos", inputs: [ { name: "", @@ -1570,6 +2127,40 @@ const deployedContracts = { { name: "", type: "address", + internalType: "contract IERC20", + }, + ], + outputs: [ + { + name: "totalLiquidity", + type: "uint256", + internalType: "uint256", + }, + { + name: "liquidityStartTime", + type: "uint256", + internalType: "uint256", + }, + { + name: "rewards", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "onAfterAddLiquidity", + inputs: [ + { + name: "router", + type: "address", + internalType: "address", + }, + { + name: "pool", + type: "address", internalType: "address", }, { @@ -1605,12 +2196,12 @@ const deployedContracts = { ], outputs: [ { - name: "", + name: "success", type: "bool", internalType: "bool", }, { - name: "", + name: "hookAdjustedAmountsInRaw", type: "uint256[]", internalType: "uint256[]", }, @@ -1651,12 +2242,12 @@ const deployedContracts = { name: "onAfterRemoveLiquidity", inputs: [ { - name: "", + name: "router", type: "address", internalType: "address", }, { - name: "", + name: "pool", type: "address", internalType: "address", }, @@ -1693,12 +2284,12 @@ const deployedContracts = { ], outputs: [ { - name: "", + name: "success", type: "bool", internalType: "bool", }, { - name: "", + name: "hookAdjustedAmountsOutRaw", type: "uint256[]", internalType: "uint256[]", }, @@ -1979,7 +2570,7 @@ const deployedContracts = { name: "onComputeDynamicSwapFeePercentage", inputs: [ { - name: "params", + name: "", type: "tuple", internalType: "struct PoolSwapParams", components: [ @@ -2026,7 +2617,7 @@ const deployedContracts = { internalType: "address", }, { - name: "staticSwapFeePercentage", + name: "", type: "uint256", internalType: "uint256", }, @@ -2123,9 +2714,112 @@ const deployedContracts = { ], stateMutability: "nonpayable", }, + { + type: "function", + name: "owner", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setAmountBaseLiquidityParameters", + inputs: [ + { + name: "_amountBaseLiquidityParameters", + type: "tuple", + internalType: "struct LPIncentivizedHook.AmountBaseLiquidityParameters", + components: [ + { + name: "mediumLiquidityAmountTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityAmountTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "mediumLiquidityAmountRewardFee", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityAmountRewardFee", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setTimeBaseLiquidityParameters", + inputs: [ + { + name: "_timeBaseLiquidityParameters", + type: "tuple", + internalType: "struct LPIncentivizedHook.TimeBaseLiquidityParameters", + components: [ + { + name: "mediumLiquidityTimeTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityTimeTrigger", + type: "uint256", + internalType: "uint256", + }, + { + name: "mediumLiquidityTimeRewardFee", + type: "uint256", + internalType: "uint256", + }, + { + name: "higherLiquidityTimeRewardFee", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "transferOwnership", + inputs: [ + { + name: "newOwner", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "event", - name: "VeBALFeeDiscountHookExampleRegistered", + name: "LPIncentivizedHookRegistered", inputs: [ { name: "hooksContract", @@ -2140,13 +2834,73 @@ const deployedContracts = { internalType: "address", }, { - name: "pool", + name: "pool", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "OwnershipTransferred", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RewardDistributed", + inputs: [ + { + name: "LPAddress", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "reward", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "OwnableInvalidOwner", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "OwnableUnauthorizedAccount", + inputs: [ + { + name: "account", type: "address", - indexed: true, internalType: "address", }, ], - anonymous: false, }, { type: "error", @@ -2172,10 +2926,13 @@ const deployedContracts = { onBeforeSwap: "lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", onComputeDynamicSwapFeePercentage: "lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", onRegister: "lib/balancer-v3-monorepo/pkg/vault/contracts/BaseHooks.sol", + owner: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", + renounceOwnership: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", + transferOwnership: "lib/openzeppelin-contracts/contracts/access/Ownable.sol", }, }, ConstantProductFactory: { - address: "0x35b2e11b8c2b27fd74bd28da018eee10a67c95a8", + address: "0x04DDfd77ac74bC2fa592b1cEa7594de0274838eF", abi: [ { type: "constructor", @@ -2558,19 +3315,24 @@ const deployedContracts = { isPoolFromFactory: "lib/balancer-v3-monorepo/pkg/pool-utils/contracts/BasePoolFactory.sol", }, }, - LotteryHookExample: { - address: "0xf92fb772445695d6d5a5a4dbbfd2d886b1500a52", + SwapReferralHook: { + address: "0x81bEfEE265F8499b26AAB3532B5C4EC6e911aF4e", abi: [ { type: "constructor", inputs: [ { - name: "vault", + name: "_vault", type: "address", internalType: "contract IVault", }, { - name: "router", + name: "allowedFactory", + type: "address", + internalType: "address", + }, + { + name: "trustedRouter", type: "address", internalType: "address", }, @@ -2579,26 +3341,38 @@ const deployedContracts = { }, { type: "function", - name: "LUCKY_NUMBER", - inputs: [], + name: "AddressToCode", + inputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], outputs: [ { name: "", - type: "uint8", - internalType: "uint8", + type: "string", + internalType: "string", }, ], stateMutability: "view", }, { type: "function", - name: "MAX_NUMBER", - inputs: [], + name: "codeToAddress", + inputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], outputs: [ { name: "", - type: "uint8", - internalType: "uint8", + type: "address", + internalType: "address", }, ], stateMutability: "view", @@ -2609,7 +3383,7 @@ const deployedContracts = { inputs: [], outputs: [ { - name: "", + name: "hookFlags", type: "tuple", internalType: "struct HookFlags", components: [ @@ -2668,32 +3442,6 @@ const deployedContracts = { ], stateMutability: "pure", }, - { - type: "function", - name: "getRandomNumber", - inputs: [], - outputs: [ - { - name: "", - type: "uint8", - internalType: "uint8", - }, - ], - stateMutability: "view", - }, - { - type: "function", - name: "hookSwapFeePercentage", - inputs: [], - outputs: [ - { - name: "", - type: "uint64", - internalType: "uint64", - }, - ], - stateMutability: "view", - }, { type: "function", name: "onAfterAddLiquidity", @@ -3054,7 +3802,7 @@ const deployedContracts = { name: "onBeforeSwap", inputs: [ { - name: "", + name: "params", type: "tuple", internalType: "struct PoolSwapParams", components: [ @@ -3096,14 +3844,14 @@ const deployedContracts = { ], }, { - name: "", + name: "pool", type: "address", internalType: "address", }, ], outputs: [ { - name: "", + name: "success", type: "bool", internalType: "bool", }, @@ -3115,7 +3863,7 @@ const deployedContracts = { name: "onComputeDynamicSwapFeePercentage", inputs: [ { - name: "", + name: "params", type: "tuple", internalType: "struct PoolSwapParams", components: [ @@ -3162,7 +3910,7 @@ const deployedContracts = { internalType: "address", }, { - name: "", + name: "staticSwapFeePercentage", type: "uint256", internalType: "uint256", }, @@ -3186,7 +3934,7 @@ const deployedContracts = { name: "onRegister", inputs: [ { - name: "", + name: "factory", type: "address", internalType: "address", }, @@ -3274,21 +4022,59 @@ const deployedContracts = { }, { type: "function", - name: "renounceOwnership", + name: "referralCodeExists", + inputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "referrerDiscountPerUser", inputs: [], - outputs: [], - stateMutability: "nonpayable", + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", }, { type: "function", - name: "setHookSwapFeePercentage", + name: "referrers", inputs: [ { - name: "swapFeePercentage", - type: "uint64", - internalType: "uint64", + name: "", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "accumulatedDiscount", + type: "uint256", + internalType: "uint256", }, ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceOwnership", + inputs: [], outputs: [], stateMutability: "nonpayable", }, @@ -3306,61 +4092,80 @@ const deployedContracts = { stateMutability: "nonpayable", }, { - type: "event", - name: "HookSwapFeePercentageChanged", + type: "function", + name: "updateReferrerDiscountPerUser", inputs: [ { - name: "hooksContract", - type: "address", - indexed: true, - internalType: "address", + name: "newDiscount", + type: "uint256", + internalType: "uint256", }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "updateUserDiscountPercentage", + inputs: [ { - name: "hookFeePercentage", + name: "newDiscount", type: "uint256", - indexed: false, internalType: "uint256", }, ], - anonymous: false, + outputs: [], + stateMutability: "nonpayable", }, { - type: "event", - name: "LotteryFeeCollected", + type: "function", + name: "userDiscountPercentage", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "users", inputs: [ { - name: "hooksContract", + name: "", type: "address", - indexed: true, internalType: "address", }, + ], + outputs: [ { - name: "token", - type: "address", - indexed: true, - internalType: "contract IERC20", + name: "hasSwapped", + type: "bool", + internalType: "bool", }, { - name: "feeAmount", - type: "uint256", - indexed: false, - internalType: "uint256", + name: "referralCodeUsed", + type: "string", + internalType: "string", }, ], - anonymous: false, + stateMutability: "view", }, { type: "event", - name: "LotteryHookExampleRegistered", + name: "OwnershipTransferred", inputs: [ { - name: "hooksContract", + name: "previousOwner", type: "address", indexed: true, internalType: "address", }, { - name: "pool", + name: "newOwner", type: "address", indexed: true, internalType: "address", @@ -3370,28 +4175,35 @@ const deployedContracts = { }, { type: "event", - name: "LotteryWinningsPaid", + name: "ReferralCodeGenerated", inputs: [ { - name: "hooksContract", + name: "user", type: "address", indexed: true, internalType: "address", }, { - name: "winner", - type: "address", - indexed: true, - internalType: "address", + name: "referralCode", + type: "string", + indexed: false, + internalType: "string", }, + ], + anonymous: false, + }, + { + type: "event", + name: "ReferrerDiscountGranted", + inputs: [ { - name: "token", + name: "referrer", type: "address", indexed: true, - internalType: "contract IERC20", + internalType: "address", }, { - name: "amountWon", + name: "discount", type: "uint256", indexed: false, internalType: "uint256", @@ -3401,72 +4213,66 @@ const deployedContracts = { }, { type: "event", - name: "OwnershipTransferred", + name: "SwapFeeUpdated", inputs: [ { - name: "previousOwner", + name: "user", type: "address", indexed: true, internalType: "address", }, { - name: "newOwner", - type: "address", - indexed: true, - internalType: "address", + name: "swapFee", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "userDiscount", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "referrerDiscount", + type: "uint256", + indexed: false, + internalType: "uint256", }, ], anonymous: false, }, { - type: "error", - name: "AddressEmptyCode", + type: "event", + name: "SwapReferralHookRegistered", inputs: [ { - name: "target", + name: "hooksContract", type: "address", + indexed: true, internalType: "address", }, - ], - }, - { - type: "error", - name: "AddressInsufficientBalance", - inputs: [ { - name: "account", + name: "factory", type: "address", + indexed: true, internalType: "address", }, - ], - }, - { - type: "error", - name: "FailedInnerCall", - inputs: [], - }, - { - type: "error", - name: "IndexOutOfBounds", - inputs: [], - }, - { - type: "error", - name: "OwnableInvalidOwner", - inputs: [ { - name: "owner", + name: "pool", type: "address", + indexed: true, internalType: "address", }, ], + anonymous: false, }, { type: "error", - name: "OwnableUnauthorizedAccount", + name: "OwnableInvalidOwner", inputs: [ { - name: "account", + name: "owner", type: "address", internalType: "address", }, @@ -3474,10 +4280,10 @@ const deployedContracts = { }, { type: "error", - name: "SafeERC20FailedOperation", + name: "OwnableUnauthorizedAccount", inputs: [ { - name: "token", + name: "account", type: "address", internalType: "address", }, @@ -3513,7 +4319,7 @@ const deployedContracts = { }, }, WeightedPoolFactory: { - address: "0x6def85e32294b59ad5084a12304d1284737b4389", + address: "0xc033821DAcAf7989B331Ae9cF0B8dD0F721703c5", abi: [ { type: "constructor", @@ -3918,7 +4724,7 @@ const deployedContracts = { }, }, ExitFeeHookExample: { - address: "0x8a5450ce448a84ac5e6aea0ca03fb16d590d6227", + address: "0xB30B3c7BC047Ec501740415017925D9F9ADdc373", abi: [ { type: "constructor",