This package contains Solidity utilities for developing Symmetric V2 Pools, implementing common patterns such as token decimal scaling, caller checks on hooks, etc.
The most useful contracts are BaseGeneralPool
and BaseMinimalSwapInfoPool
, used as base contracts for Pools with the General and MinimalSwapInfo/TwoTokens specializations respectively.
The recommended pattern is to create new Pools from factory contracts, as that lets other systems reason about Pool logic by checking if a Pool was deployed from a given factory. BasePoolFactory
and BasePoolSplitCodeFactory
(for large contracts) can be used for this purpose.
$ npm install @balancer-labs/v2-pool-utils
Contracts in this package are meant to be used via inheritance to develop new Pools. The BaseGeneralPool
and BaseMinimalSwapInfoPool
contracts are abstract
, meaning some virtual
functions (such as _onJoinPool
or _onSwapGivenIn
) are not defined: derived contracts must override
them and provide an implementation.
See v2-pool-weighted
for the implementation of Pools with a Constant Weighted Product invariant using these base contracts.