账户
0x73...3980
Amami

Amami

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.25+commit.b61c2a91
语言
Solidity
合同源代码
文件 1 的 1:Amami.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
abstract contract Ownable {
    address internal owner;
 
    constructor(address _owner) {
        owner = _owner;
    }
 
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Only owner can execute the following");
        _;
    }
 
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }
 
    function renounceOwnership() public onlyOwner {
        owner = address(0);
        emit OwnershipTransferred(address(0));
    }
 
    event OwnershipTransferred(address owner);
}
 
interface IERC20 { 
    function totalSupply() external view returns (uint256); 
    function balanceOf(address account) external view returns (uint256); 
    function transfer(address recipient, uint256 amount) external returns (bool); 
    function allowance(address owner, address spender) external view returns (uint256); 
    function approve(address spender, uint256 amount) external returns (bool); 
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); 
    event Transfer(address indexed from, address indexed to, uint256 value); 
    event Approval(address indexed owner, address indexed spender, uint256 value);
} 
 
library SafeMath { 
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;
 
        return c;
    } 
    function mul(uint256 a, uint256 b) internal pure returns (uint256) { 
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}
 
 
contract ERC20 is IERC20 {
    using SafeMath for uint256;
 
    mapping (address => uint256) private _balances;
 
    mapping (address => mapping (address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
 
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
 
    function transfer(address recipient, uint256 amount) public virtual returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
 
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }
 
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }
 
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }
 
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }
}
 
interface IUniswapV2Router02 {
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
 
 
interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}
 
contract Amami is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Factory public immutable uniswapV2Factory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    address AMAMI_COLLECTOR;
    address DEV_ADDRESS;
    address AmamiLiquidityLock;
 
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 public buyFees = 4;
    uint256 public sellFees = 4;
 
    bool private liquifying;
    uint256 liquifyModifier = 5;
 
    uint256 maxWalletSize = 0;
    uint256 maxTransactionAmount = 0;
 
    mapping(address => bool) private _isExemptFromFees;
    mapping(address => bool) public _isExmptFromMaxTransactionAmount;
 
    bool private liquifyingEnabled = true;
    bool private limitsInEffect = true;
 
    constructor(string memory __name, string memory __symbol, uint8 __decimals, uint256 __totalSupply, address _collector, address _devAddress) Ownable(msg.sender) payable {
        _name = __name;
        _symbol = __symbol;
        _decimals = __decimals;
 
        _isExemptFromFees[owner] = true;
        _isExemptFromFees[address(this)] = true;
        _isExemptFromFees[address(0xdead)] = true;
 
        _isExmptFromMaxTransactionAmount[owner]= true;
        _isExmptFromMaxTransactionAmount[address(this)] =  true;
        _isExmptFromMaxTransactionAmount[address(0xdead)] = true;
 
        uint256 totalSupply = __totalSupply * (10 ** __decimals);
        uint256 walletSize = 2;
        maxWalletSize = walletSize.mul(totalSupply).div(100);
        maxTransactionAmount = walletSize.mul(totalSupply).div(100);
 
        _mint(owner, totalSupply);
 
        AMAMI_COLLECTOR = _collector;
        DEV_ADDRESS = _devAddress;
    } 
 
    function name() public view returns (string memory) {
        return _name;
    }
 
    function symbol() public view returns (string memory) {
        return _symbol;
    }
 
    function decimals() public view returns (uint8) {
        return _decimals;
    }
 
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
 
    function getMarketMakerPair() public view returns (address){
        return uniswapV2Factory.getPair(uniswapV2Router02.WETH(), address(this));
    }
 
    function setLiquifyModifier(uint256 _newLiquifyModifier) public onlyOwner {
        liquifyModifier = _newLiquifyModifier;
    }
 
    function modifyFeeConfig(uint256 _newBuyFeesModifier, uint256 _newSellFeesModifier) public onlyOwner {
        require(_newBuyFeesModifier <= 5, "Buy fees cannot exceed 5%");
        require(_newSellFeesModifier <= 5, "Sell fees cannot exceed 5%");
        buyFees = _newBuyFeesModifier;
        sellFees = _newSellFeesModifier;
    }
 
    function updateFlags(bool _limitsInEffect, bool _liquifyingEnabled) public onlyOwner {
        limitsInEffect = _limitsInEffect;
        liquifyingEnabled = _liquifyingEnabled;
    }
 
    function setLockerAllowance(address _liquidityLockAddress) public onlyOwner {
        AmamiLiquidityLock = _liquidityLockAddress;
        _isExmptFromMaxTransactionAmount[_liquidityLockAddress] = true;
        _isExemptFromFees[_liquidityLockAddress] = true;
    }
 
    function setWalletConfig(uint256 _newWalletSize, uint256 _newMaxTxAmount) public onlyOwner {
        uint256 minPercentage = 1;
        uint256 finalWalletSize = _newWalletSize.mul(10 ** decimals());
        uint256 finalMaxTxAmount = _newMaxTxAmount.mul(10 ** decimals());
 
        require(finalWalletSize >= minPercentage.mul(totalSupply()).div(100), "Wallet size cannot be lower than 1%");
        require(finalMaxTxAmount >= minPercentage.mul(totalSupply()).div(100), "Max tx amount cannot be lower than 1%");
 
        if (_newWalletSize >= totalSupply()) {
            maxWalletSize = type(uint256).max;
        } else {
            maxWalletSize = finalWalletSize;
        }
 
         if (_newMaxTxAmount >= totalSupply()) {
            maxTransactionAmount = type(uint256).max;
        } else {
            maxTransactionAmount = finalMaxTxAmount;
        }
    }
 
    function getBuyFees() public view returns (uint256) {
      return buyFees;  
    }
 
    function getSellFees() public view returns (uint256) {
      return sellFees;  
    } 
 
    function getLiquifyModifier() public view returns (uint256) {
      return liquifyModifier;  
    }
 
    function getMaxWalletSize() public view returns (uint256) {
      return maxWalletSize;  
    }
 
    function getMaxTransactionAmount() public view returns (uint256) {
      return maxTransactionAmount;  
    }
 
    function isLimitsInEffect() public view returns (bool) {
      return limitsInEffect;  
    }
 
    function isLiquifingEnabled() public view returns (bool) {
      return liquifyingEnabled;  
    }
 
    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router02.WETH();
 
        _approve(address(this), address(uniswapV2Router02), tokenAmount);
 
        uniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            DEV_ADDRESS,
            block.timestamp
        );
    }
 
    function canSelfSwap() public view returns (bool) {
        uint256 balance = balanceOf(address(this));
        if (balance.mul(1000).div(totalSupply()) >= liquifyModifier) {
            return true;
        } else {
            return false;
        }
    }
 
    function liquify() internal {
        uint256 available = totalSupply().mul(liquifyModifier).div(1000);
        uint256 tokens = available.div(2);
        swapTokensForEth(tokens);
        uint256 remaining = available - tokens;
        super._transfer(address(this), AMAMI_COLLECTOR, remaining);
 
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount != 0, "ERC20: amount equals zero");
 
        if (limitsInEffect) {
            if (from != owner && to != owner && to != address(0) && to != address(0xdead) && !liquifying) {
                if (getMarketMakerPair() == from && !_isExmptFromMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds max transaction amount.");
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded" );
                } else if (getMarketMakerPair() == to && !_isExmptFromMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the max transaction amount.");
                } else if (!_isExmptFromMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet has exceeded");
                }
            }
        }
 
        if (canSelfSwap() && liquifyingEnabled && !liquifying && getMarketMakerPair() != from && !_isExemptFromFees[from] && !_isExemptFromFees[to]) {
            liquifying = true;
            liquify();
            liquifying = false;
        }
 
        bool takeFee = !liquifying;
 
        if (_isExemptFromFees[from] || _isExemptFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        if (takeFee) {
            if (getMarketMakerPair() == to && sellFees > 0) {
                fees = amount.mul(sellFees).div(100);
            } else if (getMarketMakerPair() == from && buyFees > 0) {
                fees = amount.mul(buyFees).div(100);
            }
 
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
}
设置
{
  "compilationTarget": {
    "Amami.sol": "Amami"
  },
  "evmVersion": "cancun",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"},{"internalType":"uint8","name":"__decimals","type":"uint8"},{"internalType":"uint256","name":"__totalSupply","type":"uint256"},{"internalType":"address","name":"_collector","type":"address"},{"internalType":"address","name":"_devAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExmptFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canSelfSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquifyModifier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketMakerPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLimitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquifingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyFeesModifier","type":"uint256"},{"internalType":"uint256","name":"_newSellFeesModifier","type":"uint256"}],"name":"modifyFeeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLiquifyModifier","type":"uint256"}],"name":"setLiquifyModifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityLockAddress","type":"address"}],"name":"setLockerAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWalletSize","type":"uint256"},{"internalType":"uint256","name":"_newMaxTxAmount","type":"uint256"}],"name":"setWalletConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"},{"internalType":"bool","name":"_liquifyingEnabled","type":"bool"}],"name":"updateFlags","outputs":[],"stateMutability":"nonpayable","type":"function"}]