This repository contains the smart contracts for the Slipstream Concentrated Liquidity contracts. It contains the core concentrated liquidity contracts, adapted from UniswapV3's core contracts. It contains the higher level periphery contracts, adapted from UniswapV3's periphery contracts. It also contains gauges designed to operate within the Velodrome ecosystem.
See SPECIFICATION.md and CHANGELOG.md for more information.
This repository is a hybrid hardhat and foundry repository.
Install hardhat dependencies with yarn install.
Install foundry dependencies with forge install.
Run hardhat tests with yarn test.
Run forge tests with forge test.
To run the invariant tests, echidna must be installed. The following instructions require additional installations (e.g. of solc-select).
echidna test/invariants/E2E_mint_burn.sol --config test/invariants/E2E_mint_burn.config.yaml --contract E2E_mint_burn
echidna test/invariants/E2E_swap.sol --config test/invariants/E2E_swap.config.yaml --contract E2E_swap
As this repository depends on the UniswapV3 v3-core and v3-periphery repository, the contracts in the
contracts/core and contracts/periphery folders are licensed under GPL-2.0-or-later or alternative
licenses (as indicated in their SPDX headers).
Files in the contracts/gauge folder are licensed under the Business Source License 1.1 (BUSL-1.1).
Velodrome has a live bug bounty hosted on (Immunefi).
Initial deployment of Slipstream contracts on Base.
| Name | Address |
|---|---|
| GaugeFactory | 0xD30677bd8dd15132F251Cb54CbDA552d2A05Fb08 |
| GaugeImplementation | 0xF5601F95708256A118EF5971820327F362442D2d |
| MixedQuoter | 0x0A5aA5D3a4d28014f967Bf0f29EAA3FF9807D5c6 |
| NonfungiblePositionManager | 0x827922686190790b37229fd06084350E74485b72 |
| NonfungibleTokenPositionDescriptor | 0x01b0CaCB9A8004e08D075c919B5dF3b59FD53c55 |
| PoolFactory | 0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A |
| PoolImplementation | 0xeC8E5342B19977B4eF8892e02D8DAEcfa1315831 |
| QuoterV2 | 0x254cF9E1E6e233aa1AC962CB9B05b2cfeAaE15b0 |
| CustomSwapFeeModule | 0xF4171B0953b52Fa55462E4d76ecA1845Db69af00 |
| CustomUnstakedFeeModule | 0x0AD08370c76Ff426F534bb2AFFD9b5555338ee68 |
| SwapRouter | 0xBE6D8f0d05cC4be24d5167a3eF062215bE6D18a5 |
| SugarHelper | 0x0AD09A66af0154a84e86F761313d02d0abB6edd5 |
| DynamicSwapFeeModule | 0xDB45818A6db280ecfeB33cbeBd445423d0216b5D |
Deployment with gauge emission cap enforcement and redistributor functionality to manage and reallocate excess emissions.
Key Changes:
- Gauge Caps:
CLGaugeenforces emission caps to limit rewards per gauge.- The emission cap is set as a percentage of total weekly emissions.
- When a gauge exceeds its cap, excess emissions are automatically transferred to the
Redistributor.
- Redistributor:
- Manages redistribution of excess emissions when gauges exceed their caps.
- Collects excess emissions from capped gauges and redistributes them to other eligible gauges proportionally to their voting weight.
| Name | Address |
|---|---|
| GaugeFactory | 0xB630227a79707D517320b6c0f885806389dFcbB3 |
| GaugeImplementation | 0xC0d2086B6f70C0C40423626167096c6196cFA0c8 |
| MixedQuoter | 0x49540630A4d2CE67d54450D007D634F4c45B4f4f |
| NonfungiblePositionManager | 0xa990C6a764b73BF43cee5Bb40339c3322FB9D55F |
| NonfungibleTokenPositionDescriptor | 0xf632031B94D72deE0D99DeF846c9b6211041337f |
| PoolFactory | 0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a |
| PoolImplementation | 0x942e97a4c6FdC38B4CD1c0298D37d81fDD8E5A16 |
| Quoter | 0x3d4C22254F86f64B7eC90ab8F7aeC1FBFD271c6C |
| SwapFeeModule | 0x5264Eeeab16037A7A7AF15Ff69A470af6e2a2223 |
| SwapRouter | 0xcbBb8035cAc7D4B3Ca7aBb74cF7BdF900215Ce0D |
| UnstakedFeeModule | 0xCCC21f4750E8B3E9C095BCB5d2fF59247A2CCD35 |
| DynamicSwapFeeModule | 0x00cB12a1c84dfC1b9c70734C0385E769Bc86e9Ef |
| Redistributor | 0x11a53f31Bf406de59fCf9613E1922bd3E283A4B4 |