📄Smart Contracts

Zaps = Smart Contracts combining multiple on-chain actions to help you save time & gas.

Mainnet

Contract

Description

Address

Version

Uniswap V2 Add

Add liquidity to any liquidity pool on Uniswap V2 using just ETH or ERC20s

0xE83554B397BdA8ECAE7FEE5aeE532e83Ee9eB29D

2.4.2

Uniswap V2 Remove

Remove liquidity from any pool on Uniswap V2 and recieve ETH or ERC20s

0x79B6C6F8634ea477ED725eC23b7b6Fcb41F00E58

2.1

Uniswap V2 Pool Pipe

Re-balance liquidity between Uniswap V2 pools

0xBdcd4Dcc79bA2C4088323ca94F443a05A23cA372

1.1

Uniswap V1 Remove

Remove liquidity from any pool on Uniswap V1 & receive just ETH or any ERC20

0x5e6531d99e9099cb3936c048daf6ba0b3f79b9e2

2.0

Balancer Add

Add liquidity to any pool on Balancer using just ETH or ERC20s

0xA3128cC400E2878571368ae0a83F588Eb838552b

2.6

Balancer Remove

Remove liquidity from any pool on Balancer & receive just ETH or any ERC20

0x00d0f137b51692D0AC708bdE7b367a373865cFfe

2.2

Curve Add

Add liquidity to Curve Pools using just ETH or just ERC20s

0xf9A724c2607E5766a7Bbe530D6a7e173532F9f3a

1.10

Curve Remove

Remove liquidity from any pool on Curve & receive just ETH or any ERC20

0xA3061Cf6aC1423c6F40917AD49602cBA187181Dc

2.1

Curve Pipe

Rebalance liquidity between any two pools on Curve

0xB54dCe7f4Bd17DFebe4CB9742AE2D7d2886134d8

1.0

Uniswap V2 <> Balancer Pool Pipe

Re-balance liquidity between Uniswap V2 and Balancer pools

0xA3149708cb9D9BD31CB5c8F5c107D94395B7bA64

1.4

yEarn Vault Add or Remove

Add or remove liquidity from yEarn Vaults

0xB0880df8420974ef1b040111e5e0e95f05F8fee1

1.5

Zapper Swap

Multi-Exchange asset swap with ETH or ERC20s

0xacDF47C844Eff0Ecb218D8945e28A9A484aF8D07

1.3

Sushiswap Add

Add liquidity to any liquidity pool on Sushiswap using just ETH or ERC20s

0xfF350eDc2242Ca4d7252A64746aec4A5487a852B

2.0

Sushiswap Remove

Remove liquidity from any liquidity pool on Sushiswap and recieve ETH or ERC20s

0xf12CAB7Acaa14Eed3bEa82199ea2f5c2C2194B81

1.0

Deprecated

Contract

Description

Address

Uniswap V1 <> Uniswap V1 Pool Pipe

Re-balance liquidity between Uniswap V1 liquidity pools

0xaecCd58001D52B4b931FD6FD5bF87D4F911100B7

Curve <> Curve Pool Pipe

Re-balance liquidity between liquidity pools on Curve

0x83c32BF929F80e404ff30Ede7333271460b13cd9

Multi-Pool Uniswap V1

Add Liquidity Multiple Uniswap V1 Pools at the same time

0x7f1cd65679d73EB98fcEBe8b61C13d3D68605717

Uniswap V1 <> Curve Pool Pipe

Re-balance liquidity between Uniswap V1 & Curve liquidity pools

0x66895417881B1d77Ca71bd9e5Ba1E729f3Aa44D3

Uniswap V1 <> Uniswap V2 Pool Pipe

Re-balance liquidity between Uniswap V1+V2 pools

0x6d313883c6db5ea58bdd5546f403f1fe27e92690

Uniswap V1 Add 1.1

Add liquidity to any liquidity pool on Uniswap V1 using just ETH

0x606563f8DC27F316b77F22d14D9Cd025B4F70469

Uniswap V1 Add ETH

Add liquidity to any liquidity pool on Uniswap V1 using just ETH

0x97402249515994Cc0D22092D3375033Ad0ea438A

Uniswap V1 Add ERC20

Add liquidity to any liquidity pool on Uniswap V1 using using just ERC20 token

0x4f026054B9C934D92cD2db344ea1ae193A22067d

Uniswap V2 Add 1.0

Add liquidity to any liquidity pool on Uniswap V2 using just ETH

0x026BdaC2F308C0109A864138CCa1a623F7828F4a

Uniswap V1 Remove 1.0

Remove liquidity from any liquidity pool on Uniswap V1 & receive just ETH or any ERC20

0x4316e3aD83ca2Cf0ea5e3b25e3DE2fA7F93cfE9c

Uniswap V1 Add 1.0

Add liquidity to any liquidity pool on Uniswap V1 using any ERC20 token

0xF0cd9981F15695324763A06869d1c1DD90073C2A

Balancer Add 1.1

Add liquidity to Balancer pools using just ETH or just ERC20s

0x727412DB12fED07386235D1474257Dc15302CCE5

Balancer Add 1.0

Add liquidity to Balancer pools using just ETH or just ERC20s

0x85560d8ee2e714e60645f887dd4133ee0479b362

Balancer Add 2.0

Add liquidity to Balancer pools using just ETH or just ERC20s

0x03E86D24C462fa6aD88568053361186E4A5aF68e

Balancer Remove 1.0

Remove liquidity from Balancer pools & get back just ETH or just any ERC20

0x35B9Ae15EEb12eA934942a36754192A9Bb219742

Balancer Remove 1.1

Remove liquidity from Balancer pools & get back just ETH or just any ERC20

0x5CCb8c39bF68612C7997Cbc498ae55908D32d223

Curve Add 1.0

Add liquidity to Curve Pools using just ETH or just ERC20s

0x924Cc11Fd506fcE3dAB461AA71a6bb823669EcE3

Curve Remove 1.0

Remove liquidity from any Curve pool & receive just ETH or any ERC20

0x983dd5dc5a99ec27bb850b865ca99407b38722bf

yVault Zap In+Out

Add or remove liquidity from any Yearn Vault.

0x02e75fE4E8f8531421ee22f4560664685c3f07DE

Balancer Remove 2

0x5CCb8c39bF68612C7997Cbc498ae55908D32d223

yVault Zap In+Out 1.1

0x02e75fE4E8f8531421ee22f4560664685c3f07DE

Balancer Remove 2.1

0xF2a5d7D059A9ee3c7622218DB491495517fd619B

yVault Zap In+Out 1.2

0xcAde5569Bd2946db60F23624956d209ae903De4D

yVault Zap In+Out 1.3

0xf8C8D0C5547bD213b1DD281a4F61be9a9feED87B

Usage example (Curve<>Curve Pool Pipe)

Swap 5 CRV tokens (sUSD) for y Curve tokens

import Web3 from "web3";
// A copy of the contract ABI is required
import curveCurvePipeABI from "../curveCurvePipe.json";
import ERC20ABI from "../ERC20.json"
const web3 = new Web3(provider.wallet.provider);
const address = provider.address;
const curveCurvePipeAddress = '0x66895417881B1d77Ca71bd9e5Ba1E729f3Aa44D3';
const curveCurvePipeContract = new web3.eth.Contract(curveCurvePipeABI, curveCurvePipeAddress);
const crvTokenContract = new web3.eth.Contract(ERC20ABI, fromCurveTokenAddress);
const valueToSend = (5 * 10 ** 18).toFixed(0); //Sending 5 CRV tokens
const tx = await curveCurvePipeContract.methods.Curve2Curve(
address,
"a5407eae9ba41422680e2e00537571bcc53efbfd", //sUSD curve pool
valueToSend,
"bbc81d23ea2c3ec7e56d39296f0cbb648873a5d3" //y Curve pool
);
const allowance = await getAllowance(web3, fromCurveTokenAddress, address, curveCurvePipeAddress);
if (allowance < value) {
const approvalAmount = '100000000000000000000';
let approveTx = await crvTokenContract.methods.approve(
curveCurvePipeAddress,
web3.utils.toWei(approvalAmount, 'ether')
);
approveTx
.send({
from: address,
gasPrice,
})
.on('transactionHash', async (txHash) => {
await sendTransaction(address, 0, tx, gasPrice, 2000000); // Rely on nonce for tx ordering to avoid waiting for approval to confirm
});
} else await sendTransaction(address, 0, tx, gasPrice); // Contract already has approval, gas estimates will not fail
};