I am attempting to create a test arbitrage bot using Uniswap & SushiSwap.
I can successfully get the amount of X tokens I would get for 1 WETH on both dexes. For example:
Uniswap: WETH / USDT 1704.93153
Sushi Swap: WETH / USDT 1701.745783
To do this I am using the `getAmountsIn` method and passing in 1 WETH.
async getBuyPrice() {
const pathToBuy = await this.routerContract.methods
// getAmountsIn already includes Uniswap & SushiSwap fees in the calculation
.getAmountsIn(this.swapAmount, [this.swapTo, this.swapFrom])
.call();
// TODO: modify the / 1e12 on a per token basis
return Math.floor(ethers.utils.parseUnits(pathToBuy[0], this.swapToDecimal) * 100) / 100 / 1e12;
}
I then do a simple profit calculation of
if (uniswapPrice > sushiswapPrice) {
return Math.abs(sushiswapPrice - uniswapPrice);
}
With these basic calculations I get outputs like:
estimated profit on trade WETH/ USDT 3.185746999999992
My issue comes when I want to then take away the TX costs from the profit including gas fees.
I get the gas price back with:
let gasPrice;
await web3.eth.getGasPrice().then((result) => {
gasPrice = web3.utils.fromWei(result, 'ether');
});
gas price in Eth 0.000000013596475603
However, this gives me the gas price in Eth whereas `getAmountsIn` allows me to calculate the profit in the token I am attempting to swap, for example 3.1 USDT.
Would I then need to convert `WETH/ USDT 3.185746999999992` into Eth and minus TX fees to work out the true profit? I'm quite new to all of this so am unsure.
Thanks!