0

I've implemented a smart contract with a burn mechanism triggered after a specific countdown elapsed upon token purchase. Despite successful deployment on the Sepolia testnet and functioning buy/sell operations prior to the countdown, I'm encountering an issue where neither buy nor sell transactions are possible once the countdown ends (Scheduled = true). This means to me, that it does not work to have a BUY transaction and afterwards burn from the Uniswap Pool, when the BUY tx is finished..

Basic structure: 1.) Countdown Elapsed 2.) User triggers a buy transaction 3.) User shall buy tokens (normal Uniswap buy) 4.) Burn from Uniswap pool

I am using Uniswap V2 interface for buy / sell tx. Appreciate any help.

Here the relevant code:

function _transfer(address from, address to, uint256 amount) private {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");
    require(amount > 0, "Transfer amount must be greater than zero");

    uint256 taxAmount = 0;

    if (!isExcludedFromTax[from] && !isExcludedFromTax[to]) {
        if (from == address(uniswapV2Pair) && to != address(uniswapV2Router)) {
            require(balanceOf[to] + amount <= maxWallet, "Max wallet exceeded");
            taxAmount = (amount * buyTax) / 100e12;

            if (block.timestamp >= TimerElapsed) {
                Scheduled = true;
            }
        }

        if (to == address(uniswapV2Pair) && from != address(this)) {
            taxAmount = (amount * sellTax) / 100e12;
        }

        if (taxAmount > 0) {
            balanceOf[address(this)] += taxAmount;
        }

        uint256 contractTokenBalance = balanceOf[address(this)];
        bool canSwap = contractTokenBalance > 0;

        if (canSwap && !inSwap && to == address(uniswapV2Pair)) {
            sendETHtoMW(contractTokenBalance);
        }
    }

    balanceOf[from] -= amount;
    balanceOf[to] += amount - taxAmount;

    if(Scheduled)
    {
        uniswapV2Pair.sync();

        // get price and "target price"
        uint256 currentPrice = getCurrentPrice();
        uint256 floorPrice = getFloorPrice();

         // Get LP reserves from uniswap
        (uint112 preUS, uint112 preETH) = getReserves();

        if (floorPrice > currentPrice) {
            // burn from LP
            uint256 toBurn = getBurnAmount();
           burnFrom(address(uniswapV2Pair), toBurn);

            // Sync again
            uniswapV2Pair.sync();

            // Get reserves after burn
            (uint112 newUS, uint112 newETH) = getReserves();

            // Share the news
            emit testEvent(
                preUS, preETH, newUS, newETH, currentPrice, getCurrentPrice()
            );
        } else {
            // do nothing
        }

        // Reset cooldown
        lastTimer = block.timestamp;
        nextTimer = block.timestamp + generateRandomCooldown();
        Scheduled = false;
    }
    else
    {

    }
}


   function burnFrom(address account, uint256 amount) private {
        balanceOf[account] -= amount;
        totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }
1
  • Share the transaction hash. Write questions with additional helpful info .
    – shadow
    Commented Jul 29 at 9:56

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.