sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
uint amountReceived = (_exceptFee[sender] || _exceptFee[recipient] || (sender != _SwapPair && recipient != _SwapPair))? amount : takeFee(sender, amount);
unchecked {
_balances[sender] = senderBalance - amountReceived;
}
_balances[recipient] += amountReceived;
emit Transfer(sender, recipient, amountReceived);
_afterTokenTransfer(sender, recipient, amountReceived);
}
function takeFee(address sender, uint256 amount) internal returns (uint256) {
uint256 feeAmount = (amount*_buySellFee)/(feeDenominator * 100);
uint256 senderBalance = _balances[sender];
unchecked {
_balances[sender] = senderBalance - feeAmount;
}
_balances[_feeReceiver] += feeAmount;
emit Transfer(sender, _feeReceiver, feeAmount);
return (amount-feeAmount);
}
Не знаю насколько удобно будет здесь это смотреть, но логика в том что если получатель/отправитель не пара и не освобожден от комиссии, то мы пересылаем комиссию которая расчитывается в takefee() на кошелек для комиссий. Вроде логика верная и в одну сторону работает, а вот при продаже токенов транзакция не проходит
sender != _SwapPair && recipient != _SwapPair Разве здесь не должно быть наоборот? Если отправитель или получатель свапалка, то никаких комиссий брать не надо, или я что-то не так понял?
А чему у тебя _buySellFee и feeDenominator равен?
неа, как раз на свап комиссия должна быть
так он берет фи со сваполки как раз
а что значит не работает? какие симптомы?
_buyselfee = комиссия *100 Denominator = 100
А, я почему-то подумал что за транзакции берется комса
свап в одну сторону проходит только, а если токен продать пытаемся, то падает
А что пишет в ошибке?
А "комиссия" у тебя сколько?
Обсуждают сегодня