balancer-v2-monorepo icon indicating copy to clipboard operation
balancer-v2-monorepo copied to clipboard

Balancer V2 Monorepo

Balancer

Balancer V2 Monorepo

Docs CI Status License

This repository contains the Balancer Protocol V2 core smart contracts, including the Vault and standard Pools, along with their tests, configuration, and deployment information.

For a high-level introduction to Balancer V2, see Introducing Balancer V2: Generalized AMMs.

Structure

This is a Yarn 2 monorepo, with the packages meant to be published in the pkg directory. Newly developed packages may not be published yet.

Active development occurs in this repository, which means some contracts in it might not be production-ready. Proceed with caution.

Packages

  • v2-deployments: addresses and ABIs of all Balancer V2 deployed contracts, for mainnet and various test networks.
  • v2-interfaces: Solidity interfaces for all contracts.
  • v2-vault: the Vault contract and all core interfaces, including IVault and the Pool interfaces: IBasePool, IGeneralPool and IMinimalSwapInfoPool.
  • v2-pool-weighted: the WeightedPool, WeightedPool2Tokens and LiquidityBootstrappingPool contracts, along with their associated factories.
  • v2-pool-linear: the AaveLinearPool and ERC4626LinearPool contracts, along with their associated factories.
  • v2-pool-utils: Solidity utilities used to develop Pool contracts.
  • v2-solidity-utils: miscellaneous Solidity helpers and utilities used in many different contracts.
  • v2-standalone-utils: miscellaneous standalone utility contracts.
  • v2-liquidity-mining: contracts that compose the liquidity mining (veBAL) system.
  • v2-governance-scripts: contracts that execute complex governance actions.

Build and Test

Before any tests can be run, the repository needs to be prepared:

$ yarn # install all dependencies
$ yarn build # compile all contracts

Most tests are standalone and simply require installation of dependencies and compilation. Some packages however have extra requirements. Notably, the v2-deployments package must have access to mainnet archive nodes in order to perform fork tests. For more details, head to its readme file.

In order to run all tests (including those with extra dependencies), run:

$ yarn test # run all tests

To instead run a single package's tests, run:

$ cd pkg/<package> # e.g. cd pkg/v2-vault
$ yarn test

You can see a sample report of a test run here.

Security

Multiple independent reviews and audits were performed by Certora, OpenZeppelin and Trail of Bits. The latest reports from these engagements are located in the audits directory.

Bug bounties apply to most of the smart contracts hosted in this repository: head to Balancer V2 Bug Bounties to learn more.

All core smart contracts are immutable, and cannot be upgraded. See page 6 of the Trail of Bits audit:

Upgradeability | Not Applicable. The system cannot be upgraded.

Licensing

Most of the Solidity source code is licensed under the GNU General Public License Version 3 (GPL v3): see LICENSE.

Exceptions

  • All files in the openzeppelin directory of the v2-solidity-utils package are based on the OpenZeppelin Contracts library, and as such are licensed under the MIT License: see LICENSE.
  • The LogExpMath contract from the v2-solidity-utils package is licensed under the MIT License.
  • All other files, including tests and the pvt directory are unlicensed.