OLIM

Description:

ERC20 token contract with Factory capabilities. Standard implementation for fungible tokens on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "olim1.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\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
interface IUniswapV2Factory {\r
    function createPair(address tokenA, address tokenB) external returns (address pair);\r
    function getPair(address tokenA, address tokenB) external view returns (address pair);\r
}\r
\r
interface IUniswapV2Router02 {\r
    function factory() external pure returns (address);\r
    function WETH() external pure returns (address);\r
    function addLiquidityETH(\r
        address token,\r
        uint amountTokenDesired,\r
        uint amountTokenMin,\r
        uint amountETHMin,\r
        address to,\r
        uint deadline\r
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\r
}\r
\r
library SafeMath {\r
    function add(uint256 a, uint256 b) internal pure returns (uint256) {\r
        uint256 c = a + b;\r
        require(c >= a, "SafeMath: addition overflow");\r
        return c;\r
    }\r
\r
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\r
        return sub(a, b, "SafeMath: subtraction overflow");\r
    }\r
\r
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\r
        require(b <= a, errorMessage);\r
        uint256 c = a - b;\r
        return c;\r
    }\r
\r
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\r
        if (a == 0) {\r
            return 0;\r
        }\r
        uint256 c = a * b;\r
        require(c / a == b, "SafeMath: multiplication overflow");\r
        return c;\r
    }\r
\r
    function div(uint256 a, uint256 b) internal pure returns (uint256) {\r
        return div(a, b, "SafeMath: division by zero");\r
    }\r
\r
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\r
        require(b > 0, errorMessage);\r
        uint256 c = a / b;\r
        return c;\r
    }\r
}\r
\r
contract OLIM is IERC20 {\r
    using SafeMath for uint256;\r
\r
    string public constant name = "0lim";\r
    string public constant symbol = "OLIM";\r
    uint8 public constant decimals = 18;\r
    uint256 private _totalSupply = 1000000 * 10**decimals; // 1M tokens\r
\r
    // Hardcoded addresses\r
    address private constant DEV_WALLET = 0xEfdD82749A68F1AA32Eca5e5Ace325C92528A7d7;\r
    address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Mainnet\r
    address private constant UNISWAP_V2_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; // Mainnet\r
    \r
    // State variables\r
    address public uniswapV2Pair;\r
    address public owner;\r
    bool public tradingOpen = false;\r
    \r
    mapping(address => uint256) private _balances;\r
    mapping(address => mapping(address => uint256)) private _allowances;\r
    mapping(address => bool) public isExemptFromRestrictions;\r
\r
    IUniswapV2Router02 public immutable uniswapV2Router;\r
\r
    event TradingOpened();\r
    event PairCreated(address indexed pair);\r
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\r
\r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "Not the owner");\r
        _;\r
    }\r
\r
    modifier tradingOpenOrExempt() {\r
        require(tradingOpen || isExemptFromRestrictions[msg.sender], "Trading not open");\r
        _;\r
    }\r
\r
    constructor() {\r
        owner = msg.sender;\r
        uniswapV2Router = IUniswapV2Router02(UNISWAP_V2_ROUTER);\r
        \r
        // Create Uniswap pair\r
        uniswapV2Pair = IUniswapV2Factory(UNISWAP_V2_FACTORY).createPair(\r
            address(this),\r
            uniswapV2Router.WETH()\r
        );\r
        \r
        emit PairCreated(uniswapV2Pair);\r
\r
        // Set exemptions\r
        isExemptFromRestrictions[owner] = true;\r
        isExemptFromRestrictions[address(this)] = true;\r
        isExemptFromRestrictions[DEV_WALLET] = true;\r
\r
        // Allocate tokens\r
        _balances[owner] = _totalSupply;\r
        emit Transfer(address(0), owner, _totalSupply);\r
    }\r
\r
    function totalSupply() public view 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 tradingOpenOrExempt returns (bool) {\r
        _transfer(msg.sender, recipient, amount);\r
        return true;\r
    }\r
\r
    function allowance(address owner_addr, address spender) public view override returns (uint256) {\r
        return _allowances[owner_addr][spender];\r
    }\r
\r
    function approve(address spender, uint256 amount) public override returns (bool) {\r
        _approve(msg.sender, spender, amount);\r
        return true;\r
    }\r
\r
    function transferFrom(address sender, address recipient, uint256 amount) \r
        public override tradingOpenOrExempt returns (bool) {\r
        _transfer(sender, recipient, amount);\r
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));\r
        return true;\r
    }\r
\r
    function _transfer(address sender, address recipient, uint256 amount) internal {\r
        require(sender != address(0), "ERC20: transfer from the zero address");\r
        require(recipient != address(0), "ERC20: transfer to the zero address");\r
\r
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");\r
        _balances[recipient] = _balances[recipient].add(amount);\r
        \r
        emit Transfer(sender, recipient, amount);\r
    }\r
\r
    function _approve(address owner_addr, address spender, uint256 amount) internal {\r
        require(owner_addr != address(0), "ERC20: approve from the zero address");\r
        require(spender != address(0), "ERC20: approve to the zero address");\r
\r
        _allowances[owner_addr][spender] = amount;\r
        emit Approval(owner_addr, spender, amount);\r
    }\r
\r
    function openTrading() external onlyOwner {\r
        require(!tradingOpen, "Trading is already open");\r
        tradingOpen = true;\r
        emit TradingOpened();\r
    }\r
\r
    function closeTrading() external onlyOwner {\r
        tradingOpen = false;\r
    }\r
\r
    function setExemptFromRestrictions(address account, bool exempt) external onlyOwner {\r
        isExemptFromRestrictions[account] = exempt;\r
    }\r
\r
    function transferOwnership(address newOwner) external onlyOwner {\r
        require(newOwner != address(0), "New owner is the zero address");\r
        emit OwnershipTransferred(owner, newOwner);\r
        owner = newOwner;\r
    }\r
\r
    function withdrawETH() external onlyOwner {\r
        payable(owner).transfer(address(this).balance);\r
    }\r
\r
    receive() external payable {}\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": []
  }
}}

Tags:
ERC20, Token, Factory|addr:0x8fce42577c1ec136e393b03e7035274aed1a2904|verified:true|block:23393120|tx:0x49490147436da6dbca98397af41095311b14f3e14c7add9a1fb5925dc1df00bd|first_check:1758275150

Submitted on: 2025-09-19 11:45:51

Comments

Log in to comment.

No comments yet.