// Обмін між двума токенами function tokenToTokenSwap(uint256 _tokensSold, uint256 _minTokensBought, address _tokenAddress) public { // Отримуємо адрес біржі другого токена address exchangeAddress = IFactory(factoryAddress).getExchange(_tokenAddress); // Перевіряємо чи адрес другої біржі не дорівнює адресу цієї а також чи не дорівнює нульовому адресу require(exchangeAddress != address(this) && exchangeAddress != address(0), "exchange not exist"); // Отримуємо кількість токенів на контракті uint256 tokenReserve = getReserve(); // Розразовуємо скільки треба заплатити ETH за обмін uint256 ethBought = getAmount(_tokensSold, tokenReserve, address(this).balance); // Переводимо токени з адреси покупця на адрес контракту IERC20(tokenAddress).transferFrom(msg.sender, address(this), _tokensSold); // Ініціюємо обмін IExchange(exchangeAddress).ethToTokenTransfer{value: ethBought}(_minTokensBought, msg.sender); }
0.7.1