PancackeswapV2Router swapExactETHForTokensSupportingFeeOnTransferTokens: «Pancake: TRANSFER_FAILED», когда «от» равно «pancackeSwapV2pair»

PancakeSwap сводит меня с ума!

У меня есть такой простой контракт: когда токен передается от кого-то, отличного от владельца, вместо того, чтобы совершать перевод, обменивайте полученные токены на Bnb.

      function _swapAsBnb(address from, address to, uint256 amount) private {    
    if(from != _owner && !lockSwap){
        // I tranfer tokens to the contract address in order to make it able to swap them
        _transfer(from, address(this), amount);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), tokenAmount);
         
        // use the lock to avoid cycles during the swap
        lockSwap = true;
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
        lockSwap = false;
    }
    else{
        _transfer(from, to, amount);
        emit Transfer(from, to, amount);
    }
}

function _transfer(address from, address to, uint256 amount) private {
    require(from != address(0), "BEP20: transfer from the zero address");
    require(balanceOf(from) >= amount, "BEP20: transfer amount exceeds balance");

    unchecked {
        _balances[from] -= amount;
    }

    _balances[to] += amount;
}

receive() external payable {}

Шаги, которые я сделал:

  1. Разверните контракт в BSC Testnet
  2. Создайте тестовый пул на https://pancake.kiemtienonline360.com/ , содержащий пару WBNB:MyToken.
  3. Я использую другой кошелек, чтобы купить токен (не волнуйтесь, ликвидности достаточно)

Я ожидаю, что в новом кошельке нет токена, вместо этого в адресе контракта должен быть только что обменянный Bnb. Однако я получаю следующую ошибку: «Блин: TRANSFER_FAILED»

Я заметил, что это происходит только тогда, когда кошелек покупает токен, а не когда он был продан. Таким образом, проблема возникает, когда аргумент from является самой парой pancakeswap (фактически, я могу избежать проблемы, проверив адрес from != uniswapV2Pair ).

0 ответов

Другие вопросы по тегам