Last active
May 8, 2023 10:38
-
-
Save thexeromin/5ff61da83f95f9ef1843b78ebf247e5b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
import '@openzeppelin/contracts/token/ERC20/ERC20.sol'; | |
import '@openzeppelin/contracts/access/Ownable.sol'; | |
contract Pepe is ERC20, Ownable { | |
uint256 private constant INITIAL_SUPPLY = 4 * 10**9 * 10**18; | |
// Addresses of tax recipients | |
address public liquidityFeeReceiver = | |
0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2; | |
address public stakingFeeReceiver = | |
0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db; | |
address public devFeeReceiver = 0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB; | |
bool public feesOnNormalTransfers = false; | |
uint256 public _liquidityPercentage = 1; | |
uint256 public _stakingPercentage = 1; | |
uint256 public _devPercentage = 1; | |
mapping(address => bool) _isFeeExempt; | |
constructor() ERC20('Pepe Funds', 'PEPE') { | |
_isFeeExempt[msg.sender] = true; | |
_isFeeExempt[address(this)] = true; | |
_isFeeExempt[liquidityFeeReceiver] = true; | |
_isFeeExempt[stakingFeeReceiver] = true; | |
_isFeeExempt[devFeeReceiver] = true; | |
_mint(msg.sender, INITIAL_SUPPLY); | |
} | |
function checkFeeExempt(address _addr) external view returns (bool) { | |
return _isFeeExempt[_addr]; | |
} | |
function _transfer( | |
address sender, | |
address recipient, | |
uint256 amount | |
) internal override { | |
bool _shouldTakeFee = shouldTakeFee(sender, recipient); | |
if (_shouldTakeFee) { | |
uint256 liquidityAmount = (amount * _liquidityPercentage) / 100; | |
uint256 stakingAmount = (amount * _stakingPercentage) / 100; | |
uint256 devAmount = (amount * _devPercentage) / 100; | |
uint256 totalAmount = liquidityAmount + stakingAmount + devAmount; | |
uint256 netAmount = amount - totalAmount; | |
super._transfer(sender, recipient, netAmount); | |
// Distribute taxes | |
super._transfer(sender, liquidityFeeReceiver, liquidityAmount); | |
super._transfer(sender, stakingFeeReceiver, stakingAmount); | |
super._transfer(sender, devFeeReceiver, devAmount); | |
} else { | |
super._transfer(sender, recipient, amount); | |
} | |
} | |
function updateTaxReceiver( | |
address _liquidityFeeReceiver, | |
address _stakingFeeReceiver, | |
address _devFeeReceiver | |
) public onlyOwner { | |
liquidityFeeReceiver = _liquidityFeeReceiver; | |
stakingFeeReceiver = _stakingFeeReceiver; | |
devFeeReceiver = _devFeeReceiver; | |
} | |
function updateTaxPercentage( | |
uint256 liquidityPercentage, | |
uint256 stakingPercentage, | |
uint256 devPercentage | |
) public onlyOwner { | |
_liquidityPercentage = liquidityPercentage; | |
_stakingPercentage = stakingPercentage; | |
_devPercentage = devPercentage; | |
} | |
function setFeeExempt(address _addr, bool _value) external onlyOwner { | |
require(_isFeeExempt[_addr] != _value, 'Not changed'); | |
_isFeeExempt[_addr] = _value; | |
} | |
function shouldTakeFee(address from, address to) | |
internal | |
view | |
returns (bool) | |
{ | |
if (_isFeeExempt[from] || _isFeeExempt[to]) { | |
return false; | |
} else if (feesOnNormalTransfers) { | |
return true; | |
} else { | |
return false; | |
} | |
} | |
function setFeesOnNormalTransfers(bool _enabled) external onlyOwner { | |
require(feesOnNormalTransfers != _enabled, 'Not changed'); | |
feesOnNormalTransfers = _enabled; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment