Token
0x2d84efff58f43ae168125eadb6aebc35426b9b29
Verification
Verified
v0.8.35+commit.47b9dedd
Type
Contract
6,682 bytes
ABI entries
31
12 read · 8 write
License
none
Contract information
- Address
- 0x2d84efff58f43ae168125eadb6aebc35426b9b29
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.35+commit.47b9dedd
- Optimization
- Enabled
- Creator
- 0x70BEEA5C1A…53C238ec9a
- Creation tx
- 0x61740ebb45…4e82ece3a1
Token
- Name
- PACMAN
- Symbol
- PACMAN
- Decimals
- 18
- Holders
- 42
- Market
- View token page →
Read contract (12)
LAUNCH_PERIOD() → uint256
allowance(address, address) → uint256
balanceOf(address) → uint256
creator() → address
decimals() → uint8
details() → tuple
isLaunchPeriodActive() → bool
name() → string
owner() → address
platform() → address
symbol() → string
totalSupply() → uint256
Events (3)
ApprovalFeesReceivedTransfer
ABI
[
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"internalType": "address",
"name": "_creator",
"type": "address"
},
{
"internalType": "address",
"name": "_platform",
"type": "address"
},
{
"internalType": "uint256",
"name": "_launchPeriod",
"type": "uint256"
},
{
"internalType": "address",
"name": "_pool",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "FeesReceived",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "LAUNCH_PERIOD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "burnFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newCreator",
"type": "address"
}
],
"name": "changeCreator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "creator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "details",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "website",
"type": "string"
},
{
"internalType": "string",
"name": "twitter",
"type": "string"
},
{
"internalType": "string",
"name": "telegram",
"type": "string"
}
],
"internalType": "struct TokenDetails",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isLaunchPeriodActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "platform",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "description",
"type": "string"
},
{
"internalType": "string",
"name": "website",
"type": "string"
},
{
"internalType": "string",
"name": "twitter",
"type": "string"
},
{
"internalType": "string",
"name": "telegram",
"type": "string"
}
],
"internalType": "struct TokenDetails",
"name": "tokenDetails",
"type": "tuple"
}
],
"name": "setDetails",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdrawFees",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
]Source code
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
struct TokenDetails {
string description;
string website;
string twitter;
string telegram;
}
contract Token is ERC20, ERC20Burnable {
address public platform;
address public creator;
address private _owner;
uint256 private launchBlock;
uint256 private maxTxAmount;
uint256 public immutable LAUNCH_PERIOD;
uint256 private immutable ACTIVE_PERIOD;
uint256 private constant MAX_WALLET_PERCENTAGE = 2;
address immutable pool;
mapping(address => uint256) private tokensFromPoolPerOrigin;
TokenDetails private _details;
event FeesReceived(uint256 amount);
constructor(
string memory _name,
string memory _symbol,
address _creator,
address _platform,
uint256 _launchPeriod,
address _pool
) ERC20(_name, _symbol) {
platform = _platform;
creator = _creator;
_owner = address(0);
launchBlock = block.number;
LAUNCH_PERIOD = _launchPeriod;
ACTIVE_PERIOD = _launchPeriod == 0
? 0
: (_launchPeriod / 2)
+ (uint256(keccak256(abi.encodePacked(block.prevrandao, block.number, address(this))))
% (_launchPeriod - _launchPeriod / 2 + 1));
pool = _pool;
uint256 totalTokens = 1000000000 * 10 ** decimals();
maxTxAmount = (totalTokens * MAX_WALLET_PERCENTAGE) / 100;
_mint(_platform, totalTokens);
}
function _update(address from, address to, uint256 value) internal override {
if (block.number > launchBlock && block.number <= launchBlock + ACTIVE_PERIOD) {
if (from == pool && to != platform && to != creator) {
tokensFromPoolPerOrigin[tx.origin] += value;
require(
tokensFromPoolPerOrigin[tx.origin] <= maxTxAmount*110/100,
"Keeping 2% pool Limits In Kontrol"
);
}
if (to != creator && to != platform && to != pool && from != address(0)) {
require(
balanceOf(to) + value <= maxTxAmount,
"Max wallet limit exceeded during launch period"
);
}
}
if (block.number == launchBlock &&
from != address(0) &&
to != platform &&
from != platform &&
!(from == platform && to == creator)) {
revert("No buys allowed during launch block!");
}
super._update(from, to, value);
}
function isLaunchPeriodActive() public view returns (bool) {
return block.number <= launchBlock + ACTIVE_PERIOD;
}
function owner() public view returns (address) {
return _owner;
}
receive() external payable {
emit FeesReceived(msg.value);
}
function withdrawFees() external returns (uint256 balance) {
require(msg.sender == platform, "Only factory can withdraw");
balance = address(this).balance;
require(balance > 0, "No fees to withdraw");
(bool success, ) = payable(platform).call{value: balance}("");
require(success, "Fee withdrawal failed");
}
function changeCreator(address newCreator) external {
require(msg.sender == platform, "Only platform can change creator");
creator = newCreator;
}
function setDetails(TokenDetails memory tokenDetails) external {
require(msg.sender == platform, "Only platform can set details");
_details = tokenDetails;
}
function details() external view returns (TokenDetails memory) {
return _details;
}
}
Chain explorer3112msChain node82ms