186 lines
4.4 KiB
JavaScript
186 lines
4.4 KiB
JavaScript
import toast from "react-hot-toast";
|
|
|
|
import { UNISWAP_V2_ROUTER, WETH_ADDRESSES } from "../../constants/addresses";
|
|
import { abi as RouterAbi } from "../../abi/UniswapV2Router.json";
|
|
import { getTokenAddress, executeOnChainTransaction } from "../helpers";
|
|
|
|
const swapMessages = {
|
|
replacedMsg: "Swap transaction was replaced. Wait for inclusion please.",
|
|
successMsg: "Swap executed successfully! Wait for balances update.",
|
|
errorMsg: "Swap tokens failed. Check logs for error detalization.",
|
|
};
|
|
|
|
const addMessages = {
|
|
replacedMsg: "Add liquidity transaction was replaced. Wait for inclusion please.",
|
|
successMsg: "Liquidity added successfully! You should get LP tokens to your wallet.",
|
|
errorMsg: "Adding liquidity failed. Check logs for error detalization.",
|
|
};
|
|
|
|
export const swapExactETHForTokens = async ({
|
|
chainId,
|
|
amountADesired,
|
|
amountBMin,
|
|
tokenNameTop,
|
|
tokenNameBottom,
|
|
destination,
|
|
address,
|
|
deadline
|
|
}) => {
|
|
const args = [
|
|
amountBMin,
|
|
[WETH_ADDRESSES[chainId], getTokenAddress(chainId, tokenNameBottom)],
|
|
destination,
|
|
deadline
|
|
];
|
|
|
|
await executeOnChainTransaction({
|
|
chainId,
|
|
args,
|
|
abi: RouterAbi,
|
|
address: UNISWAP_V2_ROUTER[chainId],
|
|
functionName: "swapExactETHForTokens",
|
|
account: address,
|
|
messages: swapMessages,
|
|
value: amountADesired,
|
|
});
|
|
}
|
|
|
|
export const swapExactTokensForETH = async ({
|
|
chainId,
|
|
amountADesired,
|
|
amountBMin,
|
|
tokenNameTop,
|
|
tokenNameBottom,
|
|
destination,
|
|
address,
|
|
deadline
|
|
}) => {
|
|
const args = [
|
|
amountADesired,
|
|
amountBMin,
|
|
[getTokenAddress(chainId, tokenNameTop), WETH_ADDRESSES[chainId]],
|
|
destination,
|
|
deadline
|
|
];
|
|
|
|
await executeOnChainTransaction({
|
|
chainId,
|
|
args,
|
|
abi: RouterAbi,
|
|
address: UNISWAP_V2_ROUTER[chainId],
|
|
functionName: "swapExactTokensForETH",
|
|
account: address,
|
|
messages: swapMessages,
|
|
});
|
|
}
|
|
|
|
export const swapExactTokensForTokens = async ({
|
|
chainId,
|
|
amountADesired,
|
|
amountBMin,
|
|
tokenNameTop,
|
|
tokenNameBottom,
|
|
destination,
|
|
address,
|
|
deadline
|
|
}) => {
|
|
const args = [
|
|
amountADesired,
|
|
amountBMin,
|
|
[getTokenAddress(chainId, tokenNameTop), getTokenAddress(chainId, tokenNameBottom)],
|
|
destination,
|
|
deadline
|
|
];
|
|
|
|
await executeOnChainTransaction({
|
|
chainId,
|
|
args,
|
|
abi: RouterAbi,
|
|
address: UNISWAP_V2_ROUTER[chainId],
|
|
functionName: "swapExactTokensForTokens",
|
|
account: address,
|
|
messages: swapMessages,
|
|
});
|
|
}
|
|
|
|
export const addLiquidity = async ({
|
|
chainId,
|
|
tokenNameTop,
|
|
tokenNameBottom,
|
|
amountADesired,
|
|
amountBDesired,
|
|
amountAMin,
|
|
amountBMin,
|
|
address,
|
|
destination,
|
|
deadline,
|
|
}) => {
|
|
const args = [
|
|
getTokenAddress(chainId, tokenNameTop),
|
|
getTokenAddress(chainId, tokenNameBottom),
|
|
amountADesired,
|
|
amountBDesired,
|
|
amountAMin,
|
|
amountBMin,
|
|
destination,
|
|
deadline
|
|
];
|
|
|
|
await executeOnChainTransaction({
|
|
chainId,
|
|
args,
|
|
abi: RouterAbi,
|
|
address: UNISWAP_V2_ROUTER[chainId],
|
|
functionName: "addLiquidity",
|
|
account: address,
|
|
messages: addMessages,
|
|
});
|
|
}
|
|
|
|
export const addLiquidityETH = async ({
|
|
chainId,
|
|
tokenNameTop,
|
|
tokenNameBottom,
|
|
amountADesired,
|
|
amountBDesired,
|
|
amountAMin,
|
|
amountBMin,
|
|
address,
|
|
destination,
|
|
deadline,
|
|
}) => {
|
|
let token = getTokenAddress(chainId, tokenNameTop);
|
|
let amountTokenDesired = amountADesired;
|
|
let amountETHDesired = amountBDesired;
|
|
let amountTokenMin = amountAMin;
|
|
let amountETHMin = amountBMin;
|
|
|
|
if (token === undefined) {
|
|
token = getTokenAddress(chainId, tokenNameBottom);
|
|
amountTokenDesired = amountBDesired;
|
|
amountETHDesired = amountADesired;
|
|
amountTokenMin = amountBMin;
|
|
amountETHMin = amountAMin;
|
|
}
|
|
|
|
const args = [
|
|
token,
|
|
amountTokenDesired,
|
|
amountTokenMin,
|
|
amountETHMin,
|
|
destination,
|
|
deadline
|
|
];
|
|
|
|
await executeOnChainTransaction({
|
|
chainId,
|
|
args,
|
|
abi: RouterAbi,
|
|
address: UNISWAP_V2_ROUTER[chainId],
|
|
functionName: "addLiquidityETH",
|
|
account: address,
|
|
messages: addMessages,
|
|
value: amountETHDesired,
|
|
});
|
|
}
|