📄Smart Contracts

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

Mainnet

Contract

Description

Address

Uniswap V2 Add

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

0x80c5e6908368cb9db503ba968d7ec5a565bfb389

Uniswap V2 Remove

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

0x343e3a490c9251dc0eaa81da146ba6abe6c78b2d

Uniswap V1 Remove

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

0x5e6531d99e9099cb3936c048daf6ba0b3f79b9e2

Balancer Add

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

0xA3128cC400E2878571368ae0a83F588Eb838552b

Balancer Remove

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

0x00d0f137b51692D0AC708bdE7b367a373865cFfe

Multi-Pool Uniswap V1

Add Liquidity Multiple Uniswap V1 Pools at the same time

0x7f1cd65679d73EB98fcEBe8b61C13d3D68605717

Curve Add

Add liquidity to Curve Pools using just ETH or just ERC20s

0x598089cf2a190dff39eb66e7b529f06aad93931b

Curve Remove

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

0x4bf331aa2bfb0869315fb81a350d109f4839f81b

Curve <> Curve Pool Pipe

Re-balance liquidity between liquidity pools on Curve

0x83c32BF929F80e404ff30Ede7333271460b13cd9

Uniswap V1 <> Curve Pool Pipe

Re-balance liquidity between Uniswap V1 & Curve liquidity pools

0x66895417881B1d77Ca71bd9e5Ba1E729f3Aa44D3

Uniswap V1 <> Uniswap V1 Pool Pipe

Re-balance liquidity between Uniswap V1 liquidity pools

0xaecCd58001D52B4b931FD6FD5bF87D4F911100B7

Uniswap V1 <> Uniswap V2 Pool Pipe

Re-balance liquidity between Uniswap V1+V2 pools

0x6d313883c6db5ea58bdd5546f403f1fe27e92690

Uniswap V2 <> Balancer Pool Pipe

Re-balance liquidity between Uniswap V2 and Balancer pools

0xA3149708cb9D9BD31CB5c8F5c107D94395B7bA64

yEarn Vault Add or Remove

Add or remove liquidity from yEarn Vaults

0x9c57618bfCDfaE4cE8e49226Ca22A7837DE64A2d

Zapper Swap

Multi-Exchange asset swap with ETH or ERC20s

0x2346722DAa00ebbd0fc452C0E7aB7976bDAFeae8

Deprecated

Contract

Description

Address

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

Add liquidity to Balancer pools using just ETH or just ERC20s

0x35B9Ae15EEb12eA934942a36754192A9Bb219742

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

Zapper Swap 1.0

Multi-exchange asset swap for ETH or ERC20s

0x2346722DAa00ebbd0fc452C0E7aB7976bDAFeae8

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
};