Created
November 28, 2021 04:10
-
-
Save korrio/77c9861cf9742c2c5016f9786759f700 to your computer and use it in GitHub Desktop.
Artbitrage_nov.sol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity 0.6.12; | |
interface IMyRouterInterface { // UniswapV2Interface | |
function swapExactTokensForTokens( | |
uint amountIn, | |
uint amountOutMin, | |
address[] calldata path, | |
address to, | |
uint deadline | |
) external returns (uint[] memory amounts); | |
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); | |
} | |
interface IERC20 { | |
function approve(address spender, uint256 amount) external returns (bool); | |
function transfer(address recipient, uint256 amount) external returns (bool); | |
function balanceOf(address account) external view returns (uint256); | |
} | |
contract Arbitrage { | |
address public routerA; | |
address public routerB; | |
address public BUSD; | |
address public BNB; | |
address[] public path; | |
constructor () public { | |
routerA = address(0x91f5b34D3600D2630F6A37dd7F41666b63975BEC); | |
routerB = address(0x458134fDB03ee63035b48BD07Ae39b799C1991CB); | |
BUSD = address(0x62fA3d49518010d43FAf3101909730645Da488F1); | |
BNB = address(0x7f014543C001a0F616c466ba6C3f2641D11a731c); | |
} | |
function execArtbitrage(uint bnbAmount,uint busdAmount) public { | |
uint bnbPriceAtA = checkPriceAtRouterA(bnbAmount); | |
uint bnbPriceAtB = checkPriceAtRouterB(bnbAmount); | |
if(bnbPriceAtB > bnbPriceAtA) { // BNB B 600 > BNB A 500 | |
uint bnbAmountRecieved = swapAtRouterA(busdAmount); | |
uint busdAmountRecieved = swapAtRouterB(bnbAmountRecieved); | |
uint profit = busdAmountRecieved - busdAmount; | |
IERC20(BUSD).transfer(msg.sender,profit); | |
} | |
} | |
function withdrawBUSD() public { | |
IERC20 theBUSD = IERC20(BUSD); | |
theBUSD.transfer(msg.sender,theBUSD.balanceOf(address(this))); | |
} | |
function checkPriceAtRouterA(uint bnbAmount) public view returns(uint) { | |
uint[] memory amounts = IMyRouterInterface(routerA).getAmountsOut(bnbAmount,path); | |
return amounts[1]; | |
} | |
function checkPriceAtRouterB(uint bnbAmount) public view returns(uint) { | |
uint[] memory amounts = IMyRouterInterface(routerB).getAmountsOut(bnbAmount,path); | |
return amounts[1]; | |
} | |
function swapAtRouterA(uint busdAmount) public returns (uint) { // BUSD -> BNB | |
path = [BUSD,BNB]; | |
IERC20(BUSD).approve(address(this),busdAmount); | |
uint[] memory amountsOut = IMyRouterInterface(routerA).getAmountsOut(busdAmount,path); | |
uint[] memory amountsBNB = IMyRouterInterface(routerA).swapExactTokensForTokens(busdAmount,amountsOut[1],path,address(this),block.timestamp); | |
return amountsBNB[1]; | |
} | |
function swapAtRouterB(uint bnbAmount) public returns (uint) { // BNB -> BUSD | |
path = [BNB,BUSD]; | |
IERC20(BNB).approve(address(this),bnbAmount); | |
uint[] memory amountsOut = IMyRouterInterface(routerB).getAmountsOut(bnbAmount,path); | |
uint[] memory amountsBUSD = IMyRouterInterface(routerB).swapExactTokensForTokens(bnbAmount,amountsOut[1],path,address(this),block.timestamp); | |
return amountsBUSD[1]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment