diff --git a/.gitignore b/.gitignore index 0ff5874..f9a5fcc 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ target/ # Compiler files foundry/cache/ foundry/out/ +foundry/node_modules/ diff --git a/foundry/lib/balancer-labs/v2-interfaces/CHANGELOG.md b/foundry/lib/balancer-labs/v2-interfaces/CHANGELOG.md deleted file mode 100644 index 2343f27..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/CHANGELOG.md +++ /dev/null @@ -1,57 +0,0 @@ -# Changelog - -## 0.4.0 (20223-03-15) - -- Added `IERC4626`. -- Added `IChildChainGauge`. -- Added `ILMGetters`. - -### Breaking changes - -- Removed `IBaseGaugeFactory`. -- Refactor: renamed `IBalancerMinter` to `IMainnetBalancerMinter`. - - `IMainnetBalancerMinter` now implements reduced version of previous `IBalancerMinter` and `ILMGetters`. - -## 0.3.0 (20223-02-08) - -### New Features - -- Added `checkpointGaugesOfTypeAboveRelativeWeight` to `IL2GaugeCheckpointer`. -- Added `IComposableStablePoolRates`. -- Added `IProtocolFeeCache`. -- Added `setTargets` and `setSwapFeePercentage` to `ILinearPool`. - -### Breaking changes - -- `IL2GaugeCheckpointer`: `getGaugeAt` renamed to `getGaugeAtIndex`. - -## 0.2.1 (2022-12-12) - -### Misc - -- Added examples to readme. - -## 0.2.0 (2022-12-01) - -### New Interfaces - -- Added `IProtocolFeeSplitter`. -- Added `IL2GaugeCheckpointer`. -- Added `IAuthorizerAdaptorEntrypoint`. -- Added `IRateProviderPool`. -- Added `IVersion`. -- Added `IFactoryCreatedPoolVersion`. -- Added `IRecoveryModeHelper`. - -### New Features - -- Extended the valid compiler version range to any of the 0.7.x and 0.8.x line. - -### Breaking Changes - -- Removed `IAssetManager`, which was unused. -- `IGaugeAdder`: authorizer adaptor getter replaced with authorizer adaptor entrypoint getter. - -## 0.1.0 (2022-10-25) - -- Initial release. diff --git a/foundry/lib/balancer-labs/v2-interfaces/README.md b/foundry/lib/balancer-labs/v2-interfaces/README.md deleted file mode 100644 index f6eb9ad..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/README.md +++ /dev/null @@ -1,139 +0,0 @@ -# Balancer - -# Balancer V2 Interfaces - -[![NPM Package](https://img.shields.io/npm/v/@balancer-labs/v2-interfaces.svg)](https://www.npmjs.org/package/@balancer-labs/v2-interfaces) - -This package contains interfaces used in dependent packages, which makes building systems that interact with Balancer contracts simpler, as the implementation information is not included. - -## Overview - -### Installation - -```console -$ npm install @balancer-labs/v2-interfaces -``` - -### Usage - -This package can be used in multiple ways, including interacting with already deployed Pools, or performing local testing. It contains all interfaces used in the system, from the foundational [Vault](contracts/vault/IVault.sol) to very specific contracts (e.g., [Optimism Gas Limit Provider](contracts/liquidity-mining/IOptimismGasLimitProvider.sol)). - -The following are a couple code samples to help get you started. To get the address of deployed contracts in both production and test networks, see [`v2-deployments`](../deployments). - -Sample contract that joins a Balancer Pool: - -````solidity -pragma solidity ^0.7.0; - -// Import Vault interface, error messages, and library for decoding join/exit data. -import "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol"; -import "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol"; -import "@balancer-labs/v2-interfaces/contracts/pool-weighted/WeightedPoolUserData.sol"; -import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; -import "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol"; - -// Import ERC20Helpers for `_asIAsset` -import "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol"; - -contract JoinBalancerPool { - IVault private constant vault = "0xBA12222222228d8Ba445958a75a0704d566BF2C8"; - - function joinBalancerPool(bytes32 poolId, address sender, address recipient, uint256[] memory amountsIn, uint256 minBptAmountOut) external { - (IERC20[] memory tokens, , ) = vault.getPoolTokens(poolId); - - // Use BalancerErrors to validate input - _require(amountsIn.length == tokens.length, Errors.INPUT_LENGTH_MISMATCH); - - // Encode the userData for a multi-token join - bytes memory userData = abi.encode(WeightedPoolUserData.JoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT, amountsIn, minBptAmountOut); - - IVault.JoinPoolRequest memory request = IVault.JoinPoolRequest({ - assets: _asIAsset(tokens), - maxAmountsIn: amountsIn, - userData: userData, - fromInternalBalance: false - }); - - // Call the Vault to join the pool - vault.joinPool(poolId, sender, recipient, request); - } - - ... -} -``` - -Sample contract that performs Internal Balance deposits: - -```solidity -pragma solidity ^0.7.0; - -import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; - -contract SimpleDepositor { - IVault private constant vault = "0xBA12222222228d8Ba445958a75a0704d566BF2C8"; - - function depositFunds( - IERC20[] memory tokens, - uint256[] memory amounts, - ) external { - IVault.UserBalanceOp[] memory ops = new IVault.UserBalanceOp[](tokens.length); - - for (uint256 i = 0; i < tokens.length; ++i) { - ops[i] = IVault.UserBalanceOp({ - kind: IVault.UserBalanceOpKind.DEPOSIT_INTERNAL, - asset: IAsset(tokens[i]), - amount: amounts[i], - sender: address(this), - recipient: address(this) - }); - } - - vault.manageUserBalance(ops); - } -} -```` - -Sample contract that performs Flash Loans: - -```solidity -pragma solidity ^0.7.0; - -import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; -import "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol"; - -contract FlashLoanRecipient is IFlashLoanRecipient { - IVault private constant vault = "0xBA12222222228d8Ba445958a75a0704d566BF2C8"; - - function makeFlashLoan( - IERC20[] memory tokens, - uint256[] memory amounts, - bytes memory userData - ) external { - vault.flashLoan(this, tokens, amounts, userData); - } - - function receiveFlashLoan( - IERC20[] memory tokens, - uint256[] memory amounts, - uint256[] memory feeAmounts, - bytes memory userData - ) external override { - require(msg.sender == vault); - ... - } -} -``` - -### Notes - -In addition to interfaces, it also includes a small number of libraries that encapsulate enum types for particular pools (e.g., [StablePoolUserData](contracts/pool-stable/StablePoolUserData.sol), and functions for working with encoding and decoding `userData`. (See the `balancer-js` package for TypeScript versions of these utilities.) - -One of the most commonly included libraries is [BalancerErrors](contracts/solidity-utils/helpers/BalancerErrors.sol). To save bytecode, Balancer V2 does not use the standard `require(, 'error string')`. Instead, BalancerErrors defines `_require` and `_revert` functions. These take a numerical constant instead of a string, and return a fixed-length code, which can be converted to plain text using TypeScript utilities. - -## Licensing - -[GNU General Public License Version 3 (GPL v3)](../../LICENSE). - -``` - -``` diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/distributors/IDistributorCallback.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/distributors/IDistributorCallback.sol deleted file mode 100644 index f656ebf..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/distributors/IDistributorCallback.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IDistributorCallback { - function distributorCallback(bytes calldata callbackData) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IArbitrumFeeProvider.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IArbitrumFeeProvider.sol deleted file mode 100644 index 951e4a1..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IArbitrumFeeProvider.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IArbitrumFeeProvider { - function getArbitrumFees() - external - view - returns ( - uint256 gasLimit, - uint256 gasPrice, - uint256 maxSubmissionCost - ); - - function setArbitrumFees( - uint64 gasLimit, - uint64 gasPrice, - uint64 maxSubmissionCost - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol deleted file mode 100644 index 25e4ffb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/helpers/IAuthentication.sol"; -import "../vault/IVault.sol"; - -interface IAuthorizerAdaptor is IAuthentication { - /** - * @notice Returns the Balancer Vault - */ - function getVault() external view returns (IVault); - - /** - * @notice Returns the Authorizer - */ - function getAuthorizer() external view returns (IAuthorizer); - - /** - * @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so. - * @param target - Address of the contract to be called - * @param data - Calldata to be sent to the target contract - * @return The bytes encoded return value from the performed function call - */ - function performAction(address target, bytes calldata data) external payable returns (bytes memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptorEntrypoint.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptorEntrypoint.sol deleted file mode 100644 index b77db5b..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptorEntrypoint.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IAuthorizerAdaptor.sol"; - -/** - * @notice Interface for `AuthorizerAdaptorEntrypoint`. - */ -interface IAuthorizerAdaptorEntrypoint is IAuthorizerAdaptor { - /** - * @notice Returns the Authorizer Adaptor - */ - function getAuthorizerAdaptor() external view returns (IAuthorizerAdaptor); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol deleted file mode 100644 index 9e6fbca..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerMinter.sol +++ /dev/null @@ -1,115 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -/** - * @dev Base minter interface, applicable to Mainnet minter or L2 pseudo minters. - */ -interface IBalancerMinter { - event Minted(address indexed recipient, address gauge, uint256 minted); - - /** - * @notice Returns the address of the Balancer Governance Token - */ - function getBalancerToken() external view returns (IERC20); - - /** - * @notice Mint everything which belongs to `msg.sender` and send to them - * @param gauge `LiquidityGauge` address to get mintable amount from - */ - function mint(address gauge) external returns (uint256); - - /** - * @notice Mint everything which belongs to `msg.sender` across multiple gauges - * @param gauges List of `LiquidityGauge` addresses - */ - function mintMany(address[] calldata gauges) external returns (uint256); - - /** - * @notice Mint tokens for `user` - * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf - * @param gauge `LiquidityGauge` address to get mintable amount from - * @param user Address to mint to - */ - function mintFor(address gauge, address user) external returns (uint256); - - /** - * @notice Mint tokens for `user` across multiple gauges - * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf - * @param gauges List of `LiquidityGauge` addresses - * @param user Address to mint to - */ - function mintManyFor(address[] calldata gauges, address user) external returns (uint256); - - /** - * @notice The total number of tokens minted for `user` from `gauge` - */ - function minted(address user, address gauge) external view returns (uint256); - - /** - * @notice Whether `minter` is approved to mint tokens for `user` - */ - function getMinterApproval(address minter, address user) external view returns (bool); - - /** - * @notice Set whether `minter` is approved to mint tokens on your behalf - */ - function setMinterApproval(address minter, bool approval) external; - - /** - * @notice Set whether `minter` is approved to mint tokens on behalf of `user`, who has signed a message authorizing - * them. - */ - function setMinterApprovalWithSignature( - address minter, - bool approval, - address user, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external; - - // The below functions are near-duplicates of functions available above. - // They are included for ABI compatibility with snake_casing as used in vyper contracts. - // solhint-disable func-name-mixedcase - - /** - * @notice Whether `minter` is approved to mint tokens for `user` - */ - function allowed_to_mint_for(address minter, address user) external view returns (bool); - - /** - * @notice Mint everything which belongs to `msg.sender` across multiple gauges - * @dev This function is not recommended as `mintMany()` is more flexible and gas efficient - * @param gauges List of `LiquidityGauge` addresses - */ - function mint_many(address[8] calldata gauges) external; - - /** - * @notice Mint tokens for `user` - * @dev Only possible when `msg.sender` has been approved by `user` to mint on their behalf - * @param gauge `LiquidityGauge` address to get mintable amount from - * @param user Address to mint to - */ - function mint_for(address gauge, address user) external; - - /** - * @notice Toggle whether `minter` is approved to mint tokens for `user` - */ - function toggle_approve_mint(address minter) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol deleted file mode 100644 index 9a60577..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerToken.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IBalancerToken is IERC20 { - function mint(address to, uint256 amount) external; - - function getRoleMemberCount(bytes32 role) external view returns (uint256); - - function getRoleMember(bytes32 role, uint256 index) external view returns (address); - - function hasRole(bytes32 role, address account) external view returns (bool); - - function getRoleAdmin(bytes32 role) external view returns (bytes32); - - function grantRole(bytes32 role, address account) external; - - function revokeRole(bytes32 role, address account) external; - - // solhint-disable-next-line func-name-mixedcase - function DEFAULT_ADMIN_ROLE() external view returns (bytes32); - - // solhint-disable-next-line func-name-mixedcase - function MINTER_ROLE() external view returns (bytes32); - - // solhint-disable-next-line func-name-mixedcase - function SNAPSHOT_ROLE() external view returns (bytes32); - - function snapshot() external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol deleted file mode 100644 index 3334591..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IBalancerTokenAdmin.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/helpers/IAuthentication.sol"; - -import "./IBalancerToken.sol"; - -interface IBalancerTokenAdmin is IAuthentication { - // solhint-disable func-name-mixedcase - function INITIAL_RATE() external view returns (uint256); - - function RATE_REDUCTION_TIME() external view returns (uint256); - - function RATE_REDUCTION_COEFFICIENT() external view returns (uint256); - - function RATE_DENOMINATOR() external view returns (uint256); - - // solhint-enable func-name-mixedcase - - /** - * @notice Returns the address of the Balancer Governance Token - */ - function getBalancerToken() external view returns (IBalancerToken); - - function activate() external; - - function rate() external view returns (uint256); - - function startEpochTimeWrite() external returns (uint256); - - function mint(address to, uint256 amount) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainGauge.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainGauge.sol deleted file mode 100644 index d4df179..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainGauge.sol +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../pool-utils/IVersion.sol"; -import "./ILiquidityGaugeFactory.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase -// solhint-disable func-param-name-mixedcase - -interface IChildChainGauge is IVersion { - /** - * @notice Proxy constructor. - * @param lpToken Pool allowed to stake in this gauge. - * @param version Gauge version string identifier. - */ - function initialize(address lpToken, string memory version) external; - - /** - * @notice Returns BAL liquidity emissions calculated during checkpoints for the given user. - * @param user User address. - * @return uint256 BAL amount to issue for the address. - */ - function integrate_fraction(address user) external view returns (uint256); - - /** - * @notice Records a checkpoint for a given user. - * @param user User address. - * @return bool Always true. - */ - function user_checkpoint(address user) external returns (bool); - - /** - * @notice Returns gauge factory address. - */ - function factory() external view returns (ILiquidityGaugeFactory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol deleted file mode 100644 index 7f6fc89..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainLiquidityGaugeFactory.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IChildChainStreamer.sol"; -import "./ILiquidityGauge.sol"; -import "./ILiquidityGaugeFactory.sol"; -import "./IRewardsOnlyGauge.sol"; - -interface IChildChainLiquidityGaugeFactory is ILiquidityGaugeFactory { - event RewardsOnlyGaugeCreated(address indexed gauge, address indexed pool, address streamer); - - /** - * @notice Returns the address of the implementation used for gauge deployments. - */ - function getGaugeImplementation() external view returns (ILiquidityGauge); - - /** - * @notice Returns the address of the implementation used for streamer deployments. - */ - function getChildChainStreamerImplementation() external view returns (IChildChainStreamer); - - /** - * @notice Returns the address of the gauge belonging to `pool`. - */ - function getPoolGauge(address pool) external view returns (ILiquidityGauge); - - /** - * @notice Returns the address of the streamer belonging to `gauge`. - */ - function getGaugeStreamer(address gauge) external view returns (address); - - /** - * @notice Returns true if `streamer` was created by this factory. - */ - function isStreamerFromFactory(address streamer) external view returns (bool); - - /** - * @notice Returns the address of the pool which `gauge` belongs. - */ - function getGaugePool(address gauge) external view returns (IERC20); - - /** - * @notice Returns the address of the streamer belonging to `pool`'s gauge. - */ - function getPoolStreamer(address pool) external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol deleted file mode 100644 index 93f8f25..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IChildChainStreamer.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase - -interface IChildChainStreamer { - function initialize(address gauge) external; - - function get_reward() external; - - function reward_tokens(uint256 index) external view returns (IERC20); - - function add_reward( - IERC20 rewardToken, - address distributor, - uint256 duration - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol deleted file mode 100644 index 42e0a6a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IFeeDistributor.sol +++ /dev/null @@ -1,168 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IVotingEscrow.sol"; - -/** - * @title Fee Distributor - * @notice Distributes any tokens transferred to the contract (e.g. Protocol fees and any BAL emissions) among veBAL - * holders proportionally based on a snapshot of the week at which the tokens are sent to the FeeDistributor contract. - * @dev Supports distributing arbitrarily many different tokens. In order to start distributing a new token to veBAL - * holders simply transfer the tokens to the `FeeDistributor` contract and then call `checkpointToken`. - */ -interface IFeeDistributor { - event TokenCheckpointed(IERC20 token, uint256 amount, uint256 lastCheckpointTimestamp); - event TokensClaimed(address user, IERC20 token, uint256 amount, uint256 userTokenTimeCursor); - - /** - * @notice Returns the VotingEscrow (veBAL) token contract - */ - function getVotingEscrow() external view returns (IVotingEscrow); - - /** - * @notice Returns the global time cursor representing the most earliest uncheckpointed week. - */ - function getTimeCursor() external view returns (uint256); - - /** - * @notice Returns the user-level time cursor representing the most earliest uncheckpointed week. - * @param user - The address of the user to query. - */ - function getUserTimeCursor(address user) external view returns (uint256); - - /** - * @notice Returns the token-level time cursor storing the timestamp at up to which tokens have been distributed. - * @param token - The ERC20 token address to query. - */ - function getTokenTimeCursor(IERC20 token) external view returns (uint256); - - /** - * @notice Returns the user-level time cursor storing the timestamp of the latest token distribution claimed. - * @param user - The address of the user to query. - * @param token - The ERC20 token address to query. - */ - function getUserTokenTimeCursor(address user, IERC20 token) external view returns (uint256); - - /** - * @notice Returns the user's cached balance of veBAL as of the provided timestamp. - * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. - * This function requires `user` to have been checkpointed past `timestamp` so that their balance is cached. - * @param user - The address of the user of which to read the cached balance of. - * @param timestamp - The timestamp at which to read the `user`'s cached balance at. - */ - function getUserBalanceAtTimestamp(address user, uint256 timestamp) external view returns (uint256); - - /** - * @notice Returns the cached total supply of veBAL as of the provided timestamp. - * @dev Only timestamps which fall on Thursdays 00:00:00 UTC will return correct values. - * This function requires the contract to have been checkpointed past `timestamp` so that the supply is cached. - * @param timestamp - The timestamp at which to read the cached total supply at. - */ - function getTotalSupplyAtTimestamp(uint256 timestamp) external view returns (uint256); - - /** - * @notice Returns the FeeDistributor's cached balance of `token`. - */ - function getTokenLastBalance(IERC20 token) external view returns (uint256); - - /** - * @notice Returns the amount of `token` which the FeeDistributor received in the week beginning at `timestamp`. - * @param token - The ERC20 token address to query. - * @param timestamp - The timestamp corresponding to the beginning of the week of interest. - */ - function getTokensDistributedInWeek(IERC20 token, uint256 timestamp) external view returns (uint256); - - // Depositing - - /** - * @notice Deposits tokens to be distributed in the current week. - * @dev Sending tokens directly to the FeeDistributor instead of using `depositTokens` may result in tokens being - * retroactively distributed to past weeks, or for the distribution to carry over to future weeks. - * - * If for some reason `depositTokens` cannot be called, in order to ensure that all tokens are correctly distributed - * manually call `checkpointToken` before and after the token transfer. - * @param token - The ERC20 token address to distribute. - * @param amount - The amount of tokens to deposit. - */ - function depositToken(IERC20 token, uint256 amount) external; - - /** - * @notice Deposits tokens to be distributed in the current week. - * @dev A version of `depositToken` which supports depositing multiple `tokens` at once. - * See `depositToken` for more details. - * @param tokens - An array of ERC20 token addresses to distribute. - * @param amounts - An array of token amounts to deposit. - */ - function depositTokens(IERC20[] calldata tokens, uint256[] calldata amounts) external; - - // Checkpointing - - /** - * @notice Caches the total supply of veBAL at the beginning of each week. - * This function will be called automatically before claiming tokens to ensure the contract is properly updated. - */ - function checkpoint() external; - - /** - * @notice Caches the user's balance of veBAL at the beginning of each week. - * This function will be called automatically before claiming tokens to ensure the contract is properly updated. - * @param user - The address of the user to be checkpointed. - */ - function checkpointUser(address user) external; - - /** - * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions. - * @dev Any `token` balance held by the FeeDistributor above that which is returned by `getTokenLastBalance` - * will be distributed evenly across the time period since `token` was last checkpointed. - * - * This function will be called automatically before claiming tokens to ensure the contract is properly updated. - * @param token - The ERC20 token address to be checkpointed. - */ - function checkpointToken(IERC20 token) external; - - /** - * @notice Assigns any newly-received tokens held by the FeeDistributor to weekly distributions. - * @dev A version of `checkpointToken` which supports checkpointing multiple tokens. - * See `checkpointToken` for more details. - * @param tokens - An array of ERC20 token addresses to be checkpointed. - */ - function checkpointTokens(IERC20[] calldata tokens) external; - - // Claiming - - /** - * @notice Claims all pending distributions of the provided token for a user. - * @dev It's not necessary to explicitly checkpoint before calling this function, it will ensure the FeeDistributor - * is up to date before calculating the amount of tokens to be claimed. - * @param user - The user on behalf of which to claim. - * @param token - The ERC20 token address to be claimed. - * @return The amount of `token` sent to `user` as a result of claiming. - */ - function claimToken(address user, IERC20 token) external returns (uint256); - - /** - * @notice Claims a number of tokens on behalf of a user. - * @dev A version of `claimToken` which supports claiming multiple `tokens` on behalf of `user`. - * See `claimToken` for more details. - * @param user - The user on behalf of which to claim. - * @param tokens - An array of ERC20 token addresses to be claimed. - * @return An array of the amounts of each token in `tokens` sent to `user` as a result of claiming. - */ - function claimTokens(address user, IERC20[] calldata tokens) external returns (uint256[] memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol deleted file mode 100644 index 5966841..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeAdder.sol +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IAuthorizerAdaptorEntrypoint.sol"; -import "./IGaugeController.sol"; -import "./ILiquidityGauge.sol"; -import "./ILiquidityGaugeFactory.sol"; -import "./IStakingLiquidityGauge.sol"; - -interface IGaugeAdder is IAuthentication { - enum GaugeType { LiquidityMiningCommittee, veBAL, Ethereum, Polygon, Arbitrum, Optimism, Gnosis, ZKSync } - - event GaugeFactoryAdded(GaugeType indexed gaugeType, ILiquidityGaugeFactory gaugeFactory); - - /** - * @notice Returns the address of the Authorizer adaptor entrypoint contract. - */ - function getAuthorizerAdaptorEntrypoint() external view returns (IAuthorizerAdaptorEntrypoint); - - /** - * @notice Returns the address of the Gauge Controller - */ - function getGaugeController() external view returns (IGaugeController); - - /** - * @notice Returns the `index`'th factory for gauge type `gaugeType` - */ - function getFactoryForGaugeType(GaugeType gaugeType, uint256 index) external view returns (address); - - /** - * @notice Returns the number of factories for gauge type `gaugeType` - */ - function getFactoryForGaugeTypeCount(GaugeType gaugeType) external view returns (uint256); - - /** - * @notice Returns whether `gauge` has been deployed by one of the listed factories for the gauge type `gaugeType` - */ - function isGaugeFromValidFactory(address gauge, GaugeType gaugeType) external view returns (bool); - - /** - * @notice Adds a new gauge to the GaugeController for the "Ethereum" type. - */ - function addEthereumGauge(IStakingLiquidityGauge gauge) external; - - /** - * @notice Adds a new gauge to the GaugeController for the "Polygon" type. - * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. - * It should not be called with the address of the gauge which is deployed on Polygon - */ - function addPolygonGauge(address rootGauge) external; - - /** - * @notice Adds a new gauge to the GaugeController for the "Arbitrum" type. - * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. - * It should not be called with the address of the gauge which is deployed on Arbitrum - */ - function addArbitrumGauge(address rootGauge) external; - - /** - * @notice Adds a new gauge to the GaugeController for the "Optimism" type. - * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. - * It should not be called with the address of the gauge which is deployed on Optimism. - */ - function addOptimismGauge(address rootGauge) external; - - /** - * @notice Adds a new gauge to the GaugeController for the "Gnosis" type. - * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. - * It should not be called with the address of the gauge which is deployed on Gnosis Chain. - */ - function addGnosisGauge(address rootGauge) external; - - /** - * @notice Adds a new gauge to the GaugeController for the "ZKSync" type. - * This function must be called with the address of the *root* gauge which is deployed on Ethereum mainnet. - * It should not be called with the address of the gauge which is deployed on ZKSync. - */ - function addZKSyncGauge(address rootGauge) external; - - /** - * @notice Adds `factory` as an allowlisted factory contract for gauges with type `gaugeType`. - */ - function addGaugeFactory(ILiquidityGaugeFactory factory, GaugeType gaugeType) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol deleted file mode 100644 index 88390fb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IGaugeController.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IAuthorizerAdaptor.sol"; -import "./IVotingEscrow.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase - -interface IGaugeController { - function checkpoint_gauge(address gauge) external; - - function gauge_relative_weight(address gauge, uint256 time) external view returns (uint256); - - function voting_escrow() external view returns (IVotingEscrow); - - function token() external view returns (IERC20); - - function add_type(string calldata name, uint256 weight) external; - - function change_type_weight(int128 typeId, uint256 weight) external; - - function add_gauge(address gauge, int128 gaugeType) external; - - function n_gauge_types() external view returns (int128); - - function gauge_types(address gauge) external view returns (int128); - - function admin() external view returns (IAuthorizerAdaptor); - - function gauge_exists(address gauge) external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IL2GaugeCheckpointer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IL2GaugeCheckpointer.sol deleted file mode 100644 index 11023cb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IL2GaugeCheckpointer.sol +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity ^0.7.0; - -import "./IGaugeAdder.sol"; -import "./IStakelessGauge.sol"; - -/** - * @title L2 Gauge Checkpointer interface - * @notice Manages checkpoints for L2 gauges, allowing to perform mutiple checkpoints in a single call. - * @dev Supports Polygon, Arbitrum, Optimism, Gnosis and ZKSync stakeless root gauges. Gauges to be checkpointed need - * to be added to the controller beforehand. - */ -interface IL2GaugeCheckpointer { - /** - * @dev Emitted when a gauge is added to the checkpointer. - */ - event GaugeAdded(IGaugeAdder.GaugeType indexed gaugeType, IStakelessGauge indexed gauge); - - /** - * @dev Emitted when a gauge is removed from the checkpointer. - */ - event GaugeRemoved(IGaugeAdder.GaugeType indexed gaugeType, IStakelessGauge indexed gauge); - - /** - * @dev Adds an array of gauges from the given type. - * Gauges added will be considered when performing checkpoints. - * The gauges to add should meet the following preconditions: - * - They must have been created in a valid GaugeFactory, according to GaugeAdder#isGaugeFromValidFactory. - * - They must exist in the GaugeController, according to GaugeController#gauge_exists. - * - They must not be killed. - * - They must not have been previously added to the checkpointer. - * @param gaugeType - Type of the gauge. - * @param gauges - Gauges to add. - */ - function addGauges(IGaugeAdder.GaugeType gaugeType, IStakelessGauge[] calldata gauges) external; - - /** - * @dev Removes an array of gauges from the given type. - * Removed gauges will not be considered when performing checkpoints. To remove gauges: - * - They must be killed. - * - They must have been previously added to the checkpointer. - * @param gaugeType - Type of the gauge. - * @param gauges - Gauges to remove. - */ - function removeGauges(IGaugeAdder.GaugeType gaugeType, IStakelessGauge[] calldata gauges) external; - - /** - * @dev Returns true if the given gauge was added for the given type; false otherwise. - * @param gaugeType - Type of the gauge. - * @param gauge - Gauge to check. - */ - function hasGauge(IGaugeAdder.GaugeType gaugeType, IStakelessGauge gauge) external view returns (bool); - - /** - * @dev Returns the amount of added gauges for a given type. - * @param gaugeType - Type of the gauge. - */ - function getTotalGauges(IGaugeAdder.GaugeType gaugeType) external view returns (uint256); - - /** - * @dev Returns the gauge of a given type at the given index. - * Reverts if the index is greater than or equal to the amount of added gauges for the given type. - * @param gaugeType - Type of the gauge. - * @param index - Index of the added gauge. - */ - function getGaugeAtIndex(IGaugeAdder.GaugeType gaugeType, uint256 index) external view returns (IStakelessGauge); - - /** - * @dev Performs a checkpoint for all added gauges above the given relative weight threshold. - * Reverts if the ETH sent in the call is not enough to cover bridge costs. - * @param minRelativeWeight - Threshold to filter out gauges below it. - */ - function checkpointGaugesAboveRelativeWeight(uint256 minRelativeWeight) external payable; - - /** - * @dev Performs a checkpoint for all added gauges of a given type above the given relative weight threshold. - * Reverts if the ETH sent in the call is not enough to cover bridge costs. - * @param gaugeType - Type of the gauge. - * @param minRelativeWeight - Threshold to filter out gauges below it. - */ - function checkpointGaugesOfTypeAboveRelativeWeight(IGaugeAdder.GaugeType gaugeType, uint256 minRelativeWeight) - external - payable; - - /** - * @dev Returns the ETH cost to checkpoint all gauges for a given minimum relative weight. - * A lower minimum relative weight might return higher costs, since more gauges could potentially be included - * in the checkpoint. - */ - function getTotalBridgeCost(uint256 minRelativeWeight) external view returns (uint256); - - /** - * @dev Returns true if gauge type is Polygon, Arbitrum, Optimism, Gnosis or ZKSync; false otherwise. - */ - function isSupportedGaugeType(IGaugeAdder.GaugeType gaugeType) external pure returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILMGetters.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILMGetters.sol deleted file mode 100644 index de8505a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILMGetters.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IBalancerTokenAdmin.sol"; -import "./IGaugeController.sol"; - -interface ILMGetters { - /** - * @notice Returns the address of the Balancer Token Admin contract - */ - function getBalancerTokenAdmin() external view returns (IBalancerTokenAdmin); - - /** - * @notice Returns the address of the Gauge Controller - */ - function getGaugeController() external view returns (IGaugeController); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol deleted file mode 100644 index c6323ee..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGauge.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase -// solhint-disable func-param-name-mixedcase - -interface ILiquidityGauge { - // solhint-disable-next-line var-name-mixedcase - event RelativeWeightCapChanged(uint256 new_relative_weight_cap); - - /** - * @notice Returns BAL liquidity emissions calculated during checkpoints for the given user. - * @param user User address. - * @return uint256 BAL amount to issue for the address. - */ - function integrate_fraction(address user) external view returns (uint256); - - /** - * @notice Record a checkpoint for a given user. - * @param user User address. - * @return bool Always true. - */ - function user_checkpoint(address user) external returns (bool); - - /** - * @notice Returns true if gauge is killed; false otherwise. - */ - function is_killed() external view returns (bool); - - /** - * @notice Kills the gauge so it cannot mint BAL. - */ - function killGauge() external; - - /** - * @notice Unkills the gauge so it can mint BAL again. - */ - function unkillGauge() external; - - /** - * @notice Sets a new relative weight cap for the gauge. - * The value shall be normalized to 1e18, and not greater than MAX_RELATIVE_WEIGHT_CAP. - * @param relativeWeightCap New relative weight cap. - */ - function setRelativeWeightCap(uint256 relativeWeightCap) external; - - /** - * @notice Gets the relative weight cap for the gauge. - */ - function getRelativeWeightCap() external view returns (uint256); - - /** - * @notice Returns the gauge's relative weight for a given time, capped to its relative weight cap attribute. - * @param time Timestamp in the past or present. - */ - function getCappedRelativeWeight(uint256 time) external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol deleted file mode 100644 index c7698e5..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ILiquidityGaugeFactory.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./ILiquidityGauge.sol"; - -interface ILiquidityGaugeFactory { - /** - * @notice Returns true if `gauge` was created by this factory. - */ - function isGaugeFromFactory(address gauge) external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IMainnetBalancerMinter.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IMainnetBalancerMinter.sol deleted file mode 100644 index 9f855a1..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IMainnetBalancerMinter.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IBalancerMinter.sol"; -import "./ILMGetters.sol"; - -/** - * @dev Full L1 Balancer minter interface with singleton getters. - */ -interface IMainnetBalancerMinter is IBalancerMinter, ILMGetters { - // solhint-disable-previous-line no-empty-blocks -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IOptimismGasLimitProvider.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IOptimismGasLimitProvider.sol deleted file mode 100644 index a165d93..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IOptimismGasLimitProvider.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IOptimismGasLimitProvider { - function getOptimismGasLimit() external view returns (uint32 gasLimit); - - function setOptimismGasLimit(uint32 gasLimit) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol deleted file mode 100644 index 0b0ed3a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardTokenDistributor.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase, var-name-mixedcase - -interface IRewardTokenDistributor { - struct Reward { - IERC20 token; - address distributor; - uint256 period_finish; - uint256 rate; - uint256 last_update; - uint256 integral; - } - - function reward_tokens(uint256 index) external view returns (IERC20); - - function reward_data(IERC20 token) external view returns (Reward memory); - - function claim_rewards(address user) external; - - function add_reward(IERC20 rewardToken, address distributor) external; - - function set_reward_distributor(IERC20 rewardToken, address distributor) external; - - function deposit_reward_token(IERC20 rewardToken, uint256 amount) external; - - function claimable_reward(address rewardToken, address user) external view returns (uint256); - - function claimable_reward_write(address rewardToken, address user) external returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol deleted file mode 100644 index 0ff1cce..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IRewardsOnlyGauge.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IChildChainStreamer.sol"; -import "./IRewardTokenDistributor.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase - -interface IRewardsOnlyGauge is IRewardTokenDistributor { - function initialize( - address pool, - address streamer, - bytes32 claimSignature - ) external; - - // solhint-disable-next-line func-name-mixedcase - function lp_token() external view returns (IERC20); - - function reward_contract() external view returns (IChildChainStreamer); - - function set_rewards( - address childChainStreamer, - bytes32 claimSig, - address[8] calldata rewardTokens - ) external; - - function last_claim() external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol deleted file mode 100644 index f7d6d8c..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/ISmartWalletChecker.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface ISmartWalletChecker { - function check(address contractAddress) external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol deleted file mode 100644 index a63f126..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakelessGauge.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./ILiquidityGauge.sol"; - -interface IStakelessGauge is ILiquidityGauge { - function checkpoint() external payable returns (bool); - - function getRecipient() external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol deleted file mode 100644 index eb801e9..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IStakingLiquidityGauge.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./ILiquidityGauge.sol"; -import "./IRewardTokenDistributor.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase, var-name-mixedcase - -interface IStakingLiquidityGauge is IRewardTokenDistributor, ILiquidityGauge, IERC20 { - function initialize(address lpToken, uint256 relativeWeightCap) external; - - function lp_token() external view returns (IERC20); - - function deposit(uint256 value, address recipient) external; - - function withdraw(uint256 value) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol deleted file mode 100644 index 8b9e40c..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVeDelegation.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase - -interface IVeDelegation { - // solhint-disable-next-line func-name-mixedcase - function adjusted_balance_of(address user) external view returns (uint256); - - function totalSupply() external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol deleted file mode 100644 index 5a8ac65..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/liquidity-mining/IVotingEscrow.sol +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IAuthorizerAdaptor.sol"; - -// For compatibility, we're keeping the same function names as in the original Curve code, including the mixed-case -// naming convention. -// solhint-disable func-name-mixedcase - -interface IVotingEscrow { - struct Point { - int128 bias; - int128 slope; // - dweight / dt - uint256 ts; - uint256 blk; // block - } - - function epoch() external view returns (uint256); - - function totalSupply(uint256 timestamp) external view returns (uint256); - - function user_point_epoch(address user) external view returns (uint256); - - function point_history(uint256 timestamp) external view returns (Point memory); - - function user_point_history(address user, uint256 timestamp) external view returns (Point memory); - - function checkpoint() external; - - function admin() external view returns (IAuthorizerAdaptor); - - function smart_wallet_checker() external view returns (address); - - function commit_smart_wallet_checker(address newSmartWalletChecker) external; - - function apply_smart_wallet_checker() external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/IERC4626.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/IERC4626.sol deleted file mode 100644 index 107bc0d..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/IERC4626.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @title IERC4626, to support the yield-bearing token standard. - * @notice Used for ERC4626-derived Linear Pools. - * @dev There is another version of this in /solidity-utils/misc, used in standalone-utils tests. - * This version has an additional `previewMint` function, and is used in tests of derived Linear Pools. - */ -interface IERC4626 { - /** - * @dev Mints `shares` Vault shares to `receiver` by depositing exactly `amount` of underlying tokens. - */ - function deposit(uint256 assets, address receiver) external returns (uint256 shares); - - /** - * @dev Burns exactly `shares` from `owner` and sends `assets` of underlying tokens to `receiver`. - */ - function redeem( - uint256 shares, - address receiver, - address owner - ) external returns (uint256 assets); - - /** - * @dev The address of the underlying token that the Vault uses for accounting, depositing, and withdrawing. - */ - function asset() external view returns (address); - - /** - * @dev Total amount of the underlying asset that is “managed” by Vault. - */ - function totalAssets() external view returns (uint256); - - /** - * @dev 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. - */ - function convertToAssets(uint256 shares) external view returns (uint256 assets); - - /** - * @dev 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. - */ - function convertToShares(uint256 assets) external view returns (uint256 shares); - - /** - * @dev 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. - */ - function previewMint(uint256 shares) external view returns (uint256 assets); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/ILinearPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/ILinearPool.sol deleted file mode 100644 index bc06538..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-linear/ILinearPool.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; -import "../vault/IBasePool.sol"; - -interface ILinearPool is IBasePool { - /** - * @dev Returns the Pool's main token. - */ - function getMainToken() external view returns (IERC20); - - /** - * @dev Returns the Pool's wrapped token. - */ - function getWrappedToken() external view returns (IERC20); - - /** - * @dev Returns the index of the Pool's BPT in the Pool tokens array (as returned by IVault.getPoolTokens). - */ - function getBptIndex() external view returns (uint256); - - /** - * @dev Returns the index of the Pool's main token in the Pool tokens array (as returned by IVault.getPoolTokens). - */ - function getMainIndex() external view returns (uint256); - - /** - * @dev Returns the index of the Pool's wrapped token in the Pool tokens array (as returned by - * IVault.getPoolTokens). - */ - function getWrappedIndex() external view returns (uint256); - - /** - * @dev Returns the Pool's targets for the main token balance. These values have had the main token's scaling - * factor applied to them. - */ - function getTargets() external view returns (uint256 lowerTarget, uint256 upperTarget); - - /** - * @notice Set the lower and upper bounds of the zero-fee trading range for the main token balance. - * @dev For a new target range to be valid: - * - the current balance must be between the current targets (meaning no fees are currently pending) - * - the current balance must be between the new targets (meaning setting them does not create pending fees) - * - * The first requirement could be relaxed, as the LPs actually benefit from the pending fees not being paid out, - * but being stricter makes analysis easier at little expense. - * - * This is a permissioned function, reserved for the pool owner. It will revert when called within a Vault context - * (i.e. in the middle of a join or an exit). - * - * Correct behavior depends on the token balances from the Vault, which may be out of sync with the state of - * the pool during execution of a Vault hook. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - */ - function setTargets(uint256 newLowerTarget, uint256 newUpperTarget) external; - - /** - * @notice Set the swap fee percentage. - * @dev This is a permissioned function, reserved for the pool owner. It will revert when called within a Vault - * context (i.e. in the middle of a join or an exit). - * - * Correct behavior depends on the token balances from the Vault, which may be out of sync with the state of - * the pool during execution of a Vault hook. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - */ - function setSwapFeePercentage(uint256 swapFeePercentage) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/IComposableStablePoolRates.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/IComposableStablePoolRates.sol deleted file mode 100644 index b1a5d30..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/IComposableStablePoolRates.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IComposableStablePoolRates { - /** - * @dev Forces a rate cache hit for a token. - * It will revert if the requested token does not have an associated rate provider. - */ - function updateTokenRateCache(IERC20 token) external; - - /** - * @dev Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. - * Note this function also updates the current cached value. - * @param duration Number of seconds until the current token rate is fetched again. - */ - function setTokenRateCacheDuration(IERC20 token, uint256 duration) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol deleted file mode 100644 index 3c66a1f..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -library StablePoolUserData { - enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT, ALL_TOKENS_IN_FOR_EXACT_BPT_OUT } - enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT, EXACT_BPT_IN_FOR_ALL_TOKENS_OUT } - - function joinKind(bytes memory self) internal pure returns (JoinKind) { - return abi.decode(self, (JoinKind)); - } - - function exitKind(bytes memory self) internal pure returns (ExitKind) { - return abi.decode(self, (ExitKind)); - } - - // Joins - - function initialAmountsIn(bytes memory self) internal pure returns (uint256[] memory amountsIn) { - (, amountsIn) = abi.decode(self, (JoinKind, uint256[])); - } - - function exactTokensInForBptOut(bytes memory self) - internal - pure - returns (uint256[] memory amountsIn, uint256 minBPTAmountOut) - { - (, amountsIn, minBPTAmountOut) = abi.decode(self, (JoinKind, uint256[], uint256)); - } - - function tokenInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut, uint256 tokenIndex) { - (, bptAmountOut, tokenIndex) = abi.decode(self, (JoinKind, uint256, uint256)); - } - - function allTokensInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut) { - (, bptAmountOut) = abi.decode(self, (JoinKind, uint256)); - } - - // Exits - - function exactBptInForTokenOut(bytes memory self) internal pure returns (uint256 bptAmountIn, uint256 tokenIndex) { - (, bptAmountIn, tokenIndex) = abi.decode(self, (ExitKind, uint256, uint256)); - } - - function exactBptInForTokensOut(bytes memory self) internal pure returns (uint256 bptAmountIn) { - (, bptAmountIn) = abi.decode(self, (ExitKind, uint256)); - } - - function bptInForExactTokensOut(bytes memory self) - internal - pure - returns (uint256[] memory amountsOut, uint256 maxBPTAmountIn) - { - (, amountsOut, maxBPTAmountIn) = abi.decode(self, (ExitKind, uint256[], uint256)); - } -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol deleted file mode 100644 index 0703ac8..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -library BasePoolUserData { - // Special ExitKind for all pools, used in Recovery Mode. Use the max 8-bit value to prevent conflicts - // with future additions to the ExitKind enums (or any front-end code that maps to existing values) - uint8 public constant RECOVERY_MODE_EXIT_KIND = 255; - - // Return true if this is the special exit kind. - function isRecoveryModeExitKind(bytes memory self) internal pure returns (bool) { - // Check for the "no data" case, or abi.decode would revert - return self.length > 0 && abi.decode(self, (uint8)) == RECOVERY_MODE_EXIT_KIND; - } - - // Parse the bptAmountIn out of the userData - function recoveryModeExit(bytes memory self) internal pure returns (uint256 bptAmountIn) { - (, bptAmountIn) = abi.decode(self, (uint8, uint256)); - } -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolController.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolController.sol deleted file mode 100644 index f752a82..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolController.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IBasePoolController { - function initialize(address poolAddress) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol deleted file mode 100644 index 694485f..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/helpers/IAuthentication.sol"; - -interface IBasePoolFactory is IAuthentication { - /** - * @dev Returns true if `pool` was created by this factory. - */ - function isPoolFromFactory(address pool) external view returns (bool); - - /** - * @dev Check whether the derived factory has been disabled. - */ - function isDisabled() external view returns (bool); - - /** - * @dev Disable the factory, preventing the creation of more pools. Already existing pools are unaffected. - * Once a factory is disabled, it cannot be re-enabled. - */ - function disable() external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol deleted file mode 100644 index a03d277..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IControlledPool { - function setSwapFeePercentage(uint256 swapFeePercentage) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IFactoryCreatedPoolVersion.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IFactoryCreatedPoolVersion.sol deleted file mode 100644 index 62e4b24..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IFactoryCreatedPoolVersion.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @notice Simple interface to retrieve the version of pools deployed by a pool factory. - */ -interface IFactoryCreatedPoolVersion { - /** - * @dev Returns a JSON representation of the deployed pool version containing name, version number and task ID. - * - * This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about - * each other. Note that this value will only be updated at factory creation time. - */ - function getPoolVersion() external view returns (string memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/ILastCreatedPoolFactory.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/ILastCreatedPoolFactory.sol deleted file mode 100644 index 2ac07ed..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/ILastCreatedPoolFactory.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IBasePoolFactory.sol"; - -interface ILastCreatedPoolFactory is IBasePoolFactory { - /** - * @dev Returns the address of the last Pool created by this factory. - * - * This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about - * each other. Note that this value will only be updated once construction of the last created Pool finishes. - */ - function getLastCreatedPool() external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IManagedPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IManagedPool.sol deleted file mode 100644 index 3094888..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IManagedPool.sol +++ /dev/null @@ -1,363 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; -import "../vault/IBasePool.sol"; - -interface IManagedPool is IBasePool { - event GradualSwapFeeUpdateScheduled( - uint256 startTime, - uint256 endTime, - uint256 startSwapFeePercentage, - uint256 endSwapFeePercentage - ); - event GradualWeightUpdateScheduled( - uint256 startTime, - uint256 endTime, - uint256[] startWeights, - uint256[] endWeights - ); - event SwapEnabledSet(bool swapEnabled); - event JoinExitEnabledSet(bool joinExitEnabled); - event MustAllowlistLPsSet(bool mustAllowlistLPs); - event AllowlistAddressAdded(address indexed member); - event AllowlistAddressRemoved(address indexed member); - event ManagementAumFeePercentageChanged(uint256 managementAumFeePercentage); - event ManagementAumFeeCollected(uint256 bptAmount); - event CircuitBreakerSet( - IERC20 indexed token, - uint256 bptPrice, - uint256 lowerBoundPercentage, - uint256 upperBoundPercentage - ); - event TokenAdded(IERC20 indexed token, uint256 normalizedWeight); - event TokenRemoved(IERC20 indexed token); - - /** - * @notice Returns the effective BPT supply. - * - * @dev The Pool owes debt to the Protocol and the Pool's owner in the form of unminted BPT, which will be minted - * immediately before the next join or exit. We need to take these into account since, even if they don't yet exist, - * they will effectively be included in any Pool operation that involves BPT. - * - * In the vast majority of cases, this function should be used instead of `totalSupply()`. - * - * WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation - * via reentrancy. See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * To call this function safely, attempt to trigger the reentrancy guard in the Vault by calling a non-reentrant - * function before calling `getActualSupply`. That will make the transaction revert in an unsafe context. - * (See `whenNotInVaultContext` in `ManagedPoolSettings`). - */ - function getActualSupply() external view returns (uint256); - - // Swap fee percentage - - /** - * @notice Schedule a gradual swap fee update. - * @dev The swap fee will change from the given starting value (which may or may not be the current - * value) to the given ending fee percentage, over startTime to endTime. - * - * Note that calling this with a starting swap fee different from the current value will immediately change the - * current swap fee to `startSwapFeePercentage`, before commencing the gradual change at `startTime`. - * Emits the GradualSwapFeeUpdateScheduled event. - * This is a permissioned function. - * - * @param startTime - The timestamp when the swap fee change will begin. - * @param endTime - The timestamp when the swap fee change will end (must be >= startTime). - * @param startSwapFeePercentage - The starting value for the swap fee change. - * @param endSwapFeePercentage - The ending value for the swap fee change. If the current timestamp >= endTime, - * `getSwapFeePercentage()` will return this value. - */ - function updateSwapFeeGradually( - uint256 startTime, - uint256 endTime, - uint256 startSwapFeePercentage, - uint256 endSwapFeePercentage - ) external; - - /** - * @notice Returns the current gradual swap fee update parameters. - * @dev The current swap fee can be retrieved via `getSwapFeePercentage()`. - * @return startTime - The timestamp when the swap fee update will begin. - * @return endTime - The timestamp when the swap fee update will end. - * @return startSwapFeePercentage - The starting swap fee percentage (could be different from the current value). - * @return endSwapFeePercentage - The final swap fee percentage, when the current timestamp >= endTime. - */ - function getGradualSwapFeeUpdateParams() - external - view - returns ( - uint256 startTime, - uint256 endTime, - uint256 startSwapFeePercentage, - uint256 endSwapFeePercentage - ); - - // Token weights - - /** - * @notice Schedule a gradual weight change. - * @dev The weights will change from their current values to the given endWeights, over startTime to endTime. - * This is a permissioned function. - * - * Since, unlike with swap fee updates, we generally do not want to allow instantaneous weight changes, - * the weights always start from their current values. This also guarantees a smooth transition when - * updateWeightsGradually is called during an ongoing weight change. - * @param startTime - The timestamp when the weight change will begin. - * @param endTime - The timestamp when the weight change will end (can be >= startTime). - * @param tokens - The tokens associated with the target weights (must match the current pool tokens). - * @param endWeights - The target weights. If the current timestamp >= endTime, `getNormalizedWeights()` - * will return these values. - */ - function updateWeightsGradually( - uint256 startTime, - uint256 endTime, - IERC20[] memory tokens, - uint256[] memory endWeights - ) external; - - /** - * @notice Returns all normalized weights, in the same order as the Pool's tokens. - */ - function getNormalizedWeights() external view returns (uint256[] memory); - - /** - * @notice Returns the current gradual weight change update parameters. - * @dev The current weights can be retrieved via `getNormalizedWeights()`. - * @return startTime - The timestamp when the weight update will begin. - * @return endTime - The timestamp when the weight update will end. - * @return startWeights - The starting weights, when the weight change was initiated. - * @return endWeights - The final weights, when the current timestamp >= endTime. - */ - function getGradualWeightUpdateParams() - external - view - returns ( - uint256 startTime, - uint256 endTime, - uint256[] memory startWeights, - uint256[] memory endWeights - ); - - // Join and Exit enable/disable - - /** - * @notice Enable or disable joins and exits. Note that this does not affect Recovery Mode exits. - * @dev Emits the JoinExitEnabledSet event. This is a permissioned function. - * @param joinExitEnabled - The new value of the join/exit enabled flag. - */ - function setJoinExitEnabled(bool joinExitEnabled) external; - - /** - * @notice Returns whether joins and exits are enabled. - */ - function getJoinExitEnabled() external view returns (bool); - - // Swap enable/disable - - /** - * @notice Enable or disable trading. - * @dev Emits the SwapEnabledSet event. This is a permissioned function. - * @param swapEnabled - The new value of the swap enabled flag. - */ - function setSwapEnabled(bool swapEnabled) external; - - /** - * @notice Returns whether swaps are enabled. - */ - function getSwapEnabled() external view returns (bool); - - // LP Allowlist - - /** - * @notice Enable or disable the LP allowlist. - * @dev Note that any addresses added to the allowlist will be retained if the allowlist is toggled off and - * back on again, because this action does not affect the list of LP addresses. - * Emits the MustAllowlistLPsSet event. This is a permissioned function. - * @param mustAllowlistLPs - The new value of the mustAllowlistLPs flag. - */ - function setMustAllowlistLPs(bool mustAllowlistLPs) external; - - /** - * @notice Adds an address to the LP allowlist. - * @dev Will fail if the address is already allowlisted. - * Emits the AllowlistAddressAdded event. This is a permissioned function. - * @param member - The address to be added to the allowlist. - */ - function addAllowedAddress(address member) external; - - /** - * @notice Removes an address from the LP allowlist. - * @dev Will fail if the address was not previously allowlisted. - * Emits the AllowlistAddressRemoved event. This is a permissioned function. - * @param member - The address to be removed from the allowlist. - */ - function removeAllowedAddress(address member) external; - - /** - * @notice Returns whether the allowlist for LPs is enabled. - */ - function getMustAllowlistLPs() external view returns (bool); - - /** - * @notice Check whether an LP address is on the allowlist. - * @dev This simply checks the list, regardless of whether the allowlist feature is enabled. - * @param member - The address to check against the allowlist. - * @return true if the given address is on the allowlist. - */ - function isAddressOnAllowlist(address member) external view returns (bool); - - // Management fees - - /** - * @notice Collect any accrued AUM fees and send them to the pool manager. - * @dev This can be called by anyone to collect accrued AUM fees - and will be called automatically - * whenever the supply changes (e.g., joins and exits, add and remove token), and before the fee - * percentage is changed by the manager, to prevent fees from being applied retroactively. - * - * Correct behavior depends on the current supply, which is potentially manipulable if the pool - * is reentered during execution of a Vault hook. This is protected where overridden in ManagedPoolSettings, - * and so is safe to call on ManagedPool. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * @return The amount of BPT minted to the manager. - */ - function collectAumManagementFees() external returns (uint256); - - /** - * @notice Setter for the yearly percentage AUM management fee, which is payable to the pool manager. - * @dev Attempting to collect AUM fees in excess of the maximum permitted percentage will revert. - * To avoid retroactive fee increases, we force collection at the current fee percentage before processing - * the update. Emits the ManagementAumFeePercentageChanged event. This is a permissioned function. - * - * To prevent changing management fees retroactively, this triggers payment of protocol fees before applying - * the change. Correct behavior depends on the current supply, which is potentially manipulable if the pool - * is reentered during execution of a Vault hook. This is protected where overridden in ManagedPoolSettings, - * and so is safe to call on ManagedPool. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * @param managementAumFeePercentage - The new management AUM fee percentage. - * @return amount - The amount of BPT minted to the manager before the update, if any. - */ - function setManagementAumFeePercentage(uint256 managementAumFeePercentage) external returns (uint256); - - /** - * @notice Returns the management AUM fee percentage as an 18-decimal fixed point number and the timestamp of the - * last collection of AUM fees. - */ - function getManagementAumFeeParams() - external - view - returns (uint256 aumFeePercentage, uint256 lastCollectionTimestamp); - - // Circuit Breakers - - /** - * @notice Set a circuit breaker for one or more tokens. - * @dev This is a permissioned function. The lower and upper bounds are percentages, corresponding to a - * relative change in the token's spot price: e.g., a lower bound of 0.8 means the breaker should prevent - * trades that result in the value of the token dropping 20% or more relative to the rest of the pool. - */ - function setCircuitBreakers( - IERC20[] memory tokens, - uint256[] memory bptPrices, - uint256[] memory lowerBoundPercentages, - uint256[] memory upperBoundPercentages - ) external; - - /** - * @notice Return the full circuit breaker state for the given token. - * @dev These are the reference values (BPT price and reference weight) passed in when the breaker was set, - * along with the percentage bounds. It also returns the current BPT price bounds, needed to check whether - * the circuit breaker should trip. - */ - function getCircuitBreakerState(IERC20 token) - external - view - returns ( - uint256 bptPrice, - uint256 referenceWeight, - uint256 lowerBound, - uint256 upperBound, - uint256 lowerBptPriceBound, - uint256 upperBptPriceBound - ); - - // Add/remove tokens - - /** - * @notice Adds a token to the Pool's list of tradeable tokens. This is a permissioned function. - * - * @dev By adding a token to the Pool's composition, the weights of all other tokens will be decreased. The new - * token will have no balance - it is up to the owner to provide some immediately after calling this function. - * Note however that regular join functions will not work while the new token has no balance: the only way to - * deposit an initial amount is by using an Asset Manager. - * - * Token addition is forbidden during a weight change, or if one is scheduled to happen in the future. - * - * The caller may additionally pass a non-zero `mintAmount` to have some BPT be minted for them, which might be - * useful in some scenarios to account for the fact that the Pool will have more tokens. - * - * Emits the TokenAdded event. This is a permissioned function. - * - * Correct behavior depends on the token balances from the Vault, which may be out of sync with the state of - * the pool during execution of a Vault hook. This is protected where overridden in ManagedPoolSettings, - * and so is safe to call on ManagedPool. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * @param tokenToAdd - The ERC20 token to be added to the Pool. - * @param assetManager - The Asset Manager for the token. - * @param tokenToAddNormalizedWeight - The normalized weight of `token` relative to the other tokens in the Pool. - * @param mintAmount - The amount of BPT to be minted as a result of adding `token` to the Pool. - * @param recipient - The address to receive the BPT minted by the Pool. - */ - function addToken( - IERC20 tokenToAdd, - address assetManager, - uint256 tokenToAddNormalizedWeight, - uint256 mintAmount, - address recipient - ) external; - - /** - * @notice Removes a token from the Pool's list of tradeable tokens. - * @dev Tokens can only be removed if the Pool has more than 2 tokens, as it can never have fewer than 2 (not - * including BPT). Token removal is also forbidden during a weight change, or if one is scheduled to happen in - * the future. - * - * Emits the TokenRemoved event. This is a permissioned function. - * Correct behavior depends on the token balances from the Vault, which may be out of sync with the state of - * the pool during execution of a Vault hook. This is protected where overridden in ManagedPoolSettings, - * and so is safe to call on ManagedPool. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * The caller may additionally pass a non-zero `burnAmount` to burn some of their BPT, which might be useful - * in some scenarios to account for the fact that the Pool now has fewer tokens. This is a permissioned function. - * @param tokenToRemove - The ERC20 token to be removed from the Pool. - * @param burnAmount - The amount of BPT to be burned after removing `token` from the Pool. - * @param sender - The address to burn BPT from. - */ - function removeToken( - IERC20 tokenToRemove, - uint256 burnAmount, - address sender - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol deleted file mode 100644 index 56d3e4c..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @notice Simple interface to retrieve the version of pools deployed by a pool factory. - */ -interface IPoolVersion { - /** - * @dev Returns a JSON representation of the deployed pool version containing name, version number and task ID. - * - * This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about - * each other. Note that this value will only be updated at factory creation time. - */ - function getPoolVersion() external view returns (string memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IProtocolFeeCache.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IProtocolFeeCache.sol deleted file mode 100644 index 887c840..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IProtocolFeeCache.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IProtocolFeeCache { - /** - * @notice Updates the cache to the latest value set by governance. - * @dev Can be called by anyone to update the cached fee percentages. - * - * Correct behavior depends on the token balances from the Vault, which may be out of sync with the state of - * the pool during execution of a Vault hook. This is protected by a call to `ensureNotInVaultContext` in - * VaultReentrancyLib where overridden in `ProtocolFeeCache`, and so is safe to call on ManagedPool. - * - * See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - */ - function updateProtocolFeePercentageCache() external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol deleted file mode 100644 index 86ba490..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IRateProvider { - /** - * @dev 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. - */ - function getRate() external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProviderPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProviderPool.sol deleted file mode 100644 index c2c6124..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRateProviderPool.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IRateProvider.sol"; - -/** - * @dev Interface for Pools that assign rate providers to their tokens. - */ -interface IRateProviderPool { - /** - * @dev Returns the rate provider for each of the Pool's tokens. A zero-address entry means there's no rate provider - * for that token. - */ - function getRateProviders() external view returns (IRateProvider[] memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol deleted file mode 100644 index 9590de2..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface for the RecoveryMode module. - */ -interface IRecoveryMode { - /** - * @dev Emitted when the Recovery Mode status changes. - */ - event RecoveryModeStateChanged(bool enabled); - - /** - * @notice Enables Recovery Mode in the Pool, disabling protocol fee collection and allowing for safe proportional - * exits with low computational complexity and no dependencies. - */ - function enableRecoveryMode() external; - - /** - * @notice Disables Recovery Mode in the Pool, restoring protocol fee collection and disallowing proportional exits. - */ - function disableRecoveryMode() external; - - /** - * @notice Returns true if the Pool is in Recovery Mode. - */ - function inRecoveryMode() external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryModeHelper.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryModeHelper.sol deleted file mode 100644 index b948f13..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryModeHelper.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../vault/IVault.sol"; - -/** - * Interface for an auxiliary contract that computes Recovery Mode exits, removing logic from the core Pool contract - * that would otherwise take up a lot of bytecode size at the cost of some slight gas overhead. Since Recovery Mode - * exits are expected to be highly infrequent (and ideally never occur), this tradeoff makes sense. - */ -interface IRecoveryModeHelper { - /** - * @notice Returns the Balancer Vault - */ - function getVault() external view returns (IVault); - - /** - * @dev Computes a Recovery Mode Exit BPT and token amounts for a Pool. Only 'cash' balances are considered, to - * avoid scenarios where the last LPs to attempt to exit the Pool cannot do it because only 'managed' balance - * remains. - * - * The Pool is assumed to be a Composable Pool that uses ComposablePoolLib, meaning BPT will be its first token. It - * is also assumed that there is no 'managed' balance for BPT. - - * WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation - * via reentrancy. See https://forum.balancer.fi/t/reentrancy-vulnerability-scope-expanded/4345 for reference. - * - * To call this function safely, attempt to trigger the reentrancy guard in the Vault by calling a non-reentrant - * function before calling `calcComposableRecoveryAmountsOut`. That will make the transaction revert in an unsafe - * context. - * - * (See `VaultReentrancyLib.ensureNotInVaultContext`). - */ - function calcComposableRecoveryAmountsOut( - bytes32 poolId, - bytes memory userData, - uint256 totalSupply - ) external view returns (uint256 bptAmountIn, uint256[] memory amountsOut); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol deleted file mode 100644 index 9079808..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @notice Simple interface to retrieve the version of a deployed contract. - */ -interface IVersion { - /** - * @dev Returns a JSON representation of the contract version containing name, version number and task ID. - */ - function version() external view returns (string memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/IExternalWeightedMath.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/IExternalWeightedMath.sol deleted file mode 100644 index f26b3ea..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/IExternalWeightedMath.sol +++ /dev/null @@ -1,203 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @notice Interface for ExternalWeightedMath, a contract-wrapper for Weighted Math, Joins and Exits. - */ -interface IExternalWeightedMath { - /** - * @dev See `WeightedMath._calculateInvariant`. - */ - function calculateInvariant(uint256[] memory normalizedWeights, uint256[] memory balances) - external - pure - returns (uint256); - - /** - * @dev See `WeightedMath._calcOutGivenIn`. - */ - function calcOutGivenIn( - uint256 balanceIn, - uint256 weightIn, - uint256 balanceOut, - uint256 weightOut, - uint256 amountIn - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcInGivenOut`. - */ - function calcInGivenOut( - uint256 balanceIn, - uint256 weightIn, - uint256 balanceOut, - uint256 weightOut, - uint256 amountOut - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcBptOutGivenExactTokensIn`. - */ - function calcBptOutGivenExactTokensIn( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256[] memory amountsIn, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcBptOutGivenExactTokenIn`. - */ - function calcBptOutGivenExactTokenIn( - uint256 balance, - uint256 normalizedWeight, - uint256 amountIn, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcTokenInGivenExactBptOut`. - */ - function calcTokenInGivenExactBptOut( - uint256 balance, - uint256 normalizedWeight, - uint256 bptAmountOut, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcAllTokensInGivenExactBptOut`. - */ - function calcAllTokensInGivenExactBptOut( - uint256[] memory balances, - uint256 bptAmountOut, - uint256 totalBPT - ) external pure returns (uint256[] memory); - - /** - * @dev See `WeightedMath._calcBptInGivenExactTokensOut`. - */ - function calcBptInGivenExactTokensOut( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256[] memory amountsOut, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcBptInGivenExactTokenOut`. - */ - function calcBptInGivenExactTokenOut( - uint256 balance, - uint256 normalizedWeight, - uint256 amountOut, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcTokenOutGivenExactBptIn`. - */ - function calcTokenOutGivenExactBptIn( - uint256 balance, - uint256 normalizedWeight, - uint256 bptAmountIn, - uint256 bptTotalSupply, - uint256 swapFeePercentage - ) external pure returns (uint256); - - /** - * @dev See `WeightedMath._calcTokensOutGivenExactBptIn`. - */ - function calcTokensOutGivenExactBptIn( - uint256[] memory balances, - uint256 bptAmountIn, - uint256 totalBPT - ) external pure returns (uint256[] memory); - - /** - * @dev See `WeightedMath._calcBptOutAddToken`. - */ - function calcBptOutAddToken(uint256 totalSupply, uint256 normalizedWeight) external pure returns (uint256); - - /** - * @dev See `WeightedJoinsLib.joinExactTokensInForBPTOut`. - */ - function joinExactTokensInForBPTOut( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256[] memory scalingFactors, - uint256 totalSupply, - uint256 swapFeePercentage, - bytes memory userData - ) external pure returns (uint256, uint256[] memory); - - /** - * @dev See `WeightedJoinsLib.joinTokenInForExactBPTOut`. - */ - function joinTokenInForExactBPTOut( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256 totalSupply, - uint256 swapFeePercentage, - bytes memory userData - ) external pure returns (uint256, uint256[] memory); - - /** - * @dev See `WeightedJoinsLib.joinAllTokensInForExactBPTOut`. - */ - function joinAllTokensInForExactBPTOut( - uint256[] memory balances, - uint256 totalSupply, - bytes memory userData - ) external pure returns (uint256 bptAmountOut, uint256[] memory amountsIn); - - /** - * @dev See `WeightedExitsLib.exitExactBPTInForTokenOut`. - */ - function exitExactBPTInForTokenOut( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256 totalSupply, - uint256 swapFeePercentage, - bytes memory userData - ) external pure returns (uint256, uint256[] memory); - - /** - * @dev See `WeightedExitsLib.exitExactBPTInForTokensOut`. - */ - function exitExactBPTInForTokensOut( - uint256[] memory balances, - uint256 totalSupply, - bytes memory userData - ) external pure returns (uint256 bptAmountIn, uint256[] memory amountsOut); - - /** - * @dev See `WeightedExitsLib.exitBPTInForExactTokensOut`. - */ - function exitBPTInForExactTokensOut( - uint256[] memory balances, - uint256[] memory normalizedWeights, - uint256[] memory scalingFactors, - uint256 totalSupply, - uint256 swapFeePercentage, - bytes memory userData - ) external pure returns (uint256, uint256[] memory); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/WeightedPoolUserData.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/WeightedPoolUserData.sol deleted file mode 100644 index e192e5a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/pool-weighted/WeightedPoolUserData.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -library WeightedPoolUserData { - // In order to preserve backwards compatibility, make sure new join and exit kinds are added at the end of the enum. - enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT, ALL_TOKENS_IN_FOR_EXACT_BPT_OUT } - enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, EXACT_BPT_IN_FOR_TOKENS_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT } - - function joinKind(bytes memory self) internal pure returns (JoinKind) { - return abi.decode(self, (JoinKind)); - } - - function exitKind(bytes memory self) internal pure returns (ExitKind) { - return abi.decode(self, (ExitKind)); - } - - // Joins - - function initialAmountsIn(bytes memory self) internal pure returns (uint256[] memory amountsIn) { - (, amountsIn) = abi.decode(self, (JoinKind, uint256[])); - } - - function exactTokensInForBptOut(bytes memory self) - internal - pure - returns (uint256[] memory amountsIn, uint256 minBPTAmountOut) - { - (, amountsIn, minBPTAmountOut) = abi.decode(self, (JoinKind, uint256[], uint256)); - } - - function tokenInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut, uint256 tokenIndex) { - (, bptAmountOut, tokenIndex) = abi.decode(self, (JoinKind, uint256, uint256)); - } - - function allTokensInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut) { - (, bptAmountOut) = abi.decode(self, (JoinKind, uint256)); - } - - // Exits - - function exactBptInForTokenOut(bytes memory self) internal pure returns (uint256 bptAmountIn, uint256 tokenIndex) { - (, bptAmountIn, tokenIndex) = abi.decode(self, (ExitKind, uint256, uint256)); - } - - function exactBptInForTokensOut(bytes memory self) internal pure returns (uint256 bptAmountIn) { - (, bptAmountIn) = abi.decode(self, (ExitKind, uint256)); - } - - function bptInForExactTokensOut(bytes memory self) - internal - pure - returns (uint256[] memory amountsOut, uint256 maxBPTAmountIn) - { - (, amountsOut, maxBPTAmountIn) = abi.decode(self, (ExitKind, uint256[], uint256)); - } -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol deleted file mode 100644 index f9bf4b6..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol +++ /dev/null @@ -1,293 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -// solhint-disable - -/** - * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are - * supported. - * Uses the default 'BAL' prefix for the error code - */ -function _require(bool condition, uint256 errorCode) pure { - if (!condition) _revert(errorCode); -} - -/** - * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are - * supported. - */ -function _require( - bool condition, - uint256 errorCode, - bytes3 prefix -) pure { - if (!condition) _revert(errorCode, prefix); -} - -/** - * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported. - * Uses the default 'BAL' prefix for the error code - */ -function _revert(uint256 errorCode) pure { - _revert(errorCode, 0x42414c); // This is the raw byte representation of "BAL" -} - -/** - * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported. - */ -function _revert(uint256 errorCode, bytes3 prefix) pure { - uint256 prefixUint = uint256(uint24(prefix)); - // We're going to dynamically create a revert string based on the error code, with the following format: - // 'BAL#{errorCode}' - // where the code is left-padded with zeroes to three digits (so they range from 000 to 999). - // - // We don't have revert strings embedded in the contract to save bytecode size: it takes much less space to store a - // number (8 to 16 bits) than the individual string characters. - // - // The dynamic string creation algorithm that follows could be implemented in Solidity, but assembly allows for a - // much denser implementation, again saving bytecode size. Given this function unconditionally reverts, this is a - // safe place to rely on it without worrying about how its usage might affect e.g. memory contents. - assembly { - // First, we need to compute the ASCII representation of the error code. We assume that it is in the 0-999 - // range, so we only need to convert three digits. To convert the digits to ASCII, we add 0x30, the value for - // the '0' character. - - let units := add(mod(errorCode, 10), 0x30) - - errorCode := div(errorCode, 10) - let tenths := add(mod(errorCode, 10), 0x30) - - errorCode := div(errorCode, 10) - let hundreds := add(mod(errorCode, 10), 0x30) - - // With the individual characters, we can now construct the full string. - // We first append the '#' character (0x23) to the prefix. In the case of 'BAL', it results in 0x42414c23 ('BAL#') - // Then, we shift this by 24 (to provide space for the 3 bytes of the error code), and add the - // characters to it, each shifted by a multiple of 8. - // The revert reason is then shifted left by 200 bits (256 minus the length of the string, 7 characters * 8 bits - // per character = 56) to locate it in the most significant part of the 256 slot (the beginning of a byte - // array). - let formattedPrefix := shl(24, add(0x23, shl(8, prefixUint))) - - let revertReason := shl(200, add(formattedPrefix, add(add(units, shl(8, tenths)), shl(16, hundreds)))) - - // We can now encode the reason in memory, which can be safely overwritten as we're about to revert. The encoded - // message will have the following layout: - // [ revert reason identifier ] [ string location offset ] [ string length ] [ string contents ] - - // The Solidity revert reason identifier is 0x08c739a0, the function selector of the Error(string) function. We - // also write zeroes to the next 28 bytes of memory, but those are about to be overwritten. - mstore(0x0, 0x08c379a000000000000000000000000000000000000000000000000000000000) - // Next is the offset to the location of the string, which will be placed immediately after (20 bytes away). - mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) - // The string length is fixed: 7 characters. - mstore(0x24, 7) - // Finally, the string itself is stored. - mstore(0x44, revertReason) - - // Even if the string is only 7 bytes long, we need to return a full 32 byte slot containing it. The length of - // the encoded message is therefore 4 + 32 + 32 + 32 = 100. - revert(0, 100) - } -} - -library Errors { - // Math - uint256 internal constant ADD_OVERFLOW = 0; - uint256 internal constant SUB_OVERFLOW = 1; - uint256 internal constant SUB_UNDERFLOW = 2; - uint256 internal constant MUL_OVERFLOW = 3; - uint256 internal constant ZERO_DIVISION = 4; - uint256 internal constant DIV_INTERNAL = 5; - uint256 internal constant X_OUT_OF_BOUNDS = 6; - uint256 internal constant Y_OUT_OF_BOUNDS = 7; - uint256 internal constant PRODUCT_OUT_OF_BOUNDS = 8; - uint256 internal constant INVALID_EXPONENT = 9; - - // Input - uint256 internal constant OUT_OF_BOUNDS = 100; - uint256 internal constant UNSORTED_ARRAY = 101; - uint256 internal constant UNSORTED_TOKENS = 102; - uint256 internal constant INPUT_LENGTH_MISMATCH = 103; - uint256 internal constant ZERO_TOKEN = 104; - uint256 internal constant INSUFFICIENT_DATA = 105; - - // Shared pools - uint256 internal constant MIN_TOKENS = 200; - uint256 internal constant MAX_TOKENS = 201; - uint256 internal constant MAX_SWAP_FEE_PERCENTAGE = 202; - uint256 internal constant MIN_SWAP_FEE_PERCENTAGE = 203; - uint256 internal constant MINIMUM_BPT = 204; - uint256 internal constant CALLER_NOT_VAULT = 205; - uint256 internal constant UNINITIALIZED = 206; - uint256 internal constant BPT_IN_MAX_AMOUNT = 207; - uint256 internal constant BPT_OUT_MIN_AMOUNT = 208; - uint256 internal constant EXPIRED_PERMIT = 209; - uint256 internal constant NOT_TWO_TOKENS = 210; - uint256 internal constant DISABLED = 211; - - // Pools - uint256 internal constant MIN_AMP = 300; - uint256 internal constant MAX_AMP = 301; - uint256 internal constant MIN_WEIGHT = 302; - uint256 internal constant MAX_STABLE_TOKENS = 303; - uint256 internal constant MAX_IN_RATIO = 304; - uint256 internal constant MAX_OUT_RATIO = 305; - uint256 internal constant MIN_BPT_IN_FOR_TOKEN_OUT = 306; - uint256 internal constant MAX_OUT_BPT_FOR_TOKEN_IN = 307; - uint256 internal constant NORMALIZED_WEIGHT_INVARIANT = 308; - uint256 internal constant INVALID_TOKEN = 309; - uint256 internal constant UNHANDLED_JOIN_KIND = 310; - uint256 internal constant ZERO_INVARIANT = 311; - uint256 internal constant ORACLE_INVALID_SECONDS_QUERY = 312; - uint256 internal constant ORACLE_NOT_INITIALIZED = 313; - uint256 internal constant ORACLE_QUERY_TOO_OLD = 314; - uint256 internal constant ORACLE_INVALID_INDEX = 315; - uint256 internal constant ORACLE_BAD_SECS = 316; - uint256 internal constant AMP_END_TIME_TOO_CLOSE = 317; - uint256 internal constant AMP_ONGOING_UPDATE = 318; - uint256 internal constant AMP_RATE_TOO_HIGH = 319; - uint256 internal constant AMP_NO_ONGOING_UPDATE = 320; - uint256 internal constant STABLE_INVARIANT_DIDNT_CONVERGE = 321; - uint256 internal constant STABLE_GET_BALANCE_DIDNT_CONVERGE = 322; - uint256 internal constant RELAYER_NOT_CONTRACT = 323; - uint256 internal constant BASE_POOL_RELAYER_NOT_CALLED = 324; - uint256 internal constant REBALANCING_RELAYER_REENTERED = 325; - uint256 internal constant GRADUAL_UPDATE_TIME_TRAVEL = 326; - uint256 internal constant SWAPS_DISABLED = 327; - uint256 internal constant CALLER_IS_NOT_LBP_OWNER = 328; - uint256 internal constant PRICE_RATE_OVERFLOW = 329; - uint256 internal constant INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED = 330; - uint256 internal constant WEIGHT_CHANGE_TOO_FAST = 331; - uint256 internal constant LOWER_GREATER_THAN_UPPER_TARGET = 332; - uint256 internal constant UPPER_TARGET_TOO_HIGH = 333; - uint256 internal constant UNHANDLED_BY_LINEAR_POOL = 334; - uint256 internal constant OUT_OF_TARGET_RANGE = 335; - uint256 internal constant UNHANDLED_EXIT_KIND = 336; - uint256 internal constant UNAUTHORIZED_EXIT = 337; - uint256 internal constant MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE = 338; - uint256 internal constant UNHANDLED_BY_MANAGED_POOL = 339; - uint256 internal constant UNHANDLED_BY_PHANTOM_POOL = 340; - uint256 internal constant TOKEN_DOES_NOT_HAVE_RATE_PROVIDER = 341; - uint256 internal constant INVALID_INITIALIZATION = 342; - uint256 internal constant OUT_OF_NEW_TARGET_RANGE = 343; - uint256 internal constant FEATURE_DISABLED = 344; - uint256 internal constant UNINITIALIZED_POOL_CONTROLLER = 345; - uint256 internal constant SET_SWAP_FEE_DURING_FEE_CHANGE = 346; - uint256 internal constant SET_SWAP_FEE_PENDING_FEE_CHANGE = 347; - uint256 internal constant CHANGE_TOKENS_DURING_WEIGHT_CHANGE = 348; - uint256 internal constant CHANGE_TOKENS_PENDING_WEIGHT_CHANGE = 349; - uint256 internal constant MAX_WEIGHT = 350; - uint256 internal constant UNAUTHORIZED_JOIN = 351; - uint256 internal constant MAX_MANAGEMENT_AUM_FEE_PERCENTAGE = 352; - uint256 internal constant FRACTIONAL_TARGET = 353; - uint256 internal constant ADD_OR_REMOVE_BPT = 354; - uint256 internal constant INVALID_CIRCUIT_BREAKER_BOUNDS = 355; - uint256 internal constant CIRCUIT_BREAKER_TRIPPED = 356; - uint256 internal constant MALICIOUS_QUERY_REVERT = 357; - uint256 internal constant JOINS_EXITS_DISABLED = 358; - - // Lib - uint256 internal constant REENTRANCY = 400; - uint256 internal constant SENDER_NOT_ALLOWED = 401; - uint256 internal constant PAUSED = 402; - uint256 internal constant PAUSE_WINDOW_EXPIRED = 403; - uint256 internal constant MAX_PAUSE_WINDOW_DURATION = 404; - uint256 internal constant MAX_BUFFER_PERIOD_DURATION = 405; - uint256 internal constant INSUFFICIENT_BALANCE = 406; - uint256 internal constant INSUFFICIENT_ALLOWANCE = 407; - uint256 internal constant ERC20_TRANSFER_FROM_ZERO_ADDRESS = 408; - uint256 internal constant ERC20_TRANSFER_TO_ZERO_ADDRESS = 409; - uint256 internal constant ERC20_MINT_TO_ZERO_ADDRESS = 410; - uint256 internal constant ERC20_BURN_FROM_ZERO_ADDRESS = 411; - uint256 internal constant ERC20_APPROVE_FROM_ZERO_ADDRESS = 412; - uint256 internal constant ERC20_APPROVE_TO_ZERO_ADDRESS = 413; - uint256 internal constant ERC20_TRANSFER_EXCEEDS_ALLOWANCE = 414; - uint256 internal constant ERC20_DECREASED_ALLOWANCE_BELOW_ZERO = 415; - uint256 internal constant ERC20_TRANSFER_EXCEEDS_BALANCE = 416; - uint256 internal constant ERC20_BURN_EXCEEDS_ALLOWANCE = 417; - uint256 internal constant SAFE_ERC20_CALL_FAILED = 418; - uint256 internal constant ADDRESS_INSUFFICIENT_BALANCE = 419; - uint256 internal constant ADDRESS_CANNOT_SEND_VALUE = 420; - uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_INT256 = 421; - uint256 internal constant GRANT_SENDER_NOT_ADMIN = 422; - uint256 internal constant REVOKE_SENDER_NOT_ADMIN = 423; - uint256 internal constant RENOUNCE_SENDER_NOT_ALLOWED = 424; - uint256 internal constant BUFFER_PERIOD_EXPIRED = 425; - uint256 internal constant CALLER_IS_NOT_OWNER = 426; - uint256 internal constant NEW_OWNER_IS_ZERO = 427; - uint256 internal constant CODE_DEPLOYMENT_FAILED = 428; - uint256 internal constant CALL_TO_NON_CONTRACT = 429; - uint256 internal constant LOW_LEVEL_CALL_FAILED = 430; - uint256 internal constant NOT_PAUSED = 431; - uint256 internal constant ADDRESS_ALREADY_ALLOWLISTED = 432; - uint256 internal constant ADDRESS_NOT_ALLOWLISTED = 433; - uint256 internal constant ERC20_BURN_EXCEEDS_BALANCE = 434; - uint256 internal constant INVALID_OPERATION = 435; - uint256 internal constant CODEC_OVERFLOW = 436; - uint256 internal constant IN_RECOVERY_MODE = 437; - uint256 internal constant NOT_IN_RECOVERY_MODE = 438; - uint256 internal constant INDUCED_FAILURE = 439; - uint256 internal constant EXPIRED_SIGNATURE = 440; - uint256 internal constant MALFORMED_SIGNATURE = 441; - uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_UINT64 = 442; - uint256 internal constant UNHANDLED_FEE_TYPE = 443; - uint256 internal constant BURN_FROM_ZERO = 444; - - // Vault - uint256 internal constant INVALID_POOL_ID = 500; - uint256 internal constant CALLER_NOT_POOL = 501; - uint256 internal constant SENDER_NOT_ASSET_MANAGER = 502; - uint256 internal constant USER_DOESNT_ALLOW_RELAYER = 503; - uint256 internal constant INVALID_SIGNATURE = 504; - uint256 internal constant EXIT_BELOW_MIN = 505; - uint256 internal constant JOIN_ABOVE_MAX = 506; - uint256 internal constant SWAP_LIMIT = 507; - uint256 internal constant SWAP_DEADLINE = 508; - uint256 internal constant CANNOT_SWAP_SAME_TOKEN = 509; - uint256 internal constant UNKNOWN_AMOUNT_IN_FIRST_SWAP = 510; - uint256 internal constant MALCONSTRUCTED_MULTIHOP_SWAP = 511; - uint256 internal constant INTERNAL_BALANCE_OVERFLOW = 512; - uint256 internal constant INSUFFICIENT_INTERNAL_BALANCE = 513; - uint256 internal constant INVALID_ETH_INTERNAL_BALANCE = 514; - uint256 internal constant INVALID_POST_LOAN_BALANCE = 515; - uint256 internal constant INSUFFICIENT_ETH = 516; - uint256 internal constant UNALLOCATED_ETH = 517; - uint256 internal constant ETH_TRANSFER = 518; - uint256 internal constant CANNOT_USE_ETH_SENTINEL = 519; - uint256 internal constant TOKENS_MISMATCH = 520; - uint256 internal constant TOKEN_NOT_REGISTERED = 521; - uint256 internal constant TOKEN_ALREADY_REGISTERED = 522; - uint256 internal constant TOKENS_ALREADY_SET = 523; - uint256 internal constant TOKENS_LENGTH_MUST_BE_2 = 524; - uint256 internal constant NONZERO_TOKEN_BALANCE = 525; - uint256 internal constant BALANCE_TOTAL_OVERFLOW = 526; - uint256 internal constant POOL_NO_TOKENS = 527; - uint256 internal constant INSUFFICIENT_FLASH_LOAN_BALANCE = 528; - - // Fees - uint256 internal constant SWAP_FEE_PERCENTAGE_TOO_HIGH = 600; - uint256 internal constant FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH = 601; - uint256 internal constant INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT = 602; - uint256 internal constant AUM_FEE_PERCENTAGE_TOO_HIGH = 603; - - // FeeSplitter - uint256 internal constant SPLITTER_FEE_PERCENTAGE_TOO_HIGH = 700; - - // Misc - uint256 internal constant UNIMPLEMENTED = 998; - uint256 internal constant SHOULD_NOT_HAPPEN = 999; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol deleted file mode 100644 index 35ed541..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IAuthentication { - /** - * @dev Returns the action identifier associated with the external function described by `selector`. - */ - function getActionId(bytes4 selector) external view returns (bytes32); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IOptionalOnlyCaller.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IOptionalOnlyCaller.sol deleted file mode 100644 index adbbcc3..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IOptionalOnlyCaller.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface for the OptionalOnlyCaller helper, used to opt in to a caller - * verification for a given address to methods that are otherwise callable by any address. - */ -interface IOptionalOnlyCaller { - /** - * @dev Emitted every time setOnlyCallerCheck is called. - */ - event OnlyCallerOptIn(address user, bool enabled); - - /** - * @dev Enables / disables verification mechanism for caller. - * @param enabled - True if caller verification shall be enabled, false otherwise. - */ - function setOnlyCallerCheck(bool enabled) external; - - function setOnlyCallerCheckWithSignature( - address user, - bool enabled, - bytes memory signature - ) external; - - /** - * @dev Returns true if caller verification is enabled for the given user, false otherwise. - */ - function isOnlyCallerEnabled(address user) external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol deleted file mode 100644 index cd89f24..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface for the SignatureValidator helper, used to support meta-transactions. - */ -interface ISignaturesValidator { - /** - * @dev Returns the EIP712 domain separator. - */ - function getDomainSeparator() external view returns (bytes32); - - /** - * @dev Returns the next nonce used by an address to sign messages. - */ - function getNextNonce(address user) external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol deleted file mode 100644 index 9895f71..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface for the TemporarilyPausable helper. - */ -interface ITemporarilyPausable { - /** - * @dev Emitted every time the pause state changes by `_setPaused`. - */ - event PausedStateChanged(bool paused); - - /** - * @dev Returns the current paused state. - */ - function getPausedState() - external - view - returns ( - bool paused, - uint256 pauseWindowEndTime, - uint256 bufferPeriodEndTime - ); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IERC4626.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IERC4626.sol deleted file mode 100644 index 2f52637..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IERC4626.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../openzeppelin/IERC20.sol"; - -interface IERC4626 is IERC20 { - /** - * @dev `caller` has exchanged `assets` for `shares`, and transferred those `shares` to `owner`. - */ - event Deposit(address indexed caller, address indexed owner, uint256 assets, uint256 shares); - - /** - * @dev `caller` has exchanged `shares`, owned by `owner`, for `assets`, - * and transferred those `assets` to `receiver`. - */ - event Withdraw( - address indexed caller, - address indexed receiver, - address indexed owner, - uint256 assets, - uint256 shares - ); - - /** - * @dev Mints `shares` Vault shares to `receiver` by depositing exactly `amount` of underlying tokens. - */ - function deposit(uint256 assets, address receiver) external returns (uint256 shares); - - /** - * @dev Burns exactly `shares` from `owner` and sends `assets` of underlying tokens to `receiver`. - */ - function redeem( - uint256 shares, - address receiver, - address owner - ) external returns (uint256 assets); - - /** - * @dev The address of the underlying token that the Vault uses for accounting, depositing, and withdrawing. - */ - function asset() external view returns (address); - - /** - * @dev Total amount of the underlying asset that is “managed” by Vault. - */ - function totalAssets() external view returns (uint256); - - /** - * @dev 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. - */ - function convertToAssets(uint256 shares) external view returns (uint256 assets); - - /** - * @dev 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. - */ - function convertToShares(uint256 assets) external view returns (uint256 shares); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol deleted file mode 100644 index c9a519a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../openzeppelin/IERC20.sol"; - -/** - * @dev Interface for WETH9. - * See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol - */ -interface IWETH is IERC20 { - function deposit() external payable; - - function withdraw(uint256 amount) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC1271.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC1271.sol deleted file mode 100644 index bc56e73..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC1271.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol) - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface of the ERC1271 standard signature validation method for - * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]. - * - * _Available since v4.1._ - */ -interface IERC1271 { - /** - * @dev Should return whether the signature provided is valid for the provided data - * @param hash Hash of the data to be signed - * @param signature Signature byte array associated with _data - */ - function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol deleted file mode 100644 index 7cd1c14..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface of the ERC20 standard as defined in the EIP. - */ -interface IERC20 { - /** - * @dev Returns the amount of tokens in existence. - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Returns the amount of tokens owned by `account`. - */ - function balanceOf(address account) external view returns (uint256); - - /** - * @dev Moves `amount` tokens from the caller's account to `recipient`. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transfer(address recipient, uint256 amount) external returns (bool); - - /** - * @dev 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. - */ - function allowance(address owner, address spender) external view returns (uint256); - - /** - * @dev Sets `amount` 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. - */ - function approve(address spender, uint256 amount) external returns (bool); - - /** - * @dev Moves `amount` tokens from `sender` to `recipient` using the - * allowance mechanism. `amount` is then deducted from the caller's - * allowance. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transferFrom( - address sender, - address recipient, - uint256 amount - ) external returns (bool); - - /** - * @dev Emitted when `value` tokens are moved from one account (`from`) to - * another (`to`). - * - * Note that `value` may be zero. - */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /** - * @dev Emitted when the allowance of a `spender` for an `owner` is set by - * a call to {approve}. `value` is the new allowance. - */ - event Approval(address indexed owner, address indexed spender, uint256 value); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol deleted file mode 100644 index 0259cbb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in - * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. - * - * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by - * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't - * need to send a transaction, and thus is not required to hold Ether at all. - */ -interface IERC20Permit { - /** - * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens, - * given `owner`'s signed approval. - * - * IMPORTANT: The same issues {IERC20-approve} has related to transaction - * ordering also apply here. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `deadline` must be a timestamp in the future. - * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` - * over the EIP712-formatted function arguments. - * - the signature must use ``owner``'s current nonce (see {nonces}). - * - * For more information on the signature format, see the - * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP - * section]. - */ - function permit( - address owner, - address spender, - uint256 value, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external; - - /** - * @dev Returns the current nonce for `owner`. This value must be - * included whenever a signature is generated for {permit}. - * - * Every successful call to {permit} increases ``owner``'s nonce by one. This - * prevents a signature from being used multiple times. - */ - function nonces(address owner) external view returns (uint256); - - /** - * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}. - */ - // solhint-disable-next-line func-name-mixedcase - function DOMAIN_SEPARATOR() external view returns (bytes32); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20PermitDAI.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20PermitDAI.sol deleted file mode 100644 index e69d98b..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20PermitDAI.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -interface IERC20PermitDAI { - /** - * @notice update allowance with a signed permit - * @param holder Token owner's address (Authorizer) - * @param spender Spender's address - * @param nonce The permit nonce - * @param expiry The time at which this expires (unix time) - * @param allowed Whether the spender is allowed or disallowed from spending - * @param v v of the signature - * @param r r of the signature - * @param s s of the signature - */ - function permit( - address holder, - address spender, - uint256 nonce, - uint256 expiry, - bool allowed, - uint8 v, - bytes32 r, - bytes32 s - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/LICENSE b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/LICENSE deleted file mode 100644 index ade2b70..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-2020 zOS Global Limited - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/README.md b/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/README.md deleted file mode 100644 index 98659b1..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/README.md +++ /dev/null @@ -1,11 +0,0 @@ -## Ports from OpenZeppelin Contracts - -Files in this directory are based on the [OpenZeppelin Contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) library, and as such are licensed under the MIT License: see [LICENSE](./LICENSE). - -Most of the modifications fall under one of these categories: - -- removal of functions unused in Balancer V2 source code -- replacement of `require` statements with the `_require` function from the `BalancerErrors.sol` contract -- modification or addition of functionality to reduce bytecode size (see `ReentrancyGuard.sol`) or gas usage (see `EnumerableSet`, `EnumerableMap` or `SafeERC20`) - -Non-trivial modifications in this last category have associated source code comments that explain the changes and motivation. diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IAToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IAToken.sol deleted file mode 100644 index 6b2ca63..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IAToken.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IAToken { - /** - * @dev returns the address of the aToken's underlying asset - */ - // solhint-disable-next-line func-name-mixedcase - function UNDERLYING_ASSET_ADDRESS() external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol deleted file mode 100644 index a73613c..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolder.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/helpers/IAuthentication.sol"; -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IBALTokenHolder is IAuthentication { - function getName() external view returns (string memory); - - function withdrawFunds(address recipient, uint256 amount) external; - - function sweepTokens( - IERC20 token, - address recipient, - uint256 amount - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolderFactory.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolderFactory.sol deleted file mode 100644 index 0836b96..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBALTokenHolderFactory.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../vault/IVault.sol"; -import "../liquidity-mining/IBalancerToken.sol"; - -import "./IBALTokenHolder.sol"; - -interface IBALTokenHolderFactory { - function getBalancerToken() external view returns (IBalancerToken); - - function getVault() external view returns (IVault); - - function isHolderFromFactory(address holder) external view returns (bool); - - function create(string memory name) external returns (IBALTokenHolder); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerQueries.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerQueries.sol deleted file mode 100644 index 435f0ea..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerQueries.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../vault/IVault.sol"; - -/** - * @dev Provides a way to perform queries on swaps, joins and exits, simulating these operations and returning the exact - * result they would have if called on the Vault given the current state. Note that the results will be affected by - * other transactions interacting with the Pools involved. - * - * All query functions can be called both on-chain and off-chain. - * - * If calling them from a contract, note that all query functions are not `view`. Despite this, these functions produce - * no net state change, and for all intents and purposes can be thought of as if they were indeed `view`. However, - * calling them via STATICCALL will fail. - * - * If calling them from an off-chain client, make sure to use eth_call: most clients default to eth_sendTransaction for - * non-view functions. - * - * In all cases, the `fromInternalBalance` and `toInternalBalance` fields are entirely ignored: we just use the same - * structs for simplicity. - */ -interface IBalancerQueries { - function querySwap(IVault.SingleSwap memory singleSwap, IVault.FundManagement memory funds) - external - returns (uint256); - - function queryBatchSwap( - IVault.SwapKind kind, - IVault.BatchSwapStep[] memory swaps, - IAsset[] memory assets, - IVault.FundManagement memory funds - ) external returns (int256[] memory assetDeltas); - - function queryJoin( - bytes32 poolId, - address sender, - address recipient, - IVault.JoinPoolRequest memory request - ) external returns (uint256 bptOut, uint256[] memory amountsIn); - - function queryExit( - bytes32 poolId, - address sender, - address recipient, - IVault.ExitPoolRequest memory request - ) external returns (uint256 bptIn, uint256[] memory amountsOut); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerRelayer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerRelayer.sol deleted file mode 100644 index 57b93fc..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IBalancerRelayer.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../vault/IVault.sol"; - -/** - * @title IBalancerRelayer - * @notice Allows safe multicall execution of a relayer's functions - */ -interface IBalancerRelayer { - function getLibrary() external view returns (address); - - function getVault() external view returns (IVault); - - function multicall(bytes[] calldata data) external payable returns (bytes[] memory results); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IButtonWrapper.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IButtonWrapper.sol deleted file mode 100644 index b4473e8..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IButtonWrapper.sol +++ /dev/null @@ -1,120 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -// Source: https://github.com/buttonwood-protocol/button-wrappers/blob/main/contracts/interfaces/IButtonWrapper.sol -// Interface definition for ButtonWrapper contract, which wraps an -// underlying ERC20 token into a new ERC20 with different characteristics. -// NOTE: "uAmount" => underlying token (wrapped) amount and -// "amount" => wrapper token amount -interface IButtonWrapper { - //-------------------------------------------------------------------------- - // ButtonWrapper write methods - - /// @notice Transfers underlying tokens from {msg.sender} to the contract and - /// mints wrapper tokens. - /// @param amount The amount of wrapper tokens to mint. - /// @return The amount of underlying tokens deposited. - function mint(uint256 amount) external returns (uint256); - - /// @notice Transfers underlying tokens from {msg.sender} to the contract and - /// mints wrapper tokens to the specified beneficiary. - /// @param to The beneficiary account. - /// @param amount The amount of wrapper tokens to mint. - /// @return The amount of underlying tokens deposited. - function mintFor(address to, uint256 amount) external returns (uint256); - - /// @notice Burns wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @param amount The amount of wrapper tokens to burn. - /// @return The amount of underlying tokens withdrawn. - function burn(uint256 amount) external returns (uint256); - - /// @notice Burns wrapper tokens from {msg.sender} and transfers - /// the underlying tokens to the specified beneficiary. - /// @param to The beneficiary account. - /// @param amount The amount of wrapper tokens to burn. - /// @return The amount of underlying tokens withdrawn. - function burnTo(address to, uint256 amount) external returns (uint256); - - /// @notice Burns all wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @return The amount of underlying tokens withdrawn. - function burnAll() external returns (uint256); - - /// @notice Burns all wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @param to The beneficiary account. - /// @return The amount of underlying tokens withdrawn. - function burnAllTo(address to) external returns (uint256); - - /// @notice Transfers underlying tokens from {msg.sender} to the contract and - /// mints wrapper tokens to the specified beneficiary. - /// @param uAmount The amount of underlying tokens to deposit. - /// @return The amount of wrapper tokens mint. - function deposit(uint256 uAmount) external returns (uint256); - - /// @notice Transfers underlying tokens from {msg.sender} to the contract and - /// mints wrapper tokens to the specified beneficiary. - /// @param to The beneficiary account. - /// @param uAmount The amount of underlying tokens to deposit. - /// @return The amount of wrapper tokens mint. - function depositFor(address to, uint256 uAmount) external returns (uint256); - - /// @notice Burns wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @param uAmount The amount of underlying tokens to withdraw. - /// @return The amount of wrapper tokens burnt. - function withdraw(uint256 uAmount) external returns (uint256); - - /// @notice Burns wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back to the specified beneficiary. - /// @param to The beneficiary account. - /// @param uAmount The amount of underlying tokens to withdraw. - /// @return The amount of wrapper tokens burnt. - function withdrawTo(address to, uint256 uAmount) external returns (uint256); - - /// @notice Burns all wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @return The amount of wrapper tokens burnt. - function withdrawAll() external returns (uint256); - - /// @notice Burns all wrapper tokens from {msg.sender} and transfers - /// the underlying tokens back. - /// @param to The beneficiary account. - /// @return The amount of wrapper tokens burnt. - function withdrawAllTo(address to) external returns (uint256); - - //-------------------------------------------------------------------------- - // ButtonWrapper view methods - - /// @return The address of the underlying token. - function underlying() external view returns (address); - - /// @return The total underlying tokens held by the wrapper contract. - function totalUnderlying() external view returns (uint256); - - /// @param who The account address. - /// @return The underlying token balance of the account. - function balanceOfUnderlying(address who) external view returns (uint256); - - /// @param uAmount The amount of underlying tokens. - /// @return The amount of wrapper tokens exchangeable. - function underlyingToWrapper(uint256 uAmount) external view returns (uint256); - - /// @param amount The amount of wrapper tokens. - /// @return The amount of underlying tokens exchangeable. - function wrapperToUnderlying(uint256 amount) external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ICToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ICToken.sol deleted file mode 100644 index 0473a01..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ICToken.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity ^0.7.0; - -// Interface for MidasCapital. An open interest protocol based on -// modified Fuse contracts. Anyone can create an deploy isolated -// lending and borrowing pools with custom parameters. - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface ICToken is IERC20 { - // Error codes referenced in this file can be found here: - // https://github.com/compound-finance/compound-protocol/blob/a3214f67b73310d547e00fc578e8355911c9d376/contracts/ErrorReporter.sol - // solhint-disable-previous-line max-line-length - - /** - * @dev Underlying asset for this CToken - */ - function underlying() external view returns (address); - - /** - * @notice Sender supplies assets into the market and receives cTokens in exchange - * @dev Accrues interest whether or not the operation succeeds, unless reverted - * @param mintAmount The amount of the underlying asset to supply - * @return uint 0=success, otherwise an error code (see ErrorReporter.sol link above for details) - */ - function mint(uint256 mintAmount) external returns (uint256); - - /** - * @notice Sender redeems cTokens in exchange for the underlying asset - * @dev Accrues interest whether or not the operation succeeds, unless reverted - * @param redeemTokens The number of cTokens to redeem into underlying - * @return uint 0=success, otherwise an error code (see ErrorReporter.sol link above for details) - */ - function redeem(uint256 redeemTokens) external returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IEulerToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IEulerToken.sol deleted file mode 100644 index 2cf453e..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IEulerToken.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity ^0.7.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IEulerToken is IERC20 { - /** - * @dev Convert an eToken balance to an underlying amount, taking into account current exchange rate - * @param balance eToken balance, in internal book-keeping units (18 decimals) - * @return Amount in underlying units, (same decimals as underlying token) - */ - // https://github.com/euler-xyz/euler-contracts/blob/b1ee3265853628d5a529081d7908c38404201b4e/contracts/modules/EToken.sol#L104 - // solhint-disable-previous-line max-line-length - function convertBalanceToUnderlying(uint256 balance) external view returns (uint256); - - /** - * @dev Convert an underlying amount to an eToken balance, taking into account current exchange rate - * @param underlyingAmount Amount in underlying units (same decimals as underlying token) - * @return eToken balance, in internal book-keeping units (18 decimals) - */ - // https://github.com/euler-xyz/euler-contracts/blob/b1ee3265853628d5a529081d7908c38404201b4e/contracts/modules/EToken.sol#L114 - // solhint-disable-previous-line max-line-length - function convertUnderlyingToBalance(uint256 underlyingAmount) external view returns (uint256); - - /** - * @dev Transfer underlying tokens from sender to the Euler pool, and increase account's eTokens - */ - function deposit(uint256 subAccountId, uint256 amount) external; - - /** - * @dev Transfer underlying tokens from Euler pool to sender, and decrease account's eTokens - */ - function withdraw(uint256 subAccountId, uint256 amount) external; - - /** - * @dev Address of underlying asset - */ - function underlyingAsset() external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IGearboxDieselToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IGearboxDieselToken.sol deleted file mode 100644 index 04241de..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IGearboxDieselToken.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IGearboxDieselToken is IERC20 { - /** - * @dev returns the address of the vault - */ - function owner() external view returns (address); -} - -interface IGearboxVault { - /** - * @dev returns the address of the underlying asset - */ - function underlyingToken() external view returns (address); - - /** - * @dev returns a 27 decimal fixed point 'ray' value so a rate of 1 is represented as 1e27 - */ - // solhint-disable-next-line func-name-mixedcase - function getDieselRate_RAY() external view returns (uint256); - - /** - * @dev converts diesel token amount to main token amount - */ - function fromDiesel(uint256) external view returns (uint256); - - /** - * @dev converts main token amount to diesel token amount - */ - function toDiesel(uint256) external view returns (uint256); - - /** - * @dev Adds liquidity to pool and sends diesel (LP) tokens back to the liquidity provider - * The Referral code can be 0 - */ - function addLiquidity( - uint256 underlyingAmount, - address onBehalfOf, - uint256 referralCode - ) external; - - /** - * @dev Removes liquidity from the pool and sends the underlying tokens to the `to` address - */ - function removeLiquidity(uint256 dieselAmount, address to) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol deleted file mode 100644 index d368079..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -/** - * @dev Source of truth for all Protocol Fee percentages, that is, how much the protocol charges certain actions. Some - * of these values may also be retrievable from other places (such as the swap fee percentage), but this is the - * preferred source nonetheless. - */ -interface IProtocolFeePercentagesProvider { - // All fee percentages are 18-decimal fixed point numbers, so e.g. 1e18 = 100% and 1e16 = 1%. - - // Emitted when a new fee type is registered. - event ProtocolFeeTypeRegistered(uint256 indexed feeType, string name, uint256 maximumPercentage); - - // Emitted when the value of a fee type changes. - // IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the - // ProtocolFeesCollector, which will result in this event not being emitted despite their value changing. Such usage - // of the ProtocolFeesCollector is however discouraged: all state-changing interactions with it should originate in - // this contract. - event ProtocolFeePercentageChanged(uint256 indexed feeType, uint256 percentage); - - /** - * @dev Registers a new fee type in the system, making it queryable via `getFeeTypePercentage` and `getFeeTypeName`, - * as well as configurable via `setFeeTypePercentage`. - * - * `feeType` can be any arbitrary value (that is not in use). - * - * It is not possible to de-register fee types, nor change their name or maximum value. - */ - function registerFeeType( - uint256 feeType, - string memory name, - uint256 maximumValue, - uint256 initialValue - ) external; - - /** - * @dev Returns true if `feeType` has been registered and can be queried. - */ - function isValidFeeType(uint256 feeType) external view returns (bool); - - /** - * @dev Returns true if `value` is a valid percentage value for `feeType`. - */ - function isValidFeeTypePercentage(uint256 feeType, uint256 value) external view returns (bool); - - /** - * @dev Sets the percentage value for `feeType` to `newValue`. - * - * IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the - * ProtocolFeesCollector, without invoking this function. This will result in the `ProtocolFeePercentageChanged` - * event not being emitted despite their value changing. Such usage of the ProtocolFeesCollector is however - * discouraged: only this contract should be granted permission to call `setSwapFeePercentage` and - * `setFlashLoanFeePercentage`. - */ - function setFeeTypePercentage(uint256 feeType, uint256 newValue) external; - - /** - * @dev Returns the current percentage value for `feeType`. This is the preferred mechanism for querying these - - * whenever possible, use this fucntion instead of e.g. querying the ProtocolFeesCollector. - */ - function getFeeTypePercentage(uint256 feeType) external view returns (uint256); - - /** - * @dev Returns `feeType`'s maximum value. - */ - function getFeeTypeMaximumPercentage(uint256 feeType) external view returns (uint256); - - /** - * @dev Returns `feeType`'s name. - */ - function getFeeTypeName(uint256 feeType) external view returns (string memory); -} - -library ProtocolFeeType { - // This list is not exhaustive - more fee types can be added to the system. It is expected for this list to be - // extended with new fee types as they are registered, to keep them all in one place and reduce - // likelihood of user error. - - // solhint-disable private-vars-leading-underscore - uint256 internal constant SWAP = 0; - uint256 internal constant FLASH_LOAN = 1; - uint256 internal constant YIELD = 2; - uint256 internal constant AUM = 3; - // solhint-enable private-vars-leading-underscore -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeeSplitter.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeeSplitter.sol deleted file mode 100644 index 934d262..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeeSplitter.sol +++ /dev/null @@ -1,136 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../vault/IVault.sol"; -import "./IProtocolFeesWithdrawer.sol"; - -/** - * @title ProtocolFeeSplitter - * @author Daoism Systems - * @notice Distributes protocol fees collected from a particular pool between a DAO fund recipient - * (e.g., the Balancer DAO treasury), and a beneficiary designated by the pool owner. - * @dev By default, all funds go to the DAO. To claim a share of the protocol fees, pool owners - * may call `setPoolBeneficiary`. - */ -interface IProtocolFeeSplitter { - event FeesCollected( - bytes32 indexed poolId, - address indexed beneficiary, - uint256 poolEarned, - address indexed daoFundsRecipient, - uint256 daoEarned - ); - - event PoolRevenueShareChanged(bytes32 indexed poolId, uint256 revenueSharePercentage); - event PoolRevenueShareCleared(bytes32 indexed poolId); - event PoolBeneficiaryChanged(bytes32 indexed poolId, address newBeneficiary); - event DefaultRevenueSharePercentageChanged(uint256 revenueSharePercentage); - event DAOFundsRecipientChanged(address newDaoFundsRecipient); - - // Fund recipients - - /** - * @notice Returns the DAO funds recipient that will receive any balance not due to the pool beneficiary. - */ - function getDaoFundsRecipient() external view returns (address); - - /** - * @notice Allows a authorized user to change the DAO funds recipient. - * @dev This is a permissioned function. - * @param newDaoFundsRecipient - address of the new DAO funds recipient. - */ - function setDaoFundsRecipient(address newDaoFundsRecipient) external; - - /** - * @notice Allows a pool owner to change the revenue share beneficiary for a given pool. - * @dev This is a permissioned function. - * @param poolId - the poolId of the pool where the beneficiary will change. - * @param newBeneficiary - address of the new beneficiary. - */ - function setPoolBeneficiary(bytes32 poolId, address newBeneficiary) external; - - // Revenue share settings - - /** - * @dev Returns the current protocol fee split configuration for a given pool. - * @param poolId - the poolId of a pool with accrued protocol fees. - * @return revenueSharePercentageOverride - the percentage of the split sent to the pool beneficiary. - * @return beneficiary - the address of the pool beneficiary. - */ - function getRevenueShareSettings(bytes32 poolId) - external - view - returns ( - uint256 revenueSharePercentageOverride, - address beneficiary, - bool overrideSet - ); - - /** - * @dev Returns the default revenue share percentage a pool will receive, unless overridden by a call - * to `setRevenueSharePercentage`. - */ - function getDefaultRevenueSharePercentage() external view returns (uint256); - - /** - * @notice Allows an authorized user to change the default revenue share percentage. - * @dev Set the default revenue share percentage, applied to pools where no override has been set - * through `setRevenueSharePercentage`. Must be below the maximum allowed split. - * This is a permissioned function. - * @param defaultRevenueSharePercentage - new default revenue share percentage - */ - function setDefaultRevenueSharePercentage(uint256 defaultRevenueSharePercentage) external; - - /** - * @notice Allows an authorized user to change the revenueShare for a given pool. - * @dev This is a permissioned function. - * @param poolId - the poolId of the pool where the revenue share will change. - * @param revenueSharePercentage - the new revenue share percentage. - */ - function setRevenueSharePercentage(bytes32 poolId, uint256 revenueSharePercentage) external; - - /** - * @notice Allows an authorized user to change the revenueShare for a given pool. - * @dev This is a permissioned function. - * @param poolId - the poolId of the pool where the revenue share will change. - */ - function clearRevenueSharePercentage(bytes32 poolId) external; - - // Permissionless fee collection functions - - /** - * @dev Returns the amount of fees that would be sent to each beneficiary in a call to `collectFees`. - * @param poolId - the poolId of a pool with accrued protocol fees. - * @return beneficiaryAmount - the BPT amount that would be sent to the pool beneficiary. - * @return daoAmount - the BPT amount that would be sent to the DAO funds recipient. - */ - function getAmounts(bytes32 poolId) external view returns (uint256 beneficiaryAmount, uint256 daoAmount); - - /** - * @dev Permissionless function to collect and distribute any accrued protocol fees for the given pool. - * @param poolId - the poolId of a pool with accrued protocol fees. - * @return beneficiaryAmount - the BPT amount sent to the pool beneficiary. - * @return daoAmount - the BPT amount sent to the DAO funds recipient. - */ - function collectFees(bytes32 poolId) external returns (uint256 beneficiaryAmount, uint256 daoAmount); - - // Misc getters - - /** - * @notice Returns the `ProtocolFeesWithdrawer`, used to withdraw funds from the `ProtocolFeesCollector`. - */ - function getProtocolFeesWithdrawer() external view returns (IProtocolFeesWithdrawer); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeesWithdrawer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeesWithdrawer.sol deleted file mode 100644 index 04272ce..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeesWithdrawer.sol +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../vault/IProtocolFeesCollector.sol"; - -/** - * @author Balancer Labs - * @title Protocol Fees Withdrawer - * @notice Safety layer around the Protocol Fees Collector which allows withdrawals of specific tokens to be blocked. - * This is useful for the case in where tokens that shouldn't be distributed are unexpectedly paid into the Protocol - * Fees Collector. - */ -interface IProtocolFeesWithdrawer { - event TokenAllowlisted(IERC20 token); - event TokenDenylisted(IERC20 token); - - /** - * @notice Returns the address of the Protocol Fee Collector. - */ - function getProtocolFeesCollector() external view returns (IProtocolFeesCollector); - - /** - * @notice Returns whether the provided token may be withdrawn from the Protocol Fee Collector - */ - function isWithdrawableToken(IERC20 token) external view returns (bool); - - /** - * @notice Returns whether the provided array of tokens may be withdrawn from the Protocol Fee Collector - * @dev Returns false if any token is denylisted. - */ - function isWithdrawableTokens(IERC20[] calldata tokens) external view returns (bool); - - /** - * @notice Returns the denylisted token at the given `index`. - */ - function getDenylistedToken(uint256 index) external view returns (IERC20); - - /** - * @notice Returns the number of denylisted tokens. - */ - function getDenylistedTokensLength() external view returns (uint256); - - /** - * @notice Withdraws fees from the Protocol Fee Collector. - * @dev Reverts if attempting to withdraw a denylisted token. - * @param tokens - an array of token addresses to withdraw. - * @param amounts - an array of the amounts of each token to withdraw. - * @param recipient - the address to which to send the withdrawn tokens. - */ - function withdrawCollectedFees( - IERC20[] calldata tokens, - uint256[] calldata amounts, - address recipient - ) external; - - /** - * @notice Marks the provided token as ineligible for withdrawal from the Protocol Fee Collector - */ - function denylistToken(IERC20 token) external; - - /** - * @notice Marks the provided token as eligible for withdrawal from the Protocol Fee Collector - */ - function allowlistToken(IERC20 token) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol deleted file mode 100644 index 4aafa79..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolIdRegistry.sol +++ /dev/null @@ -1,74 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity ^0.7.0; - -/** - * @dev Registry of protocol IDs for external integrations with Balancer. The IDs chosen are arbitrary and do not affect - * behavior of any Balancer contracts. They are used only to tag specific contracts (usually pools) at the data layer. - */ -interface IProtocolIdRegistry { - // Emitted when a new protocol ID is registered. - event ProtocolIdRegistered(uint256 indexed protocolId, string name); - - // Emitted when a protocol IDs name has been updated. - event ProtocolIdRenamed(uint256 indexed protocolId, string name); - - /** - * @dev Registers an ID (and name) to differentiate among protocols. Protocol IDs cannot be deregistered. - */ - function registerProtocolId(uint256 protocolId, string memory name) external; - - /** - * @dev Changes the name of an existing protocol ID. Should only be used to update in the case of mistakes. - */ - function renameProtocolId(uint256 protocolId, string memory newName) external; - - /** - * @dev Returns true if `protocolId` has been registered and can be queried. - */ - function isValidProtocolId(uint256 protocolId) external view returns (bool); - - /** - * @dev Returns the name associated with a given `protocolId`. - */ - function getProtocolName(uint256 protocolId) external view returns (string memory); -} - -library ProtocolId { - // This list is not exhaustive - more protocol IDs can be added to the system. It is expected for this list to be - // extended with new protocol IDs as they are registered, to keep them all in one place and reduce - // likelihood of user error. - // solhint-disable private-vars-leading-underscore - uint256 internal constant AAVE_V1 = 0; - uint256 internal constant AAVE_V2 = 1; - uint256 internal constant AAVE_V3 = 2; - uint256 internal constant AMPLEFORTH = 3; - uint256 internal constant BEEFY = 4; - uint256 internal constant EULER = 5; - uint256 internal constant GEARBOX = 6; - uint256 internal constant IDLE = 7; - uint256 internal constant MORPHO = 8; - uint256 internal constant RADIANT = 9; - uint256 internal constant REAPER = 10; - uint256 internal constant SILO = 11; - uint256 internal constant STARGATE = 12; - uint256 internal constant STURDY = 13; - uint256 internal constant TESSERA = 14; - uint256 internal constant TETU = 15; - uint256 internal constant YEARN = 16; - uint256 internal constant MIDAS = 17; - uint256 internal constant AGAVE = 18; - // solhint-enable private-vars-leading-underscore -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IReaperTokenVault.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IReaperTokenVault.sol deleted file mode 100644 index 1f3df5a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IReaperTokenVault.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -// Source: https://github.com/Byte-Masons/beet-strat/blob/master/contracts/ReaperVaultv1_4.sol -// Interface definition for the ReaperTokenVault contract, a single strategy vault -// for Reaper Farm crypts. The pricePerFullShare is always represented with 18 decimals, -// regardless of the underlying token decimals. -// ie: If ppfs === 1e18, 1 USDC === 0.000_000_000_001_000_000 rfUSDC -// ie: If ppfs === 1e18, 1 DAI === 1 rfDAI -interface IReaperTokenVault is IERC20 { - /** - * @dev returns the address of the vault's underlying asset (mainToken) - */ - function token() external view returns (address); - - /** - * @dev returns the price for a single Vault share (ie rf-scfUSDT). The getPricePerFullShare is always in 1e18 - */ - function getPricePerFullShare() external view returns (uint256); - - /** - * @notice Deposits `_amount` `token`, issuing shares to the caller. - * If Panic is activated, deposits will not be accepted and this call will fail. - * @param _amount The quantity of tokens to deposit. - **/ - function deposit(uint256 _amount) external; - - /** - * @notice Withdraws the calling account's tokens from this Vault, - * redeeming amount `_shares` for an appropriate amount of tokens. - **/ - function withdraw(uint256 _shares) external; - - /** - * @dev returns the number of decimals for this vault token. - * For reaper single-strat vaults, the decimals are fixed to 18. - */ - function decimals() external view returns (uint8); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IShareToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IShareToken.sol deleted file mode 100644 index 0bcfd4e..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IShareToken.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./ISilo.sol"; - -interface IShareToken is IERC20 { - /** - * @dev returns the underlying asset - */ - function asset() external view returns (address); - - /** - * @dev returns the address of the silo - */ - function silo() external view returns (ISilo); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ISilo.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ISilo.sol deleted file mode 100644 index 7acc7a4..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ISilo.sol +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IShareToken.sol"; - -interface IBaseSilo { - /// Storage struct that holds all required data for a single token market - struct AssetStorage { - // Token that represents a share in totalDeposits of Silo - IShareToken collateralToken; - // Token that represents a share in collateralOnlyDeposits of Silo - IShareToken collateralOnlyToken; - // Token that represents a share in totalBorrowAmount of Silo - IShareToken debtToken; - // COLLATERAL: Amount of asset token that has been deposited to Silo with interest earned by depositors. - // It also includes token amount that has been borrowed. - uint256 totalDeposits; - // COLLATERAL ONLY: Amount of asset token that has been deposited to Silo that can ONLY be used - // as collateral. These deposits do NOT earn interest and CANNOT be borrowed. - uint256 collateralOnlyDeposits; - // DEBT: Amount of asset token that has been borrowed with accrued interest. - uint256 totalBorrowAmount; - } - - /** - * @dev returns the asset storage struct - * @dev AssetStorage struct contains necessary information for calculating shareToken exchange rates - */ - function assetStorage(address _asset) external view returns (AssetStorage memory); -} - -interface ISilo is IBaseSilo { - /** - * @dev Deposits funds into the Silo - * @param _asset The address of the token to deposit - * @param _depositor The address of the recipient of collateral tokens - * @param _amount The amount of the token to deposit - * @param _collateralOnly: True means your shareToken is protected (cannot be swapped for interest) - * @return collateralAmount deposited amount - * @return collateralShare user collateral shares based on deposited amount - */ - function depositFor( - address _asset, - address _depositor, - uint256 _amount, - bool _collateralOnly - ) external returns (uint256 collateralAmount, uint256 collateralShare); - - /** - * @dev Withdraw `_amount` of `_asset` tokens from the Silo to `msg.sender` - * @param _asset The address of the token to withdraw - * @param _amount The amount of the token to withdraw - * @param _collateralOnly True if withdrawing collateral only deposit - * @return withdrawnAmount withdrawn amount that was transferred to user - * @return withdrawnShare burned share based on `withdrawnAmount` - */ - function withdraw( - address _asset, - uint256 _amount, - bool _collateralOnly - ) external returns (uint256 withdrawnAmount, uint256 withdrawnShare); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IStaticATokenLM.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IStaticATokenLM.sol deleted file mode 100644 index e9125f7..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IStaticATokenLM.sol +++ /dev/null @@ -1,247 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -// solhint-disable-next-line max-line-length -// Based on https://github.com/aave/protocol-v2/blob/ac58fea62bb8afee23f66197e8bce6d79ecda292/contracts/interfaces/IStaticATokenLM.sol - -interface IStaticATokenLM is IERC20 { - struct SignatureParams { - uint8 v; - bytes32 r; - bytes32 s; - } - - /** - * @notice Deposits `ASSET` in the Aave protocol and mints static aTokens to msg.sender - * @param recipient The address that will receive the static aTokens - * @param amount The amount of underlying `ASSET` to deposit (e.g. deposit of 100 USDC) - * @param referralCode Code used to register the integrator originating the operation, for potential rewards. - * 0 if the action is executed directly by the user, without any middle-man - * @param fromUnderlying bool - * - `true` if the msg.sender comes with underlying tokens (e.g. USDC) - * - `false` if the msg.sender comes already with aTokens (e.g. aUSDC) - * @return uint256 The amount of StaticAToken minted, static balance - **/ - function deposit( - address recipient, - uint256 amount, - uint16 referralCode, - bool fromUnderlying - ) external returns (uint256); - - /** - * @notice Burns `amount` of static aToken, with recipient receiving the corresponding amount of `ASSET` - * @param recipient The address that will receive the amount of `ASSET` withdrawn from the Aave protocol - * @param amount The amount to withdraw, in static balance of StaticAToken - * @param toUnderlying bool - * - `true` for the recipient to get underlying tokens (e.g. USDC) - * - `false` for the recipient to get aTokens (e.g. aUSDC) - * @return amountToBurn: StaticATokens burnt, static balance - * @return amountToWithdraw: underlying/aToken send to `recipient`, dynamic balance - **/ - function withdraw( - address recipient, - uint256 amount, - bool toUnderlying - ) external returns (uint256, uint256); - - /** - * @notice Burns `amount` of static aToken, with recipient receiving the corresponding amount of `ASSET` - * @param recipient The address that will receive the amount of `ASSET` withdrawn from the Aave protocol - * @param amount The amount to withdraw, in dynamic balance of aToken/underlying asset - * @param toUnderlying bool - * - `true` for the recipient to get underlying tokens (e.g. USDC) - * - `false` for the recipient to get aTokens (e.g. aUSDC) - * @return amountToBurn: StaticATokens burnt, static balance - * @return amountToWithdraw: underlying/aToken send to `recipient`, dynamic balance - **/ - function withdrawDynamicAmount( - address recipient, - uint256 amount, - bool toUnderlying - ) external returns (uint256, uint256); - - /** - * @notice Implements the permit function as for - * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md - * @param owner The owner of the funds - * @param spender The spender - * @param value The amount - * @param deadline The deadline timestamp, type(uint256).max for max deadline - * @param v Signature param - * @param s Signature param - * @param r Signature param - */ - function permit( - address owner, - address spender, - uint256 value, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external; - - /** - * @notice Allows to deposit on Aave via meta-transaction - * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md - * @param depositor Address from which the funds to deposit are going to be pulled - * @param recipient Address that will receive the staticATokens, in the average case, same as the `depositor` - * @param value The amount to deposit - * @param referralCode Code used to register the integrator originating the operation, for potential rewards. - * 0 if the action is executed directly by the user, without any middle-man - * @param fromUnderlying bool - * - `true` if the msg.sender comes with underlying tokens (e.g. USDC) - * - `false` if the msg.sender comes already with aTokens (e.g. aUSDC) - * @param deadline The deadline timestamp, type(uint256).max for max deadline - * @param sigParams Signature params: v,r,s - * @return uint256 The amount of StaticAToken minted, static balance - */ - function metaDeposit( - address depositor, - address recipient, - uint256 value, - uint16 referralCode, - bool fromUnderlying, - uint256 deadline, - SignatureParams calldata sigParams - ) external returns (uint256); - - /** - * @notice Allows to withdraw from Aave via meta-transaction - * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md - * @param owner Address owning the staticATokens - * @param recipient Address that will receive the underlying withdrawn from Aave - * @param staticAmount The amount of staticAToken to withdraw. If > 0, `dynamicAmount` needs to be 0 - * @param dynamicAmount The amount of underlying/aToken to withdraw. If > 0, `staticAmount` needs to be 0 - * @param toUnderlying bool - * - `true` for the recipient to get underlying tokens (e.g. USDC) - * - `false` for the recipient to get aTokens (e.g. aUSDC) - * @param deadline The deadline timestamp, type(uint256).max for max deadline - * @param sigParams Signature params: v,r,s - * @return amountToBurn: StaticATokens burnt, static balance - * @return amountToWithdraw: underlying/aToken send to `recipient`, dynamic balance - */ - function metaWithdraw( - address owner, - address recipient, - uint256 staticAmount, - uint256 dynamicAmount, - bool toUnderlying, - uint256 deadline, - SignatureParams calldata sigParams - ) external returns (uint256, uint256); - - /** - * @notice Utility method to get the current aToken balance of an user, from his staticAToken balance - * @param account The address of the user - * @return uint256 The aToken balance - **/ - function dynamicBalanceOf(address account) external view returns (uint256); - - /** - * @notice Converts a static amount (scaled balance on aToken) to the aToken/underlying value, - * using the current liquidity index on Aave - * @param amount The amount to convert from - * @return uint256 The dynamic amount - **/ - function staticToDynamicAmount(uint256 amount) external view returns (uint256); - - /** - * @notice Converts an aToken or underlying amount to the what it is denominated on the aToken as - * scaled balance, function of the principal and the liquidity index - * @param amount The amount to convert from - * @return uint256 The static (scaled) amount - **/ - function dynamicToStaticAmount(uint256 amount) external view returns (uint256); - - /** - * @notice Returns the Aave liquidity index of the underlying aToken, denominated rate here - * as it can be considered as an ever-increasing exchange rate - * @return The liquidity index - **/ - function rate() external view returns (uint256); - - /** - * @notice Function to return a dynamic domain separator, in order to be compatible with forks changing chainId - * @return bytes32 The domain separator - **/ - function getDomainSeparator() external view returns (bytes32); - - /** - * @notice Claims rewards from `INCENTIVES_CONTROLLER` and updates internal accounting of rewards. - */ - function collectAndUpdateRewards() external; - - /** - * @notice Claim rewards on behalf of a user and send them to a receiver - * @dev Only callable by if sender is onBehalfOf or sender is approved claimer - * @param onBehalfOf The address to claim on behalf of - * @param receiver The address to receive the rewards - * @param forceUpdate Flag to retrieve latest rewards from `INCENTIVES_CONTROLLER` - */ - function claimRewardsOnBehalf( - address onBehalfOf, - address receiver, - bool forceUpdate - ) external; - - /** - * @notice Claim rewards and send them to a receiver - * @param receiver The address to receive the rewards - * @param forceUpdate Flag to retrieve latest rewards from `INCENTIVES_CONTROLLER` - */ - function claimRewards(address receiver, bool forceUpdate) external; - - /** - * @notice Claim rewards - * @param forceUpdate Flag to retrieve latest rewards from `INCENTIVES_CONTROLLER` - */ - function claimRewardsToSelf(bool forceUpdate) external; - - /** - * @notice Get the total claimable rewards of the contract. - * @return The current balance + pending rewards from the `_incentivesController` - */ - function getTotalClaimableRewards() external view returns (uint256); - - /** - * @notice Get the total claimable rewards for a user in WAD - * @param user The address of the user - * @return The claimable amount of rewards in WAD - */ - function getClaimableRewards(address user) external view returns (uint256); - - /** - * @notice The unclaimed rewards for a user in WAD - * @param user The address of the user - * @return The unclaimed amount of rewards in WAD - */ - function getUnclaimedRewards(address user) external view returns (uint256); - - function getAccRewardsPerToken() external view returns (uint256); - - function getLifetimeRewardsClaimed() external view returns (uint256); - - function getLifetimeRewards() external view returns (uint256); - - function getLastRewardBlock() external view returns (uint256); - - // solhint-disable-next-line func-name-mixedcase - function LENDING_POOL() external returns (address); - - // solhint-disable-next-line func-name-mixedcase - function INCENTIVES_CONTROLLER() external returns (address); - - // solhint-disable-next-line func-name-mixedcase - function ATOKEN() external returns (IERC20); - - // solhint-disable-next-line func-name-mixedcase - function ASSET() external returns (IERC20); - - // solhint-disable-next-line func-name-mixedcase - function REWARD_TOKEN() external returns (IERC20); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuSmartVault.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuSmartVault.sol deleted file mode 100644 index a12a20f..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuSmartVault.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface ITetuSmartVault is IERC20 { - function deposit(uint256 amount) external; - - function depositFor(uint256 amount, address holder) external; - - function underlyingBalanceInVault() external view returns (uint256); - - function withdraw(uint256 numberOfShares) external; - - function underlyingBalanceWithInvestmentForHolder(address holder) external view returns (uint256); - - function underlying() external view returns (address); - - function underlyingUnit() external view returns (uint256); - - function getPricePerFullShare() external view returns (uint256); - - function strategy() external view returns (address); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuStrategy.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuStrategy.sol deleted file mode 100644 index e331dd2..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/ITetuStrategy.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface ITetuStrategy { - function investedUnderlyingBalance() external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IUnbuttonToken.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IUnbuttonToken.sol deleted file mode 100644 index 7ee7e6a..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IUnbuttonToken.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IButtonWrapper.sol"; - -// Balancer only supports ERC20 tokens, so we use this intermediate interface -// to enforce ERC20-ness of UnbuttonTokens. -interface IUnbuttonToken is IButtonWrapper, IERC20 { - // solhint-disable-previous-line no-empty-blocks -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IYearnTokenVault.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IYearnTokenVault.sol deleted file mode 100644 index 2f457cc..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IYearnTokenVault.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity ^0.7.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IYearnTokenVault is IERC20 { - /** - * @dev returns the address of the vault's underlying asset (mainToken) - */ - function token() external view returns (address); - - /** - * @dev returns the price for a single Vault share (ie yvDAI). The pricePerShare is represented - * in the same decimals as the underlying asset (ie: 6 decimals for USDC) - */ - function pricePerShare() external view returns (uint256); - - /** - * @notice Deposits `_amount` `token`, issuing shares to `recipient`. - * If the Vault is in Emergency Shutdown, deposits will not be accepted and this call will fail. - * @param _amount The quantity of tokens to deposit, defaults to all. - * @param recipient The address to issue the shares in this Vault to. Defaults to the caller's address. - * @return The issued Vault shares. - */ - function deposit(uint256 _amount, address recipient) external returns (uint256); - - /** - * @notice Withdraws the calling account's tokens from this Vault, - * redeeming amount `_shares` for an appropriate amount of tokens. - * See note on `setWithdrawalQueue` for further details of withdrawal ordering and behavior. - * @param maxShares How many shares to try and redeem for tokens, defaults to all. - * @param recipient The address to issue the shares in this Vault to. Defaults to the caller's address. - * @return redeemed: The quantity of tokens redeemed for `_shares`. - */ - function withdraw(uint256 maxShares, address recipient) external returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IstETH.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IstETH.sol deleted file mode 100644 index 308e3be..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IstETH.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -// solhint-disable-next-line max-line-length -// Based on https://github.com/lidofinance/lido-dao/blob/816bf1d0995ba5cfdfc264de4acda34a7fe93eba/contracts/0.4.24/Lido.sol - -interface IstETH is IERC20 { - function submit(address referral) external payable returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IwstETH.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IwstETH.sol deleted file mode 100644 index f87bf49..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/standalone-utils/IwstETH.sol +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IstETH.sol"; - -// solhint-disable-next-line max-line-length -// Based on https://github.com/lidofinance/lido-dao/blob/2b46615a11dee77d4d22066f942f6c6afab9b87a/contracts/0.6.12/WstETH.sol - -/** - * @title StETH token wrapper with static balances. - * @dev It's an ERC20 token that represents the account's share of the total - * supply of stETH tokens. WstETH token's balance only changes on transfers, - * unlike StETH that is also changed when oracles report staking rewards and - * penalties. It's a "power user" token for DeFi protocols which don't - * support rebasable tokens. - * - * The contract is also a trustless wrapper that accepts stETH tokens and mints - * wstETH in return. Then the user unwraps, the contract burns user's wstETH - * and sends user locked stETH in return. - * - * The contract provides the staking shortcut: user can send ETH with regular - * transfer and get wstETH in return. The contract will send ETH to Lido submit - * method, staking it and wrapping the received stETH. - * - */ -interface IwstETH is IERC20 { - function stETH() external returns (IstETH); - - /** - * @notice Exchanges stETH to wstETH - * @param _stETHAmount amount of stETH to wrap in exchange for wstETH - * @dev Requirements: - * - `_stETHAmount` must be non-zero - * - msg.sender must approve at least `_stETHAmount` stETH to this - * contract. - * - msg.sender must have at least `_stETHAmount` of stETH. - * User should first approve _stETHAmount to the WstETH contract - * @return Amount of wstETH user receives after wrap - */ - function wrap(uint256 _stETHAmount) external returns (uint256); - - /** - * @notice Exchanges wstETH to stETH - * @param _wstETHAmount amount of wstETH to uwrap in exchange for stETH - * @dev Requirements: - * - `_wstETHAmount` must be non-zero - * - msg.sender must have at least `_wstETHAmount` wstETH. - * @return Amount of stETH user receives after unwrap - */ - function unwrap(uint256 _wstETHAmount) external returns (uint256); - - /** - * @notice Get amount of wstETH for a given amount of stETH - * @param _stETHAmount amount of stETH - * @return Amount of wstETH for a given stETH amount - */ - function getWstETHByStETH(uint256 _stETHAmount) external view returns (uint256); - - /** - * @notice Get amount of stETH for a given amount of wstETH - * @param _wstETHAmount amount of wstETH - * @return Amount of stETH for a given wstETH amount - */ - function getStETHByWstETH(uint256 _wstETHAmount) external view returns (uint256); - - /** - * @notice Get amount of wstETH for a one stETH - * @return Amount of stETH for 1 wstETH - */ - function stEthPerToken() external view returns (uint256); - - /** - * @notice Get amount of stETH for a one wstETH - * @return Amount of wstETH for a 1 stETH - */ - function tokensPerStEth() external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAsset.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAsset.sol deleted file mode 100644 index a425a6d..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAsset.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero - * address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like - * types. - * - * This concept is unrelated to a Pool's Asset Managers. - */ -interface IAsset { - // solhint-disable-previous-line no-empty-blocks -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol deleted file mode 100644 index d7995fb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -interface IAuthorizer { - /** - * @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`. - */ - function canPerform( - bytes32 actionId, - address account, - address where - ) external view returns (bool); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol deleted file mode 100644 index 4411e51..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol +++ /dev/null @@ -1,126 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IVault.sol"; -import "./IPoolSwapStructs.sol"; - -/** - * @dev Interface for adding and removing liquidity that all Pool contracts should implement. Note that this is not - * the complete Pool contract interface, as it is missing the swap hooks. Pool contracts should also inherit from - * either IGeneralPool or IMinimalSwapInfoPool - */ -interface IBasePool is IPoolSwapStructs { - /** - * @dev Called by the Vault when a user calls `IVault.joinPool` to add liquidity to this Pool. Returns how many of - * each registered token the user should provide, as well as the amount of protocol fees the Pool owes to the Vault. - * The Vault will then take tokens from `sender` and add them to the Pool's balances, as well as collect - * the reported amount in protocol fees, which the pool should calculate based on `protocolSwapFeePercentage`. - * - * Protocol fees are reported and charged on join events so that the Pool is free of debt whenever new users join. - * - * `sender` is the account performing the join (from which tokens will be withdrawn), and `recipient` is the account - * designated to receive any benefits (typically pool shares). `balances` contains the total balances - * for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. - * - * `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total - * balance. - * - * `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of - * join (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) - * - * Contracts implementing this function should check that the caller is indeed the Vault before performing any - * state-changing operations, such as minting pool shares. - */ - function onJoinPool( - bytes32 poolId, - address sender, - address recipient, - uint256[] memory balances, - uint256 lastChangeBlock, - uint256 protocolSwapFeePercentage, - bytes memory userData - ) external returns (uint256[] memory amountsIn, uint256[] memory dueProtocolFeeAmounts); - - /** - * @dev Called by the Vault when a user calls `IVault.exitPool` to remove liquidity from this Pool. Returns how many - * tokens the Vault should deduct from the Pool's balances, as well as the amount of protocol fees the Pool owes - * to the Vault. The Vault will then take tokens from the Pool's balances and send them to `recipient`, - * as well as collect the reported amount in protocol fees, which the Pool should calculate based on - * `protocolSwapFeePercentage`. - * - * Protocol fees are charged on exit events to guarantee that users exiting the Pool have paid their share. - * - * `sender` is the account performing the exit (typically the pool shareholder), and `recipient` is the account - * to which the Vault will send the proceeds. `balances` contains the total token balances for each token - * the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. - * - * `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total - * balance. - * - * `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of - * exit (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) - * - * Contracts implementing this function should check that the caller is indeed the Vault before performing any - * state-changing operations, such as burning pool shares. - */ - function onExitPool( - bytes32 poolId, - address sender, - address recipient, - uint256[] memory balances, - uint256 lastChangeBlock, - uint256 protocolSwapFeePercentage, - bytes memory userData - ) external returns (uint256[] memory amountsOut, uint256[] memory dueProtocolFeeAmounts); - - /** - * @dev Returns this Pool's ID, used when interacting with the Vault (to e.g. join the Pool or swap with it). - */ - function getPoolId() external view returns (bytes32); - - /** - * @dev Returns the current swap fee percentage as a 18 decimal fixed point number, so e.g. 1e17 corresponds to a - * 10% swap fee. - */ - function getSwapFeePercentage() external view returns (uint256); - - /** - * @dev Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically - * not relevant for outside parties, but which might be useful for some types of Pools. - */ - function getScalingFactors() external view returns (uint256[] memory); - - function queryJoin( - bytes32 poolId, - address sender, - address recipient, - uint256[] memory balances, - uint256 lastChangeBlock, - uint256 protocolSwapFeePercentage, - bytes memory userData - ) external returns (uint256 bptOut, uint256[] memory amountsIn); - - function queryExit( - bytes32 poolId, - address sender, - address recipient, - uint256[] memory balances, - uint256 lastChangeBlock, - uint256 protocolSwapFeePercentage, - bytes memory userData - ) external returns (uint256 bptIn, uint256[] memory amountsOut); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasicAuthorizer.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasicAuthorizer.sol deleted file mode 100644 index f84bbfb..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IBasicAuthorizer.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -import "./IAuthorizer.sol"; - -interface IBasicAuthorizer is IAuthorizer { - // solhint-disable-next-line func-name-mixedcase - function DEFAULT_ADMIN_ROLE() external returns (bytes32); - - function getRoleAdmin(bytes32 role) external view returns (bytes32); - - function getRoleMember(bytes32 role, uint256 index) external view returns (address); - - function getRoleMemberCount(bytes32 role) external view returns (uint256); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol deleted file mode 100644 index 10ad894..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; - -// Inspired by Aave Protocol's IFlashLoanReceiver. - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -interface IFlashLoanRecipient { - /** - * @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient. - * - * At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this - * call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the - * Vault, or else the entire flash loan will revert. - * - * `userData` is the same value passed in the `IVault.flashLoan` call. - */ - function receiveFlashLoan( - IERC20[] memory tokens, - uint256[] memory amounts, - uint256[] memory feeAmounts, - bytes memory userData - ) external; -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol deleted file mode 100644 index e5f2b6b..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IBasePool.sol"; - -/** - * @dev IPools with the General specialization setting should implement this interface. - * - * This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool. - * Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will - * grant to the pool in a 'given out' swap. - * - * This can often be implemented by a `view` function, since many pricing algorithms don't need to track state - * changes in swaps. However, contracts implementing this in non-view functions should check that the caller is - * indeed the Vault. - */ -interface IGeneralPool is IBasePool { - function onSwap( - SwapRequest memory swapRequest, - uint256[] memory balances, - uint256 indexIn, - uint256 indexOut - ) external returns (uint256 amount); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IMinimalSwapInfoPool.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IMinimalSwapInfoPool.sol deleted file mode 100644 index 8359396..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IMinimalSwapInfoPool.sol +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./IBasePool.sol"; - -/** - * @dev Pool contracts with the MinimalSwapInfo or TwoToken specialization settings should implement this interface. - * - * This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool. - * Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will grant - * to the pool in a 'given out' swap. - * - * This can often be implemented by a `view` function, since many pricing algorithms don't need to track state - * changes in swaps. However, contracts implementing this in non-view functions should check that the caller is - * indeed the Vault. - */ -interface IMinimalSwapInfoPool is IBasePool { - function onSwap( - SwapRequest memory swapRequest, - uint256 currentBalanceTokenIn, - uint256 currentBalanceTokenOut - ) external returns (uint256 amount); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol deleted file mode 100644 index a23a04d..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IVault.sol"; - -interface IPoolSwapStructs { - // This is not really an interface - it just defines common structs used by other interfaces: IGeneralPool and - // IMinimalSwapInfoPool. - // - // This data structure represents a request for a token swap, where `kind` indicates the swap type ('given in' or - // 'given out') which indicates whether or not the amount sent by the pool is known. - // - // The pool receives `tokenIn` and sends `tokenOut`. `amount` is the number of `tokenIn` tokens the pool will take - // in, or the number of `tokenOut` tokens the Pool will send out, depending on the given swap `kind`. - // - // All other fields are not strictly necessary for most swaps, but are provided to support advanced scenarios in - // some Pools. - // - // `poolId` is the ID of the Pool involved in the swap - this is useful for Pool contracts that implement more than - // one Pool. - // - // The meaning of `lastChangeBlock` depends on the Pool specialization: - // - Two Token or Minimal Swap Info: the last block in which either `tokenIn` or `tokenOut` changed its total - // balance. - // - General: the last block in which *any* of the Pool's registered tokens changed its total balance. - // - // `from` is the origin address for the funds the Pool receives, and `to` is the destination address - // where the Pool sends the outgoing tokens. - // - // `userData` is extra data provided by the caller - typically a signature from a trusted party. - struct SwapRequest { - IVault.SwapKind kind; - IERC20 tokenIn; - IERC20 tokenOut; - uint256 amount; - // Misc data - bytes32 poolId; - uint256 lastChangeBlock; - address from; - address to; - bytes userData; - } -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol deleted file mode 100644 index 7fb4482..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; - -import "./IVault.sol"; -import "./IAuthorizer.sol"; - -interface IProtocolFeesCollector { - event SwapFeePercentageChanged(uint256 newSwapFeePercentage); - event FlashLoanFeePercentageChanged(uint256 newFlashLoanFeePercentage); - - function withdrawCollectedFees( - IERC20[] calldata tokens, - uint256[] calldata amounts, - address recipient - ) external; - - function setSwapFeePercentage(uint256 newSwapFeePercentage) external; - - function setFlashLoanFeePercentage(uint256 newFlashLoanFeePercentage) external; - - function getSwapFeePercentage() external view returns (uint256); - - function getFlashLoanFeePercentage() external view returns (uint256); - - function getCollectedFeeAmounts(IERC20[] memory tokens) external view returns (uint256[] memory feeAmounts); - - function getAuthorizer() external view returns (IAuthorizer); - - function vault() external view returns (IVault); -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IVault.sol b/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IVault.sol deleted file mode 100644 index c55f9d2..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/contracts/vault/IVault.sol +++ /dev/null @@ -1,772 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma experimental ABIEncoderV2; - -import "../solidity-utils/openzeppelin/IERC20.sol"; -import "../solidity-utils/helpers/IAuthentication.sol"; -import "../solidity-utils/helpers/ISignaturesValidator.sol"; -import "../solidity-utils/helpers/ITemporarilyPausable.sol"; -import "../solidity-utils/misc/IWETH.sol"; - -import "./IAsset.sol"; -import "./IAuthorizer.sol"; -import "./IFlashLoanRecipient.sol"; -import "./IProtocolFeesCollector.sol"; - -pragma solidity >=0.7.0 <0.9.0; - -/** - * @dev Full external interface for the Vault core contract - no external or public methods exist in the contract that - * don't override one of these declarations. - */ -interface IVault is ISignaturesValidator, ITemporarilyPausable, IAuthentication { - // Generalities about the Vault: - // - // - Whenever documentation refers to 'tokens', it strictly refers to ERC20-compliant token contracts. Tokens are - // transferred out of the Vault by calling the `IERC20.transfer` function, and transferred in by calling - // `IERC20.transferFrom`. In these cases, the sender must have previously allowed the Vault to use their tokens by - // calling `IERC20.approve`. The only deviation from the ERC20 standard that is supported is functions not returning - // a boolean value: in these scenarios, a non-reverting call is assumed to be successful. - // - // - All non-view functions in the Vault are non-reentrant: calling them while another one is mid-execution (e.g. - // while execution control is transferred to a token contract during a swap) will result in a revert. View - // functions can be called in a re-reentrant way, but doing so might cause them to return inconsistent results. - // Contracts calling view functions in the Vault must make sure the Vault has not already been entered. - // - // - View functions revert if referring to either unregistered Pools, or unregistered tokens for registered Pools. - - // Authorizer - // - // Some system actions are permissioned, like setting and collecting protocol fees. This permissioning system exists - // outside of the Vault in the Authorizer contract: the Vault simply calls the Authorizer to check if the caller - // can perform a given action. - - /** - * @dev Returns the Vault's Authorizer. - */ - function getAuthorizer() external view returns (IAuthorizer); - - /** - * @dev Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this. - * - * Emits an `AuthorizerChanged` event. - */ - function setAuthorizer(IAuthorizer newAuthorizer) external; - - /** - * @dev Emitted when a new authorizer is set by `setAuthorizer`. - */ - event AuthorizerChanged(IAuthorizer indexed newAuthorizer); - - // Relayers - // - // Additionally, it is possible for an account to perform certain actions on behalf of another one, using their - // Vault ERC20 allowance and Internal Balance. These accounts are said to be 'relayers' for these Vault functions, - // and are expected to be smart contracts with sound authentication mechanisms. For an account to be able to wield - // this power, two things must occur: - // - The Authorizer must grant the account the permission to be a relayer for the relevant Vault function. This - // means that Balancer governance must approve each individual contract to act as a relayer for the intended - // functions. - // - Each user must approve the relayer to act on their behalf. - // This double protection means users cannot be tricked into approving malicious relayers (because they will not - // have been allowed by the Authorizer via governance), nor can malicious relayers approved by a compromised - // Authorizer or governance drain user funds, since they would also need to be approved by each individual user. - - /** - * @dev Returns true if `user` has approved `relayer` to act as a relayer for them. - */ - function hasApprovedRelayer(address user, address relayer) external view returns (bool); - - /** - * @dev Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise. - * - * Emits a `RelayerApprovalChanged` event. - */ - function setRelayerApproval( - address sender, - address relayer, - bool approved - ) external; - - /** - * @dev Emitted every time a relayer is approved or disapproved by `setRelayerApproval`. - */ - event RelayerApprovalChanged(address indexed relayer, address indexed sender, bool approved); - - // Internal Balance - // - // Users can deposit tokens into the Vault, where they are allocated to their Internal Balance, and later - // transferred or withdrawn. It can also be used as a source of tokens when joining Pools, as a destination - // when exiting them, and as either when performing swaps. This usage of Internal Balance results in greatly reduced - // gas costs when compared to relying on plain ERC20 transfers, leading to large savings for frequent users. - // - // Internal Balance management features batching, which means a single contract call can be used to perform multiple - // operations of different kinds, with different senders and recipients, at once. - - /** - * @dev Returns `user`'s Internal Balance for a set of tokens. - */ - function getInternalBalance(address user, IERC20[] memory tokens) external view returns (uint256[] memory); - - /** - * @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer) - * and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as - * it lets integrators reuse a user's Vault allowance. - * - * For each operation, if the caller is not `sender`, it must be an authorized relayer for them. - */ - function manageUserBalance(UserBalanceOp[] memory ops) external payable; - - /** - * @dev Data for `manageUserBalance` operations, which include the possibility for ETH to be sent and received - without manual WETH wrapping or unwrapping. - */ - struct UserBalanceOp { - UserBalanceOpKind kind; - IAsset asset; - uint256 amount; - address sender; - address payable recipient; - } - - // There are four possible operations in `manageUserBalance`: - // - // - DEPOSIT_INTERNAL - // Increases the Internal Balance of the `recipient` account by transferring tokens from the corresponding - // `sender`. The sender must have allowed the Vault to use their tokens via `IERC20.approve()`. - // - // ETH can be used by passing the ETH sentinel value as the asset and forwarding ETH in the call: it will be wrapped - // and deposited as WETH. Any ETH amount remaining will be sent back to the caller (not the sender, which is - // relevant for relayers). - // - // Emits an `InternalBalanceChanged` event. - // - // - // - WITHDRAW_INTERNAL - // Decreases the Internal Balance of the `sender` account by transferring tokens to the `recipient`. - // - // ETH can be used by passing the ETH sentinel value as the asset. This will deduct WETH instead, unwrap it and send - // it to the recipient as ETH. - // - // Emits an `InternalBalanceChanged` event. - // - // - // - TRANSFER_INTERNAL - // Transfers tokens from the Internal Balance of the `sender` account to the Internal Balance of `recipient`. - // - // Reverts if the ETH sentinel value is passed. - // - // Emits an `InternalBalanceChanged` event. - // - // - // - TRANSFER_EXTERNAL - // Transfers tokens from `sender` to `recipient`, using the Vault's ERC20 allowance. This is typically used by - // relayers, as it lets them reuse a user's Vault allowance. - // - // Reverts if the ETH sentinel value is passed. - // - // Emits an `ExternalBalanceTransfer` event. - - enum UserBalanceOpKind { DEPOSIT_INTERNAL, WITHDRAW_INTERNAL, TRANSFER_INTERNAL, TRANSFER_EXTERNAL } - - /** - * @dev Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through - * interacting with Pools using Internal Balance. - * - * Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH - * address. - */ - event InternalBalanceChanged(address indexed user, IERC20 indexed token, int256 delta); - - /** - * @dev Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account. - */ - event ExternalBalanceTransfer(IERC20 indexed token, address indexed sender, address recipient, uint256 amount); - - // Pools - // - // There are three specialization settings for Pools, which allow for cheaper swaps at the cost of reduced - // functionality: - // - // - General: no specialization, suited for all Pools. IGeneralPool is used for swap request callbacks, passing the - // balance of all tokens in the Pool. These Pools have the largest swap costs (because of the extra storage reads), - // which increase with the number of registered tokens. - // - // - Minimal Swap Info: IMinimalSwapInfoPool is used instead of IGeneralPool, which saves gas by only passing the - // balance of the two tokens involved in the swap. This is suitable for some pricing algorithms, like the weighted - // constant product one popularized by Balancer V1. Swap costs are smaller compared to general Pools, and are - // independent of the number of registered tokens. - // - // - Two Token: only allows two tokens to be registered. This achieves the lowest possible swap gas cost. Like - // minimal swap info Pools, these are called via IMinimalSwapInfoPool. - - enum PoolSpecialization { GENERAL, MINIMAL_SWAP_INFO, TWO_TOKEN } - - /** - * @dev Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which - * is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be - * changed. - * - * The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`, - * depending on the chosen specialization setting. This contract is known as the Pool's contract. - * - * Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words, - * multiple Pools may share the same contract. - * - * Emits a `PoolRegistered` event. - */ - function registerPool(PoolSpecialization specialization) external returns (bytes32); - - /** - * @dev Emitted when a Pool is registered by calling `registerPool`. - */ - event PoolRegistered(bytes32 indexed poolId, address indexed poolAddress, PoolSpecialization specialization); - - /** - * @dev Returns a Pool's contract address and specialization setting. - */ - function getPool(bytes32 poolId) external view returns (address, PoolSpecialization); - - /** - * @dev Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract. - * - * Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens, - * exit by receiving registered tokens, and can only swap registered tokens. - * - * Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length - * of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in - * ascending order. - * - * The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset - * Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`, - * depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore - * expected to be highly secured smart contracts with sound design principles, and the decision to register an - * Asset Manager should not be made lightly. - * - * Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset - * Manager is set, it cannot be changed except by deregistering the associated token and registering again with a - * different Asset Manager. - * - * Emits a `TokensRegistered` event. - */ - function registerTokens( - bytes32 poolId, - IERC20[] memory tokens, - address[] memory assetManagers - ) external; - - /** - * @dev Emitted when a Pool registers tokens by calling `registerTokens`. - */ - event TokensRegistered(bytes32 indexed poolId, IERC20[] tokens, address[] assetManagers); - - /** - * @dev Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract. - * - * Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total - * balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens - * must be deregistered in the same `deregisterTokens` call. - * - * A deregistered token can be re-registered later on, possibly with a different Asset Manager. - * - * Emits a `TokensDeregistered` event. - */ - function deregisterTokens(bytes32 poolId, IERC20[] memory tokens) external; - - /** - * @dev Emitted when a Pool deregisters tokens by calling `deregisterTokens`. - */ - event TokensDeregistered(bytes32 indexed poolId, IERC20[] tokens); - - /** - * @dev Returns detailed information for a Pool's registered token. - * - * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens - * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` - * equals the sum of `cash` and `managed`. - * - * Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`, - * `managed` or `total` balance to be greater than 2^112 - 1. - * - * `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a - * join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for - * example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a - * change for this purpose, and will update `lastChangeBlock`. - * - * `assetManager` is the Pool's token Asset Manager. - */ - function getPoolTokenInfo(bytes32 poolId, IERC20 token) - external - view - returns ( - uint256 cash, - uint256 managed, - uint256 lastChangeBlock, - address assetManager - ); - - /** - * @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of - * the tokens' `balances` changed. - * - * The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all - * Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order. - * - * If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same - * order as passed to `registerTokens`. - * - * Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are - * the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo` - * instead. - */ - function getPoolTokens(bytes32 poolId) - external - view - returns ( - IERC20[] memory tokens, - uint256[] memory balances, - uint256 lastChangeBlock - ); - - /** - * @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will - * trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized - * Pool shares. - * - * If the caller is not `sender`, it must be an authorized relayer for them. - * - * The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount - * to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces - * these maximums. - * - * If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable - * this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the - * WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent - * back to the caller (not the sender, which is important for relayers). - * - * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when - * interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be - * sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final - * `assets` array might not be sorted. Pools with no registered tokens cannot be joined. - * - * If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only - * be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be - * withdrawn from Internal Balance: attempting to do so will trigger a revert. - * - * This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement - * their own custom logic. This typically requires additional information from the user (such as the expected number - * of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed - * directly to the Pool's contract, as is `recipient`. - * - * Emits a `PoolBalanceChanged` event. - */ - function joinPool( - bytes32 poolId, - address sender, - address recipient, - JoinPoolRequest memory request - ) external payable; - - struct JoinPoolRequest { - IAsset[] assets; - uint256[] maxAmountsIn; - bytes userData; - bool fromInternalBalance; - } - - /** - * @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will - * trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized - * Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see - * `getPoolTokenInfo`). - * - * If the caller is not `sender`, it must be an authorized relayer for them. - * - * The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum - * token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault: - * it just enforces these minimums. - * - * If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To - * enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead - * of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit. - * - * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when - * interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must - * be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the - * final `assets` array might not be sorted. Pools with no registered tokens cannot be exited. - * - * If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise, - * an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to - * do so will trigger a revert. - * - * `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the - * `tokens` array. This array must match the Pool's registered tokens. - * - * This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement - * their own custom logic. This typically requires additional information from the user (such as the expected number - * of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and - * passed directly to the Pool's contract. - * - * Emits a `PoolBalanceChanged` event. - */ - function exitPool( - bytes32 poolId, - address sender, - address payable recipient, - ExitPoolRequest memory request - ) external; - - struct ExitPoolRequest { - IAsset[] assets; - uint256[] minAmountsOut; - bytes userData; - bool toInternalBalance; - } - - /** - * @dev Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively. - */ - event PoolBalanceChanged( - bytes32 indexed poolId, - address indexed liquidityProvider, - IERC20[] tokens, - int256[] deltas, - uint256[] protocolFeeAmounts - ); - - enum PoolBalanceChangeKind { JOIN, EXIT } - - // Swaps - // - // Users can swap tokens with Pools by calling the `swap` and `batchSwap` functions. To do this, - // they need not trust Pool contracts in any way: all security checks are made by the Vault. They must however be - // aware of the Pools' pricing algorithms in order to estimate the prices Pools will quote. - // - // The `swap` function executes a single swap, while `batchSwap` can perform multiple swaps in sequence. - // In each individual swap, tokens of one kind are sent from the sender to the Pool (this is the 'token in'), - // and tokens of another kind are sent from the Pool to the recipient in exchange (this is the 'token out'). - // More complex swaps, such as one token in to multiple tokens out can be achieved by batching together - // individual swaps. - // - // There are two swap kinds: - // - 'given in' swaps, where the amount of tokens in (sent to the Pool) is known, and the Pool determines (via the - // `onSwap` hook) the amount of tokens out (to send to the recipient). - // - 'given out' swaps, where the amount of tokens out (received from the Pool) is known, and the Pool determines - // (via the `onSwap` hook) the amount of tokens in (to receive from the sender). - // - // Additionally, it is possible to chain swaps using a placeholder input amount, which the Vault replaces with - // the calculated output of the previous swap. If the previous swap was 'given in', this will be the calculated - // tokenOut amount. If the previous swap was 'given out', it will use the calculated tokenIn amount. These extended - // swaps are known as 'multihop' swaps, since they 'hop' through a number of intermediate tokens before arriving at - // the final intended token. - // - // In all cases, tokens are only transferred in and out of the Vault (or withdrawn from and deposited into Internal - // Balance) after all individual swaps have been completed, and the net token balance change computed. This makes - // certain swap patterns, such as multihops, or swaps that interact with the same token pair in multiple Pools, cost - // much less gas than they would otherwise. - // - // It also means that under certain conditions it is possible to perform arbitrage by swapping with multiple - // Pools in a way that results in net token movement out of the Vault (profit), with no tokens being sent in (only - // updating the Pool's internal accounting). - // - // To protect users from front-running or the market changing rapidly, they supply a list of 'limits' for each token - // involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the - // minimum amount of tokens to receive (by passing a negative value) is specified. - // - // Additionally, a 'deadline' timestamp can also be provided, forcing the swap to fail if it occurs after - // this point in time (e.g. if the transaction failed to be included in a block promptly). - // - // If interacting with Pools that hold WETH, it is possible to both send and receive ETH directly: the Vault will do - // the wrapping and unwrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be - // passed in the `assets` array instead of the WETH address. Note that it is possible to combine ETH and WETH in the - // same swap. Any excess ETH will be sent back to the caller (not the sender, which is relevant for relayers). - // - // Finally, Internal Balance can be used when either sending or receiving tokens. - - enum SwapKind { GIVEN_IN, GIVEN_OUT } - - /** - * @dev Performs a swap with a single Pool. - * - * If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens - * taken from the Pool, which must be greater than or equal to `limit`. - * - * If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens - * sent to the Pool, which must be less than or equal to `limit`. - * - * Internal Balance usage and the recipient are determined by the `funds` struct. - * - * Emits a `Swap` event. - */ - function swap( - SingleSwap memory singleSwap, - FundManagement memory funds, - uint256 limit, - uint256 deadline - ) external payable returns (uint256); - - /** - * @dev Data for a single swap executed by `swap`. `amount` is either `amountIn` or `amountOut` depending on - * the `kind` value. - * - * `assetIn` and `assetOut` are either token addresses, or the IAsset sentinel value for ETH (the zero address). - * Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault. - * - * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be - * used to extend swap behavior. - */ - struct SingleSwap { - bytes32 poolId; - SwapKind kind; - IAsset assetIn; - IAsset assetOut; - uint256 amount; - bytes userData; - } - - /** - * @dev Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either - * the amount of tokens sent to or received from the Pool, depending on the `kind` value. - * - * Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the - * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at - * the same index in the `assets` array. - * - * Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a - * Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or - * `amountOut` depending on the swap kind. - * - * Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out - * of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal - * the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`. - * - * The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses, - * or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and - * out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to - * or unwrapped from WETH by the Vault. - * - * Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies - * the minimum or maximum amount of each token the vault is allowed to transfer. - * - * `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the - * equivalent `swap` call. - * - * Emits `Swap` events. - */ - function batchSwap( - SwapKind kind, - BatchSwapStep[] memory swaps, - IAsset[] memory assets, - FundManagement memory funds, - int256[] memory limits, - uint256 deadline - ) external payable returns (int256[] memory); - - /** - * @dev Data for each individual swap executed by `batchSwap`. The asset in and out fields are indexes into the - * `assets` array passed to that function, and ETH assets are converted to WETH. - * - * If `amount` is zero, the multihop mechanism is used to determine the actual amount based on the amount in/out - * from the previous swap, depending on the swap kind. - * - * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be - * used to extend swap behavior. - */ - struct BatchSwapStep { - bytes32 poolId; - uint256 assetInIndex; - uint256 assetOutIndex; - uint256 amount; - bytes userData; - } - - /** - * @dev Emitted for each individual swap performed by `swap` or `batchSwap`. - */ - event Swap( - bytes32 indexed poolId, - IERC20 indexed tokenIn, - IERC20 indexed tokenOut, - uint256 amountIn, - uint256 amountOut - ); - - /** - * @dev All tokens in a swap are either sent from the `sender` account to the Vault, or from the Vault to the - * `recipient` account. - * - * If the caller is not `sender`, it must be an authorized relayer for them. - * - * If `fromInternalBalance` is true, the `sender`'s Internal Balance will be preferred, performing an ERC20 - * transfer for the difference between the requested amount and the User's Internal Balance (if any). The `sender` - * must have allowed the Vault to use their tokens via `IERC20.approve()`. This matches the behavior of - * `joinPool`. - * - * If `toInternalBalance` is true, tokens will be deposited to `recipient`'s internal balance instead of - * transferred. This matches the behavior of `exitPool`. - * - * Note that ETH cannot be deposited to or withdrawn from Internal Balance: attempting to do so will trigger a - * revert. - */ - struct FundManagement { - address sender; - bool fromInternalBalance; - address payable recipient; - bool toInternalBalance; - } - - /** - * @dev Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be - * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result. - * - * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH) - * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it - * receives are the same that an equivalent `batchSwap` call would receive. - * - * Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct. - * This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens, - * approve them for the Vault, or even know a user's address. - * - * Note that this function is not 'view' (due to implementation details): the client code must explicitly execute - * eth_call instead of eth_sendTransaction. - */ - function queryBatchSwap( - SwapKind kind, - BatchSwapStep[] memory swaps, - IAsset[] memory assets, - FundManagement memory funds - ) external returns (int256[] memory assetDeltas); - - // Flash Loans - - /** - * @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it, - * and then reverting unless the tokens plus a proportional protocol fee have been returned. - * - * The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount - * for each token contract. `tokens` must be sorted in ascending order. - * - * The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the - * `receiveFlashLoan` call. - * - * Emits `FlashLoan` events. - */ - function flashLoan( - IFlashLoanRecipient recipient, - IERC20[] memory tokens, - uint256[] memory amounts, - bytes memory userData - ) external; - - /** - * @dev Emitted for each individual flash loan performed by `flashLoan`. - */ - event FlashLoan(IFlashLoanRecipient indexed recipient, IERC20 indexed token, uint256 amount, uint256 feeAmount); - - // Asset Management - // - // Each token registered for a Pool can be assigned an Asset Manager, which is able to freely withdraw the Pool's - // tokens from the Vault, deposit them, or assign arbitrary values to its `managed` balance (see - // `getPoolTokenInfo`). This makes them extremely powerful and dangerous. Even if an Asset Manager only directly - // controls one of the tokens in a Pool, a malicious manager could set that token's balance to manipulate the - // prices of the other tokens, and then drain the Pool with swaps. The risk of using Asset Managers is therefore - // not constrained to the tokens they are managing, but extends to the entire Pool's holdings. - // - // However, a properly designed Asset Manager smart contract can be safely used for the Pool's benefit, - // for example by lending unused tokens out for interest, or using them to participate in voting protocols. - // - // This concept is unrelated to the IAsset interface. - - /** - * @dev Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates. - * - * Pool Balance management features batching, which means a single contract call can be used to perform multiple - * operations of different kinds, with different Pools and tokens, at once. - * - * For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`. - */ - function managePoolBalance(PoolBalanceOp[] memory ops) external; - - struct PoolBalanceOp { - PoolBalanceOpKind kind; - bytes32 poolId; - IERC20 token; - uint256 amount; - } - - /** - * Withdrawals decrease the Pool's cash, but increase its managed balance, leaving the total balance unchanged. - * - * Deposits increase the Pool's cash, but decrease its managed balance, leaving the total balance unchanged. - * - * Updates don't affect the Pool's cash balance, but because the managed balance changes, it does alter the total. - * The external amount can be either increased or decreased by this call (i.e., reporting a gain or a loss). - */ - enum PoolBalanceOpKind { WITHDRAW, DEPOSIT, UPDATE } - - /** - * @dev Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`. - */ - event PoolBalanceManaged( - bytes32 indexed poolId, - address indexed assetManager, - IERC20 indexed token, - int256 cashDelta, - int256 managedDelta - ); - - // Protocol Fees - // - // Some operations cause the Vault to collect tokens in the form of protocol fees, which can then be withdrawn by - // permissioned accounts. - // - // There are two kinds of protocol fees: - // - // - flash loan fees: charged on all flash loans, as a percentage of the amounts lent. - // - // - swap fees: a percentage of the fees charged by Pools when performing swaps. For a number of reasons, including - // swap gas costs and interface simplicity, protocol swap fees are not charged on each individual swap. Rather, - // Pools are expected to keep track of how much they have charged in swap fees, and pay any outstanding debts to the - // Vault when they are joined or exited. This prevents users from joining a Pool with unpaid debt, as well as - // exiting a Pool in debt without first paying their share. - - /** - * @dev Returns the current protocol fee module. - */ - function getProtocolFeesCollector() external view returns (IProtocolFeesCollector); - - /** - * @dev Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an - * error in some part of the system. - * - * The Vault can only be paused during an initial time period, after which pausing is forever disabled. - * - * While the contract is paused, the following features are disabled: - * - depositing and transferring internal balance - * - transferring external balance (using the Vault's allowance) - * - swaps - * - joining Pools - * - Asset Manager interactions - * - * Internal Balance can still be withdrawn, and Pools exited. - */ - function setPaused(bool paused) external; - - /** - * @dev Returns the Vault's WETH instance. - */ - function WETH() external view returns (IWETH); - // solhint-disable-previous-line func-name-mixedcase -} diff --git a/foundry/lib/balancer-labs/v2-interfaces/package.json b/foundry/lib/balancer-labs/v2-interfaces/package.json deleted file mode 100644 index 1608cae..0000000 --- a/foundry/lib/balancer-labs/v2-interfaces/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@balancer-labs/v2-interfaces", - "version": "0.4.0", - "description": "V2 Interfaces", - "license": "GPL-3.0-only", - "homepage": "https://github.com/balancer-labs/balancer-v2-monorepo/tree/master/pkg/interfaces#readme", - "repository": { - "type": "git", - "url": "https://github.com/balancer-labs/balancer-v2-monorepo.git", - "directory": "pkg/interfaces" - }, - "bugs": { - "url": "https://github.com/balancer-labs/balancer-v2-monorepo/issues" - }, - "files": [ - "contracts/**/*" - ], - "scripts": { - "build": "yarn compile", - "compile": "hardhat compile && rm -rf artifacts/build-info", - "compile:watch": "nodemon --ext sol --exec yarn compile", - "lint": "yarn lint:solidity && yarn lint:typescript", - "lint:solidity": "solhint 'contracts/**/*.sol'", - "lint:typescript": "NODE_NO_WARNINGS=1 eslint . --ext .ts --ignore-path ../../.eslintignore --max-warnings 0" - }, - "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.2.1", - "@nomiclabs/hardhat-waffle": "^2.0.3", - "@types/chai": "^4.3.3", - "@types/lodash": "^4.14.186", - "@types/mocha": "^10.0.0", - "@types/node": "^14.14.31", - "@typescript-eslint/eslint-plugin": "^5.41.0", - "@typescript-eslint/parser": "^5.41.0", - "chai": "^4.3.6", - "decimal.js": "^10.4.2", - "eslint": "^8.26.0", - "eslint-plugin-mocha-no-only": "^1.1.1", - "eslint-plugin-prettier": "^4.2.1", - "ethereum-waffle": "^3.4.4", - "ethers": "^5.7.2", - "hardhat": "^2.12.5", - "hardhat-ignore-warnings": "^0.2.4", - "lodash.frompairs": "^4.0.1", - "lodash.pick": "^4.4.0", - "lodash.range": "^3.2.0", - "lodash.times": "^4.3.2", - "lodash.zip": "^4.2.0", - "mocha": "^10.1.0", - "nodemon": "^2.0.20", - "prettier": "^2.7.1", - "prettier-plugin-solidity": "v1.0.0-alpha.59", - "solhint": "^3.2.0", - "solhint-plugin-prettier": "^0.0.4", - "ts-node": "^10.9.1", - "typescript": "^4.0.2" - } -} \ No newline at end of file diff --git a/foundry/package.json b/foundry/package.json new file mode 100644 index 0000000..fd5b6fb --- /dev/null +++ b/foundry/package.json @@ -0,0 +1,9 @@ +{ + "name": "foundry", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "@balancer-labs/v2-interfaces": "^0.4.0" + } +} diff --git a/foundry/remappings.txt b/foundry/remappings.txt index 6d33fc1..0bc9963 100644 --- a/foundry/remappings.txt +++ b/foundry/remappings.txt @@ -3,4 +3,4 @@ @permit2/=lib/permit2/ @src/=src/ @uniswap-v2/=lib/v2-core/ -@balancer-labs/v2-interfaces/=lib/balancer-labs/v2-interfaces/ \ No newline at end of file +@balancer-labs/v2-interfaces/=node_modules/@balancer-labs/v2-interfaces/ \ No newline at end of file diff --git a/foundry/src/executors/BalancerV2Executor.sol b/foundry/src/executors/BalancerV2Executor.sol index f0114d7..1572b17 100644 --- a/foundry/src/executors/BalancerV2Executor.sol +++ b/foundry/src/executors/BalancerV2Executor.sol @@ -2,10 +2,12 @@ pragma solidity ^0.8.28; import "@interfaces/IExecutor.sol"; -import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; -import "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol"; -import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; - +import { + IERC20, + SafeERC20 +} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IAsset} from "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol"; +import {IVault} from "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; error BalancerV2Executor__InvalidDataLength(); @@ -27,7 +29,7 @@ contract BalancerV2Executor is IExecutor { ) = _decodeData(data); if (needsApproval) { - tokenIn.safeApprove(VAULT, type(uint256).max); + tokenIn.approve(VAULT, type(uint256).max); } IVault.SingleSwap memory singleSwap = IVault.SingleSwap({ @@ -48,12 +50,8 @@ contract BalancerV2Executor is IExecutor { uint256 limit = 0; - calculatedAmount = IVault(VAULT).swap( - singleSwap, - funds, - limit, - block.timestamp - ); + calculatedAmount = + IVault(VAULT).swap(singleSwap, funds, limit, block.timestamp); } function _decodeData(bytes calldata data) @@ -77,4 +75,4 @@ contract BalancerV2Executor is IExecutor { receiver = address(bytes20(data[72:92])); needsApproval = uint8(data[92]) > 0; } -} \ No newline at end of file +} diff --git a/foundry/yarn.lock b/foundry/yarn.lock new file mode 100644 index 0000000..867b232 --- /dev/null +++ b/foundry/yarn.lock @@ -0,0 +1,8 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@balancer-labs/v2-interfaces@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@balancer-labs/v2-interfaces/-/v2-interfaces-0.4.0.tgz#9bfc2aed7bed4208ebf4b18a14664d8e90d4c141" + integrity sha512-K0ij26m8/UOvdPmrAnuh/C7kT8OQupsgV8KRyIt+aTHW1KbPOi4v8zLMwW2AwSYMSRjPK2A/ttlnNizT0iA4Qg== diff --git a/test/TychoRouter.t.sol b/test/TychoRouter.t.sol index 0519ecb..8b13789 100644 --- a/test/TychoRouter.t.sol +++ b/test/TychoRouter.t.sol @@ -1 +1 @@ - \ No newline at end of file +