AgentifyAI

Description:

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

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{"main.sol":{"content":"// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller\u0027s account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller\u0027s tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender\u0027s allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller\u0027s
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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
    );

    error ERC20InvalidApprover(address approver);

    error ERC20InvalidSpender(address spender);
}

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 account);

    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);
    }
}"},"token.sol":{"content":"// SPDX-License-Identifier: MIT
pragma solidity 0.8.27;

import "./main.sol";

interface IUniswapV2Router {
    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,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address =\u003e uint256) private _balances;

    mapping(address =\u003e mapping(address =\u003e uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

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

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        if (from == address(0)) {

            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance \u003c value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {

                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {

                _totalSupply -= value;
            }
        } else {
            unchecked {

                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value,
        bool emitEvent
    ) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 value
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance \u003c value) {
                revert ERC20InsufficientAllowance(
                    spender,
                    currentAllowance,
                    value
                );
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

contract AgentifyAI is Ownable, ERC20 {
    IUniswapV2Router public immutable uniswapV2Router;

    address public constant ZERO_ADDRESS = address(0);
    address public constant DEAD_ADDRESS = address(0xdEaD);

    address public uniswapV2Pair;

    address public GrowthWallet;
    address public OperationsWallet;
    address public BuildWallet;

    bool public isLimitsEnabled;
    bool public isAntiMEV;
    bool public isTaxEnabled;
    bool private inSwapBack;
    bool public isLaunched;

    uint256 public launchBlock;
    uint256 public launchTime;

    uint256 private lastSwapBackExecutionBlock;

    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    uint256 public swapTokensAtAmount;
    uint256 public buyFee;
    uint256 public sellFee;
    uint256 public transferFee;

    mapping(address =\u003e bool) public isExcludedFromFees;
    mapping(address =\u003e bool) public isExcludedFromLimits;
    mapping(address =\u003e bool) public automatedMarketMakerPairs;
    mapping(address =\u003e uint256) private _holderLastTransferTimestamp;

    modifier lockSwapBack() {
        inSwapBack = true;
        _;
        inSwapBack = false;
    }

    constructor(address strategic) Ownable(msg.sender) ERC20("Agentify AI", "AGF") {
        address sender = msg.sender;

        _excludeFromFees(address(this), true);
        _excludeFromFees(address(0xdead), true);
        _excludeFromFees(sender, true);
        _excludeFromFees(GrowthWallet, true);
        _excludeFromFees(strategic, true);

        _excludeFromLimits(address(this), true);
        _excludeFromLimits(address(0xdead), true);
        _excludeFromLimits(sender, true);
        _excludeFromLimits(GrowthWallet, true);
        _excludeFromLimits(strategic, true);

        _mint(sender, 40_000_000 ether);
        _mint(address(this), 40_000_000 ether);
        _mint(strategic, 20_000_000 ether);

        uint256 totalSupply = totalSupply();

        GrowthWallet = 0x288287746451B83e73602e65e9E49812D4375c3F; //42
        OperationsWallet = 0x2ca981EB5CD4FbC67E86C4bC12348C12850bEaA5; //30
        BuildWallet = 0x4b46f03Fcea1163b17F93E631e822938731a9777; //28

        maxBuy = (totalSupply * 9) / 1000;
        maxSell = (totalSupply * 9) / 1000;
        maxWallet = (totalSupply * 9) / 1000;
        swapTokensAtAmount = (totalSupply * 325) / 1000000;

        isLimitsEnabled = true;
        isAntiMEV = true;
        isTaxEnabled = true;

        buyFee = 33;
        sellFee = 40;
        transferFee = 40;

        uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    }

    receive() external payable {}

    fallback() external payable {}

    function _transferOwnership(address newOwner) internal override {
        address oldOwner = owner();
        if (oldOwner != address(0)) {
            _excludeFromFees(oldOwner, false);
            _excludeFromLimits(oldOwner, false);
        }
        _excludeFromFees(newOwner, true);
        _excludeFromLimits(newOwner, true);
        super._transferOwnership(newOwner);
    }

    function OpenTrading() external onlyOwner {
        require(!isLaunched, "AlreadyLaunched()");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        isLaunched = true;
        launchBlock = block.number;
        launchTime = block.timestamp;
    }

    function DisableLimits() external onlyOwner {
        isLimitsEnabled = false;
        isAntiMEV = false;
    }

    function removeAntiMEV() external onlyOwner {
        isAntiMEV = false;
    }
      
    function SwitchTaxes(bool value) external onlyOwner {
        isTaxEnabled = value;
    }

    function excludeFromFees(address[] calldata accounts, bool value)
        external
        onlyOwner
    {
        for (uint256 i = 0; i \u003c accounts.length; i++) {
            _excludeFromFees(accounts[i], value);
        }
    }

    function excludeFromLimits(address[] calldata accounts, bool value)
        external
        onlyOwner
    {
        for (uint256 i = 0; i \u003c accounts.length; i++) {
            _excludeFromLimits(accounts[i], value);
        }
    }

    function _excludeFromFees(address account, bool value) internal virtual {
        isExcludedFromFees[account] = value;
    }

    function _excludeFromLimits(address account, bool value) internal virtual {
        isExcludedFromLimits[account] = value;
    }

    function withdrawStuckTokens(address _token) external onlyOwner {
        address sender = msg.sender;
        uint256 amount;
        if (_token == ZERO_ADDRESS) {
            bool success;
            amount = address(this).balance;
            require(amount \u003e 0, "NoNativeTokens()");
            (success, ) = address(sender).call{value: amount}("");
            require(success, "FailedToWithdrawNativeTokens()");
        } else {
            amount = IERC20(_token).balanceOf(address(this));
            require(amount \u003e 0, "NoTokens()");
            IERC20(_token).transfer(msg.sender, amount);
        }
    }

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        address origin = tx.origin;

        require(
            isLaunched ||
                isExcludedFromLimits[from] ||
                isExcludedFromLimits[to],
            "NotLaunched()"
        );

        bool limits = isLimitsEnabled \u0026\u0026
            !inSwapBack \u0026\u0026
            !(isExcludedFromLimits[from] || isExcludedFromLimits[to]);
        if (limits) {
            if (
                from != owner() \u0026\u0026
                to != owner() \u0026\u0026
                to != ZERO_ADDRESS \u0026\u0026
                to != DEAD_ADDRESS
            ) {
                if (isAntiMEV) {
                    if (to != address(uniswapV2Router) \u0026\u0026 to != uniswapV2Pair) {
                        require(
                            _holderLastTransferTimestamp[origin] \u003c
                                block.number - 3 \u0026\u0026
                                _holderLastTransferTimestamp[to] \u003c
                                block.number - 3,
                            "TransferDelay()"
                        );
                        _holderLastTransferTimestamp[origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                if (
                    automatedMarketMakerPairs[from] \u0026\u0026 !isExcludedFromLimits[to]
                ) {
                    require(amount \u003c= maxBuy, "MaxBuyAmountExceed()");
                    require(
                        amount + balanceOf(to) \u003c= maxWallet,
                        "MaxWalletAmountExceed()"
                    );
                } else if (
                    automatedMarketMakerPairs[to] \u0026\u0026 !isExcludedFromLimits[from]
                ) {
                    require(amount \u003c= maxSell, "MaxSellAmountExceed()");
                } else if (!isExcludedFromLimits[to]) {
                    require(
                        amount + balanceOf(to) \u003c= maxWallet,
                        "MaxWalletAmountExceed()"
                    );
                }
            }
        }

        bool takeFee = isTaxEnabled \u0026\u0026
            !inSwapBack \u0026\u0026
            !(isExcludedFromFees[from] || isExcludedFromFees[to]);

        if (takeFee) {
            uint256 fees = 0;
            if (automatedMarketMakerPairs[to] \u0026\u0026 sellFee \u003e 0) {
                fees = (amount * sellFee) / 100;
            } else if (automatedMarketMakerPairs[from] \u0026\u0026 buyFee \u003e 0) {
                fees = (amount * buyFee) / 100;
            } else if (
                !automatedMarketMakerPairs[to] \u0026\u0026
                !automatedMarketMakerPairs[from] \u0026\u0026
                transferFee \u003e 0
            ) {
                fees = (amount * transferFee) / 100;
            }

            if (fees \u003e 0) {
                amount -= fees;
                super._update(from, address(this), fees);
            }
        }

        uint256 balance = balanceOf(address(this));
        bool shouldSwap = balance \u003e= swapTokensAtAmount;

        uint256 maxSwapAmount = swapTokensAtAmount * 20;
        if (takeFee \u0026\u0026 !automatedMarketMakerPairs[from] \u0026\u0026 shouldSwap) {
            if (block.number \u003e lastSwapBackExecutionBlock) {
                if (balance \u003e maxSwapAmount) {
                    balance = maxSwapAmount;
                }
                _swapBack(balance);
                lastSwapBackExecutionBlock = block.number;
            }
        }

        super._update(from, to, amount);
    }

    function _swapBack(uint256 balance) internal virtual lockSwapBack {
        bool success;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            balance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethBalance = address(this).balance;

        uint256 ethForGrowth = (ethBalance * 42) / 100;
        uint256 ethForOperation = (ethBalance * 30) / 100;
        uint256 ethForBuild = (ethBalance * 28) / 100;

        (success, ) = address(GrowthWallet).call{value: ethForGrowth}("");
        (success, ) = address(OperationsWallet).call{value: ethForOperation}("");
        (success, ) = address(BuildWallet).call{value: ethForBuild}("");
    }

    function DripSwap(uint256 _percen) external onlyOwner {
        uint256 balance = balanceOf(address(this));
        uint256 amt = (balance * _percen)/100;
        _swapBack(amt);
    }

    function AdjustFess(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        if (block.number == launchBlock){
            buyFee = _buyFee;
            sellFee = _sellFee;
        } else {
        require(_buyFee \u003c= buyFee \u0026\u0026 _sellFee \u003c= sellFee, "FeeTooHigh()");
        buyFee = _buyFee;
        sellFee = _sellFee;
    }}

    function ReduceTransferFees(uint256 _transferFee) external onlyOwner {
        require(_transferFee \u003c= transferFee, "FeeTooHigh()");
        transferFee = _transferFee;
    }

    function SetTaxWallets(address _OperationWallet, address _GrowthAddress, address _BuildWallet) external onlyOwner {
        GrowthWallet = _GrowthAddress;
        OperationsWallet = _OperationWallet;
        BuildWallet = _BuildWallet;
        
    }

    function _setAutomatedMarketMakerPair(address pair, bool value)
        internal
        virtual
    {
        automatedMarketMakerPairs[pair] = value;
    }
}"}}

Tags:
ERC20, DeFi, Swap, Liquidity|addr:0x35caa4237f284a226c0238d6e04b51c2f4164119|verified:true|block:23390416|tx:0xbd0d225049de56d2f6514e58028b9f291a5841775488acf4a8746ea23de5966c|first_check:1758271546

Submitted on: 2025-09-19 10:45:48

Comments

Log in to comment.

No comments yet.