AllTokensToLPFactoryCompatible

Description:

Decentralized Finance (DeFi) protocol contract providing Mintable, Swap, Liquidity, Factory functionality.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contracts/EthereumTokenFactoryCompatible.sol": {
      "content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.30;\r
\r
interface IUniswapV3Factory {\r
    function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool);\r
    function getPool(address tokenA, address tokenB, uint24 fee) external view returns (address pool);\r
}\r
\r
interface INonfungiblePositionManager {\r
    struct MintParams {\r
        address token0;\r
        address token1;\r
        uint24 fee;\r
        int24 tickLower;\r
        int24 tickUpper;\r
        uint256 amount0Desired;\r
        uint256 amount1Desired;\r
        uint256 amount0Min;\r
        uint256 amount1Min;\r
        address recipient;\r
        uint256 deadline;\r
    }\r
\r
    struct CollectParams {\r
        uint256 tokenId;\r
        address recipient;\r
        uint128 amount0Max;\r
        uint128 amount1Max;\r
    }\r
\r
    function mint(MintParams calldata params) external payable returns (\r
        uint256 tokenId,\r
        uint128 liquidity,\r
        uint256 amount0,\r
        uint256 amount1\r
    );\r
\r
    function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);\r
    function ownerOf(uint256 tokenId) external view returns (address owner);\r
    function safeTransferFrom(address from, address to, uint256 tokenId) external;\r
}\r
\r
interface ISwapRouter {\r
    struct ExactInputSingleParams {\r
        address tokenIn;\r
        address tokenOut;\r
        uint24 fee;\r
        address recipient;\r
        uint256 deadline;\r
        uint256 amountIn;\r
        uint256 amountOutMinimum;\r
        uint160 sqrtPriceLimitX96;\r
    }\r
\r
    function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut);\r
}\r
\r
interface IERC20 {\r
    function transfer(address to, uint256 amount) external returns (bool);\r
    function transferFrom(address from, address to, uint256 amount) external returns (bool);\r
    function balanceOf(address account) external view returns (uint256);\r
    function approve(address spender, uint256 amount) external returns (bool);\r
    function totalSupply() external view returns (uint256);\r
}\r
\r
interface IWETH {\r
    function deposit() external payable;\r
    function balanceOf(address) external view returns (uint256);\r
}\r
\r
contract AutoAntiSniperERC20 {\r
    mapping(address => uint256) private _balances;\r
    mapping(address => mapping(address => uint256)) private _allowances;\r
\r
    uint256 private _totalSupply;\r
    string private _name;\r
    string private _symbol;\r
    address private _owner;\r
    uint256 private _deployBlock;\r
    bool private _antiSniperEnabled = true;\r
\r
    constructor(string memory name_, string memory symbol_, uint256 totalSupply_, address owner_) {\r
        _name = name_;\r
        _symbol = symbol_;\r
        _totalSupply = totalSupply_;\r
        _owner = owner_;\r
        _deployBlock = block.number;\r
        _balances[owner_] = totalSupply_;\r
    }\r
\r
    function name() public view returns (string memory) {\r
        return _name;\r
    }\r
\r
    function symbol() public view returns (string memory) {\r
        return _symbol;\r
    }\r
\r
    function decimals() public pure returns (uint8) {\r
        return 18;\r
    }\r
\r
    function totalSupply() public view returns (uint256) {\r
        return _totalSupply;\r
    }\r
\r
    function balanceOf(address account) public view returns (uint256) {\r
        return _balances[account];\r
    }\r
\r
    function transfer(address to, uint256 amount) public returns (bool) {\r
        address owner = msg.sender;\r
        _transfer(owner, to, amount);\r
        return true;\r
    }\r
\r
    function allowance(address owner, address spender) public view returns (uint256) {\r
        return _allowances[owner][spender];\r
    }\r
\r
    function approve(address spender, uint256 amount) public returns (bool) {\r
        address owner = msg.sender;\r
        _approve(owner, spender, amount);\r
        return true;\r
    }\r
\r
    function transferFrom(address from, address to, uint256 amount) public returns (bool) {\r
        address spender = msg.sender;\r
        _spendAllowance(from, spender, amount);\r
        _transfer(from, to, amount);\r
        return true;\r
    }\r
\r
    function _transfer(address from, address to, uint256 amount) internal {\r
        require(from != address(0), "ERC20: transfer from the zero address");\r
        require(to != address(0), "ERC20: transfer to the zero address");\r
\r
        // Anti-sniper protection\r
        if (_antiSniperEnabled && block.number <= _deployBlock + 3) {\r
            require(from == _owner || to == _owner, "Anti-sniper: transfers blocked for first 3 blocks");\r
        }\r
\r
        uint256 fromBalance = _balances[from];\r
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");\r
        unchecked {\r
            _balances[from] = fromBalance - amount;\r
            _balances[to] += amount;\r
        }\r
    }\r
\r
    function _approve(address owner, address spender, uint256 amount) internal {\r
        require(owner != address(0), "ERC20: approve from the zero address");\r
        require(spender != address(0), "ERC20: approve to the zero address");\r
\r
        _allowances[owner][spender] = amount;\r
    }\r
\r
    function _spendAllowance(address owner, address spender, uint256 amount) internal {\r
        uint256 currentAllowance = allowance(owner, spender);\r
        if (currentAllowance != type(uint256).max) {\r
            require(currentAllowance >= amount, "ERC20: insufficient allowance");\r
            unchecked {\r
                _approve(owner, spender, currentAllowance - amount);\r
            }\r
        }\r
    }\r
\r
    function disableAntiSniper() external {\r
        require(msg.sender == _owner, "Only owner can disable anti-sniper");\r
        _antiSniperEnabled = false;\r
    }\r
}\r
\r
contract AllTokensToLPFactoryCompatible {\r
    address public owner;\r
    \r
    mapping(uint256 => address) public tokenCreators;\r
    mapping(address => uint256) public creatorFees;\r
    mapping(address => uint256) public userTokenCount;\r
    mapping(address => mapping(uint256 => address)) public createdTokens;\r
    mapping(address => uint256) public totalCreatorFees;\r
    uint256 public totalFees;\r
    uint256 public tokenCounter;\r
    \r
    // Ethereum mainnet addresses\r
    address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\r
    address constant UNISWAP_V3_FACTORY = 0x1F98431c8aD98523631AE4a59f267346ea31F984;\r
    address constant POSITION_MANAGER = 0xC36442b4a4522E871399CD717aBDD847Ab11FE88;\r
    address constant SWAP_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;\r
    \r
    uint256 constant CREATOR_SHARE = 50;\r
    uint256 constant PLATFORM_SHARE = 50;\r
    uint256 constant REQUIRED_ETH = 0.00005 ether;\r
    \r
    event TokenCreated(address indexed creator, address indexed tokenAddress, string name, string symbol, uint256 tokenId, address pool, int24 tickLower, int24 tickUpper);\r
    event ExcessFundsSent(address indexed creator, uint256 amount, address indexed recipient);\r
    event FeesCollected(uint256 indexed tokenId, uint256 ethAmount, uint256 tokenAmount, uint256 swappedETH);\r
    event TokensDirectToCreator(address indexed creator, address indexed tokenAddress, uint256 amount);\r
    event CreatorWithdraw(address indexed creator, uint256 ethAmount);\r
    event PlatformWithdraw(uint256 ethAmount);\r
    event AllTokensDeposited(address indexed tokenAddress, uint256 totalTokens, uint256 finalBalance);\r
    event TokenFeesWithdrawn(address indexed creator, address indexed tokenAddress, uint256 amount);\r
    \r
    modifier onlyCreatorOrAdmin(uint256 tokenId) {\r
        address creator = tokenCreators[tokenId];\r
        require(creator == msg.sender || owner == msg.sender, "Not authorized");\r
        _;\r
    }\r
    \r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "Not owner");\r
        _;\r
    }\r
    \r
    constructor() {\r
        owner = msg.sender;\r
    }\r
\r
    function createToken(string memory name, string memory symbol) external payable returns (address tokenAddress, uint256 tokenId) {\r
        require(msg.value >= REQUIRED_ETH);\r
        require(bytes(name).length > 0 && bytes(name).length <= 32);\r
        require(bytes(symbol).length > 0 && bytes(symbol).length <= 32);\r
        \r
        uint256 totalSupply = 1000000000 * 10**18; // 1 billion tokens\r
        \r
        // Simplified deployment without salt-based addressing (to avoid LOK error)\r
        tokenAddress = address(new AutoAntiSniperERC20(name, symbol, totalSupply, msg.sender));\r
        require(tokenAddress != address(0), "Token deployment failed");\r
        \r
        tokenId = tokenCounter++;\r
        tokenCreators[tokenId] = msg.sender;\r
        createdTokens[msg.sender][userTokenCount[msg.sender]] = tokenAddress;\r
        userTokenCount[msg.sender]++;\r
        \r
        // Create Uniswap V3 pool and LP position\r
        _createLiquidityPosition(tokenAddress, tokenId, totalSupply);\r
        \r
        return (tokenAddress, tokenId);\r
    }\r
\r
    function _createLiquidityPosition(address tokenAddress, uint256 tokenId, uint256 totalSupply) private {\r
        // Create pool\r
        address pool = IUniswapV3Factory(UNISWAP_V3_FACTORY).createPool(tokenAddress, WETH, 3000);\r
        \r
        // Approve tokens\r
        IERC20(tokenAddress).approve(POSITION_MANAGER, totalSupply);\r
        \r
        // Deposit WETH\r
        (bool success, ) = WETH.call{value: msg.value}(abi.encodeWithSignature("deposit()"));\r
        require(success, "WETH deposit failed");\r
        IERC20(WETH).approve(POSITION_MANAGER, msg.value);\r
        \r
        // Determine token ordering\r
        (address token0, address token1) = tokenAddress < WETH ? (tokenAddress, WETH) : (WETH, tokenAddress);\r
        (uint256 amount0, uint256 amount1) = tokenAddress < WETH ? (totalSupply, msg.value) : (msg.value, totalSupply);\r
        \r
        // Mint LP position\r
        (uint256 nftTokenId, , ,) = INonfungiblePositionManager(POSITION_MANAGER).mint(\r
            INonfungiblePositionManager.MintParams({\r
                token0: token0,\r
                token1: token1,\r
                fee: 3000,\r
                tickLower: -887200,\r
                tickUpper: 887200,\r
                amount0Desired: amount0,\r
                amount1Desired: amount1,\r
                amount0Min: 0,\r
                amount1Min: 0,\r
                recipient: address(this),\r
                deadline: block.timestamp + 300\r
            })\r
        );\r
        \r
        // Transfer NFT to creator\r
        INonfungiblePositionManager(POSITION_MANAGER).safeTransferFrom(address(this), msg.sender, nftTokenId);\r
        \r
        emit TokenCreated(msg.sender, tokenAddress, "", "", tokenId, pool, -887200, 887200);\r
    }\r
\r
    // Rest of functions for compatibility...\r
    function collectFees(uint256 tokenId) external onlyCreatorOrAdmin(tokenId) {\r
        INonfungiblePositionManager.CollectParams memory params = INonfungiblePositionManager.CollectParams({\r
            tokenId: tokenId,\r
            recipient: address(this),\r
            amount0Max: type(uint128).max,\r
            amount1Max: type(uint128).max\r
        });\r
        \r
        INonfungiblePositionManager(POSITION_MANAGER).collect(params);\r
    }\r
    \r
    function withdrawCreatorFees() external {\r
        uint256 amount = creatorFees[msg.sender];\r
        require(amount > 0, "No fees to withdraw");\r
        \r
        creatorFees[msg.sender] = 0;\r
        payable(msg.sender).transfer(amount);\r
        \r
        emit CreatorWithdraw(msg.sender, amount);\r
    }\r
    \r
    function withdrawPlatformFees() external onlyOwner {\r
        uint256 amount = totalFees;\r
        require(amount > 0, "No fees to withdraw");\r
        \r
        totalFees = 0;\r
        payable(owner).transfer(amount);\r
        \r
        emit PlatformWithdraw(amount);\r
    }\r
\r
    function getPlatformFees() external pure returns (uint256) {\r
        return REQUIRED_ETH;\r
    }\r
    \r
    function getTokenCount() external view returns (uint256) {\r
        return tokenCounter;\r
    }\r
    \r
    function getCreatorTokenBalance(address creator) external view returns (uint256) {\r
        return creatorFees[creator];\r
    }\r
\r
    function batchSwapTokenFees(address, address) external pure returns (uint256) {\r
        return 0;\r
    }\r
\r
    function rescueAndSellStuckTokens(address[] calldata) external view {\r
        require(msg.sender == owner, "Not owner");\r
    }\r
\r
    // Receive ETH\r
    receive() external payable {}\r
\r
    // Safe transfer fallback\r
    function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {\r
        return this.onERC721Received.selector;\r
    }\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "paris",
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    }
  }
}}

Tags:
ERC20, DeFi, Mintable, Swap, Liquidity, Factory|addr:0xaacb6e68174a9c815905999c91d698c9e7e1a705|verified:true|block:23637560|tx:0x57e05889329254a2fbaf5ffdf95fbd1ffb81143387fd66a3e57505ef01cca580|first_check:1761301532

Submitted on: 2025-10-24 12:25:35

Comments

Log in to comment.

No comments yet.