Created
May 19, 2023 01:26
-
-
Save thexeromin/be721936ab536350d8510169c1d8fe1e 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'; | |
contract Ownable { | |
mapping(address => bool) public owner; | |
event AddedOwner(address newOwner); | |
event RemovedOwner(address removedOwner); | |
constructor() { | |
owner[msg.sender] = true; | |
} | |
modifier onlyOwner() { | |
require(owner[msg.sender], 'You are not an owner'); | |
_; | |
} | |
function addOwner(address _newOwner) public onlyOwner { | |
owner[_newOwner] = true; | |
emit AddedOwner(_newOwner); | |
} | |
function removeOwner(address _toRemove) public onlyOwner { | |
owner[_toRemove] = false; | |
emit RemovedOwner(_toRemove); | |
} | |
} | |
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) public _isFeeExempt; | |
mapping(address => bool) public blacklist; | |
constructor() ERC20('Pepe Funds', 'PEPE') { | |
_isFeeExempt[msg.sender] = true; | |
_isFeeExempt[address(this)] = true; | |
_isFeeExempt[liquidityFeeReceiver] = true; | |
_isFeeExempt[stakingFeeReceiver] = true; | |
_isFeeExempt[devFeeReceiver] = true; | |
addOwner(msg.sender); | |
_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 { | |
require(!blacklist[sender] && !blacklist[recipient], 'in_blacklist'); | |
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 updateBlacklist(address _user, bool _flag) public onlyOwner { | |
blacklist[_user] = _flag; | |
} | |
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