如何在 ERC20 或 BEP20 智能合约中添加“交易费”?

问题描述

除了通常的 ETH gas 费之外,还有“收取交易费”的新代币。我说的是从代币本身中减去的交易费用,所以可以说 100 个代币被转让 1 个代币作为“交易费”进入中央账户,其可行的代币(如 $GRUMPY)拥有它,但我无法在代码上找到允许的功能我这样做。

解决方法

也对这里感兴趣。 我有一些简单的东西,请参见下面的 _transfer 函数。 问题是它会创建 2 个交易和更多的 Gas 费用来支付。 不知道如果这样会降低费用,您是否拆分并将费用发送给合同本身。

这只是一个想法,而不是 testet。对来自社区的其他解决方案感兴趣。

function _transfer(address 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");
    
    address FeeReceiverAdr = 0xE037D395bB24C69bD0347F4e1652199BF60a41d1;
    address payable FeeReceiver = payable(FeeReceiverAdr); // Correct since Solidity >= 0.6.0
    

    _beforeTokenTransfer(sender,recipient,amount);
    
    uint bpsfee = 1618;
    uint bps = 100000;
  
    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount,"ERC20: transfer amount exceeds balance");
    _balances[sender] = senderBalance - amount;
    _balances[recipient] += taxedValue;
 

    _balances[FeeReceiver] +=  fee;
    
    emit Transfer(sender,taxedValue);
    emit Transfer(sender,FeeReceiver,fee);
}