Description:
ERC20 token contract with Burnable, Factory capabilities. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"Crepe.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
abstract contract Context {\r
function _msgSender() internal view virtual returns (address) {\r
return msg.sender;\r
}\r
}\r
\r
interface IERC20 {\r
function totalSupply() external view returns (uint256);\r
function balanceOf(address account) external view returns (uint256);\r
function transfer(address recipient, uint256 amount) external returns (bool);\r
function allowance(address owner, address spender) external view returns (uint256);\r
function approve(address spender, uint256 amount) external returns (bool);\r
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\r
\r
event Transfer(address indexed from, address indexed to, uint256 value);\r
event Approval(address indexed owner, address indexed spender, uint256 value);\r
}\r
\r
abstract contract Ownable is Context {\r
address private _owner;\r
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\r
\r
constructor() {\r
_transferOwnership(_msgSender());\r
}\r
\r
function owner() public view virtual returns (address) {\r
return _owner;\r
}\r
\r
modifier onlyOwner() {\r
require(owner() == _msgSender(), "Ownable: caller is not the owner");\r
_;\r
}\r
\r
function renounceOwnership() public virtual onlyOwner {\r
_transferOwnership(address(0));\r
}\r
\r
function transferOwnership(address newOwner) public virtual onlyOwner {\r
require(newOwner != address(0), "Ownable: new owner is the zero address");\r
_transferOwnership(newOwner);\r
}\r
\r
function _transferOwnership(address newOwner) internal virtual {\r
address oldOwner = _owner;\r
_owner = newOwner;\r
emit OwnershipTransferred(oldOwner, newOwner);\r
}\r
}\r
\r
contract CrazedPEPE is Context, IERC20, Ownable {\r
string private constant _name = "Crazed PEPE";\r
string private constant _symbol = "CREPE";\r
uint8 private constant _decimals = 18;\r
uint256 private constant _totalSupply = 1_000_000_000 * 10**_decimals;\r
\r
mapping(address => uint256) private _balances;\r
mapping(address => mapping(address => uint256)) private _allowances;\r
mapping(address => bool) private _isExcludedFromLimits;\r
\r
uint256 public maxWalletAmount = _totalSupply * 2 / 100; // 2% of total supply\r
\r
constructor(address deployerAddress) {\r
require(deployerAddress != address(0), "Invalid deployer address");\r
uint256 deployerAmount = _totalSupply * 30 / 100; // 30% to deployer\r
uint256 liquidityAmount = _totalSupply - deployerAmount; // 70% stays in contract\r
\r
_balances[deployerAddress] = deployerAmount;\r
_balances[address(this)] = liquidityAmount;\r
\r
_isExcludedFromLimits[deployerAddress] = true;\r
_isExcludedFromLimits[address(this)] = true;\r
_isExcludedFromLimits[owner()] = true;\r
\r
emit Transfer(address(0), deployerAddress, deployerAmount);\r
emit Transfer(address(0), address(this), liquidityAmount);\r
}\r
\r
function name() public pure returns (string memory) {\r
return _name;\r
}\r
\r
function symbol() public pure returns (string memory) {\r
return _symbol;\r
}\r
\r
function decimals() public pure returns (uint8) {\r
return _decimals;\r
}\r
\r
function totalSupply() public pure override returns (uint256) {\r
return _totalSupply;\r
}\r
\r
function balanceOf(address account) public view override returns (uint256) {\r
return _balances[account];\r
}\r
\r
function transfer(address recipient, uint256 amount) public override returns (bool) {\r
_transfer(_msgSender(), recipient, amount);\r
return true;\r
}\r
\r
function allowance(address owner_, address spender) public view override returns (uint256) {\r
return _allowances[owner_][spender];\r
}\r
\r
function approve(address spender, uint256 amount) public override returns (bool) {\r
_approve(_msgSender(), spender, amount);\r
return true;\r
}\r
\r
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {\r
_transfer(sender, recipient, amount);\r
_approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);\r
return true;\r
}\r
\r
function _approve(address owner_, address spender, uint256 amount) private {\r
require(owner_ != address(0), "ERC20: approve from zero");\r
require(spender != address(0), "ERC20: approve to zero");\r
\r
_allowances[owner_][spender] = amount;\r
emit Approval(owner_, spender, amount);\r
}\r
\r
function _transfer(address from, address to, uint256 amount) private {\r
require(from != address(0), "ERC20: transfer from zero");\r
require(to != address(0), "ERC20: transfer to zero");\r
require(_balances[from] >= amount, "ERC20: insufficient balance");\r
\r
if (!_isExcludedFromLimits[to]) {\r
require(_balances[to] + amount <= maxWalletAmount, "Exceeds max wallet limit");\r
}\r
\r
_balances[from] -= amount;\r
_balances[to] += amount;\r
emit Transfer(from, to, amount);\r
}\r
\r
function excludeFromLimits(address account, bool excluded) external onlyOwner {\r
_isExcludedFromLimits[account] = excluded;\r
}\r
\r
function isExcludedFromLimits(address account) external view returns (bool) {\r
return _isExcludedFromLimits[account];\r
}\r
\r
function updateMaxWallet(uint256 newLimit) external onlyOwner {\r
require(newLimit >= _totalSupply / 100, "Must be >=1%");\r
maxWalletAmount = newLimit;\r
}\r
\r
function burn(uint256 amount) external {\r
require(_balances[_msgSender()] >= amount, "Insufficient balance");\r
_balances[_msgSender()] -= amount;\r
emit Transfer(_msgSender(), address(0), amount);\r
}\r
}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-11-01 10:50:57
Comments
Log in to comment.
No comments yet.