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/EthereumTokenFactoryOptimized.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.30;\r
\r
// Uniswap V3 interfaces\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
}\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 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 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
function transfer(address, uint256) external returns (bool);\r
function approve(address spender, uint256 amount) external returns (bool);\r
function withdraw(uint256) external;\r
}\r
\r
// Enhanced AutoAntiSniperERC20 with optimized anti-sniper mechanics\r
contract AutoAntiSniperERC20 {\r
string public name;\r
string public symbol;\r
uint8 public decimals = 18;\r
uint256 public totalSupply = 1000000000 * 10**18; // 1 billion tokens\r
\r
mapping(address => uint256) public balanceOf;\r
mapping(address => mapping(address => uint256)) public allowance;\r
\r
address public factory;\r
address public creator;\r
uint256 public launchTime;\r
uint256 public devBuyWindow = 300; // 5 minutes\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
modifier tradingAllowed() {\r
// Always allow factory operations and Uniswap contracts\r
if (msg.sender == factory || \r
msg.sender == creator ||\r
msg.sender == 0xC36442b4a4522E871399CD717aBDD847Ab11FE88 || // Position Manager\r
msg.sender == 0xE592427A0AEce92De3Edee1F18E0157C05861564 || // Swap Router \r
tx.origin == creator || \r
msg.sender == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) { // WETH\r
_;\r
return;\r
}\r
\r
// Enhanced anti-sniper: block during dev window\r
if (block.timestamp < launchTime + devBuyWindow) {\r
revert("Dev buy window active");\r
}\r
_;\r
}\r
\r
constructor(string memory _name, string memory _symbol, address _creator) {\r
name = _name;\r
symbol = _symbol;\r
creator = _creator;\r
factory = msg.sender;\r
launchTime = block.timestamp;\r
balanceOf[factory] = totalSupply;\r
emit Transfer(address(0), factory, totalSupply);\r
}\r
\r
function transfer(address to, uint256 amount) external tradingAllowed returns (bool) {\r
require(to != address(0));\r
require(balanceOf[msg.sender] >= amount);\r
\r
balanceOf[msg.sender] -= amount;\r
balanceOf[to] += amount;\r
emit Transfer(msg.sender, to, amount);\r
return true;\r
}\r
\r
function approve(address spender, uint256 amount) external returns (bool) {\r
require(spender != address(0));\r
allowance[msg.sender][spender] = amount;\r
emit Approval(msg.sender, spender, amount);\r
return true;\r
}\r
\r
function transferFrom(address from, address to, uint256 amount) external tradingAllowed returns (bool) {\r
require(from != address(0));\r
require(to != address(0));\r
require(balanceOf[from] >= amount);\r
require(allowance[from][msg.sender] >= amount);\r
\r
balanceOf[from] -= amount;\r
balanceOf[to] += amount;\r
allowance[from][msg.sender] -= amount;\r
emit Transfer(from, to, amount);\r
return true;\r
}\r
}\r
\r
contract AllTokensToLPFactoryOptimized {\r
address public owner;\r
\r
mapping(uint256 => address) public tokenCreators;\r
mapping(address => uint256) public creatorFees;\r
mapping(address => uint256) public userTokenCount;\r
uint256 public totalFees;\r
uint256 public tokenCounter;\r
\r
// Uniswap V3 addresses on Ethereum mainnet\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
// Price range ticks for full range liquidity\r
int24 constant TICK_LOWER = -887200;\r
int24 constant TICK_UPPER = 887200;\r
\r
uint256 constant MIN_SWAP_AMOUNT = 1000 * 10**18;\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 <= 10);\r
\r
uint256 liquidityAmount = REQUIRED_ETH;\r
uint256 excessAmount = msg.value - liquidityAmount;\r
\r
// Deploy token with optimized address generation\r
tokenAddress = _deployTokenWithOptimizedAddress(name, symbol, msg.sender);\r
\r
// Create pool and deposit tokens\r
address pool;\r
(tokenId, pool) = _createFullRangeLP(tokenAddress, liquidityAmount);\r
\r
tokenCreators[tokenId] = msg.sender;\r
\r
// Send excess funds to platform admin\r
if (excessAmount > 0) {\r
(bool success,) = payable(owner).call{value: excessAmount}("");\r
require(success);\r
emit ExcessFundsSent(msg.sender, excessAmount, owner);\r
}\r
\r
emit TokenCreated(msg.sender, tokenAddress, name, symbol, tokenId, pool, TICK_LOWER, TICK_UPPER);\r
}\r
\r
// OPTIMIZED ADDRESS GENERATION - Biased toward high addresses\r
function _deployTokenWithOptimizedAddress(string memory name, string memory symbol, address creator) internal returns (address) {\r
uint256 saltNonce = 0;\r
address predictedAddress;\r
\r
// Generate high-entropy base value biased toward higher addresses\r
uint256 baseEntropy = uint256(keccak256(abi.encodePacked(\r
block.timestamp,\r
block.prevrandao, // More random than block.difficulty \r
creator,\r
name,\r
symbol,\r
address(this)\r
)));\r
\r
// Bias the entropy toward higher values\r
baseEntropy = baseEntropy | 0x8000000000000000000000000000000000000000000000000000000000000000;\r
\r
do {\r
// Create salt with mathematical bias toward high addresses\r
bytes32 salt = keccak256(abi.encodePacked(\r
baseEntropy + (saltNonce * 0xffffffffffffffffffffffffffffffffffffffffffffffff), // Large increment\r
name,\r
symbol, \r
creator,\r
block.timestamp,\r
saltNonce\r
));\r
\r
predictedAddress = _computeCreate2Address(salt, name, symbol, creator);\r
saltNonce++;\r
\r
// Increased limit for Ethereum mainnet with better error message\r
require(saltNonce < 5000, "Could not find valid address after 5000 attempts");\r
} while (predictedAddress <= WETH);\r
\r
// Deploy with the successful salt\r
bytes32 finalSalt = keccak256(abi.encodePacked(\r
baseEntropy + ((saltNonce - 1) * 0xffffffffffffffffffffffffffffffffffffffffffffffff),\r
name,\r
symbol,\r
creator,\r
block.timestamp,\r
saltNonce - 1\r
));\r
\r
return _deployTokenWithSalt(finalSalt, name, symbol, creator);\r
}\r
\r
// Compute CREATE2 address without deploying\r
function _computeCreate2Address(bytes32 salt, string memory name, string memory symbol, address creator) internal view returns (address) {\r
bytes memory bytecode = abi.encodePacked(\r
type(AutoAntiSniperERC20).creationCode,\r
abi.encode(name, symbol, creator)\r
);\r
\r
bytes32 hash = keccak256(\r
abi.encodePacked(\r
bytes1(0xff),\r
address(this),\r
salt,\r
keccak256(bytecode)\r
)\r
);\r
\r
return address(uint160(uint256(hash)));\r
}\r
\r
// Deploy token with specific salt\r
function _deployTokenWithSalt(bytes32 salt, string memory name, string memory symbol, address creator) internal returns (address) {\r
bytes memory bytecode = abi.encodePacked(\r
type(AutoAntiSniperERC20).creationCode,\r
abi.encode(name, symbol, creator)\r
);\r
\r
address tokenAddress;\r
assembly {\r
tokenAddress := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\r
}\r
\r
require(tokenAddress != address(0), "Token deployment failed");\r
require(tokenAddress > WETH, "Generated address not greater than WETH");\r
\r
return tokenAddress;\r
}\r
\r
// Create full range liquidity pool\r
function _createFullRangeLP(address tokenAddress, uint256 liquidityAmount) internal returns (uint256 tokenId, address pool) {\r
// Wrap ETH to WETH\r
IWETH(WETH).deposit{value: liquidityAmount}();\r
\r
// Check token balance\r
uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));\r
require(tokenBalance >= 1000000000 * 10**18, "Insufficient token balance");\r
\r
// Determine token order (tokenAddress > WETH is guaranteed by our generation)\r
address token0 = WETH;\r
address token1 = tokenAddress;\r
\r
// Create pool\r
pool = IUniswapV3Factory(UNISWAP_V3_FACTORY).createPool(token0, token1, 10000);\r
\r
// Approve tokens\r
IERC20(tokenAddress).approve(POSITION_MANAGER, tokenBalance);\r
IWETH(WETH).approve(POSITION_MANAGER, liquidityAmount);\r
\r
// Mint position\r
INonfungiblePositionManager.MintParams memory params = INonfungiblePositionManager.MintParams({\r
token0: token0,\r
token1: token1, \r
fee: 10000,\r
tickLower: TICK_LOWER,\r
tickUpper: TICK_UPPER,\r
amount0Desired: liquidityAmount,\r
amount1Desired: tokenBalance,\r
amount0Min: 0,\r
amount1Min: 0,\r
recipient: address(this),\r
deadline: block.timestamp + 300\r
});\r
\r
(tokenId,,,) = INonfungiblePositionManager(POSITION_MANAGER).mint(params);\r
\r
// Check remaining token balance\r
uint256 remainingTokens = IERC20(tokenAddress).balanceOf(address(this));\r
emit AllTokensDeposited(tokenAddress, tokenBalance, remainingTokens);\r
\r
return (tokenId, pool);\r
}\r
\r
// Rest of the contract functions remain the same...\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
}"
}
},
"settings": {
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}
}}
Submitted on: 2025-10-24 12:23:57
Comments
Log in to comment.
No comments yet.