ghost-dao-interface/src/hooks/uniswapv2/UniswapV2Router.js
Uncle Fatso 5dc0bb3a1b
unite onchain tx as one function with gas sanitization
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
2026-04-27 21:54:48 +03:00

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