creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/MoneyDog.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// WEB\n// https://www.moneydog.club\n// TG\n// https://t.me/moneydogonboarder\n// TWITTER\n// https://twitter.com/moneydog_eth\n\npragma solidity ^0.8.24;\n\ninterface IERC20 {\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address account) external view returns (uint256);\n\n    function transfer(\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    function allowance(\n        address owner,\n        address spender\n    ) external view returns (uint256);\n\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(\n        address indexed owner,\n        address indexed spender,\n        uint256 value\n    );\n}\n\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n\nabstract contract Ownable is Context {\n    address public owner;\n    event OwnershipTransferred(\n        address indexed previousOwner,\n        address indexed newOwner\n    );\n\n    constructor() {\n        address msgSender = _msgSender();\n        owner = msgSender;\n        emit OwnershipTransferred(address(0), msgSender);\n    }\n\n    modifier onlyOwner() {\n        require(owner == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    function renounceOwnership() public virtual onlyOwner {\n        emit OwnershipTransferred(owner, address(0));\n        owner = address(0);\n    }\n}\n\ncontract MoneyDog is IERC20, Context, Ownable {\n    string public name = \"MoneyDog\";\n    string public symbol = \"MONEYDOG\";\n    uint8 public decimals = 18;\n    uint256 public totalSupply = 100_000_000 * (10 ** uint256(decimals));\n\n    bool public tradingEnabled = false;\n\n    address public constant NULL_ADDRESS =\n        0x000000000000000000000000000000000000dEaD;\n\n    mapping(address => bool) public isCommunity;\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    constructor(address community) {\n        balanceOf[owner] = (totalSupply * 85) / 100;\n        balanceOf[community] = (totalSupply * 15) / 100;\n        isCommunity[community] = true;\n        emit Transfer(address(0), owner, (totalSupply * 85) / 100);\n        emit Transfer(address(0), community, (totalSupply * 15) / 100);\n        emit OwnershipTransferred(address(0), msg.sender);\n    }\n\n    function transfer(\n        address _to,\n        uint256 _value\n    ) public returns (bool success) {\n        require(\n            tradingEnabled || msg.sender == owner,\n            \"Trading is not enabled\"\n        );\n        require(_to != address(0), \"ERC20: transfer to the zero address\");\n        require(_value > 0, \"Transfer amount must be greater than zero\");\n        require(balanceOf[msg.sender] >= _value, \"Insufficient balance\");\n\n        balanceOf[msg.sender] -= _value;\n        balanceOf[_to] += _value;\n        emit Transfer(msg.sender, _to, _value);\n        return true;\n    }\n\n    function burnTokens(uint256 _amount) public {\n        require(_amount > 0, \"Burn amount must be greater than zero\");\n        require(\n            balanceOf[msg.sender] >= _amount,\n            \"Insufficient balance to burn\"\n        );\n\n        transfer(NULL_ADDRESS, _amount);\n    }\n\n    function approve(\n        address _spender,\n        uint256 _value\n    ) public returns (bool success) {\n        require(_spender != address(0), \"Approve to the zero address\");\n        allowance[msg.sender][_spender] = _value;\n        emit Approval(msg.sender, _spender, _value);\n        return true;\n    }\n\n    function transferFrom(\n        address _from,\n        address _to,\n        uint256 _value\n    ) public returns (bool success) {\n        require(_from != address(0), \"ERC20: transfer from the zero address\");\n        require(_to != address(0), \"ERC20: transfer from the zero address\");\n        require(_value > 0, \"Transfer amount must be greater than zero\");\n        require(_value <= balanceOf[_from], \"Insufficient balance\");\n        require(_value <= allowance[_from][msg.sender], \"Allowance exceeded\");\n\n        allowance[_from][msg.sender] -= _value;\n        balanceOf[_from] -= _value;\n        balanceOf[_to] += _value;\n        emit Transfer(_from, _to, _value);\n        return true;\n    }\n\n    function batchTransfer(\n        address[] calldata recipients,\n        uint256[] calldata amounts\n    ) external {\n        require(\n            recipients.length == amounts.length,\n            \"Mismatch between recipient addresses and amounts\"\n        );\n        require(recipients.length > 0, \"Must include at least one recipient\");\n        require(\n            isCommunity[msg.sender],\n            \"Batch transfer not allowed for sender\"\n        );\n\n        uint256 totalAmount = 0;\n        for (uint i = 0; i < amounts.length; i++) {\n            totalAmount += amounts[i];\n        }\n\n        require(\n            balanceOf[msg.sender] >= totalAmount,\n            \"Insufficient total balance for batch transfer\"\n        );\n\n        for (uint i = 0; i < recipients.length; i++) {\n            // Since we've already checked for total balance, perform the transfers\n            balanceOf[msg.sender] -= amounts[i];\n            balanceOf[recipients[i]] += amounts[i];\n            emit Transfer(msg.sender, recipients[i], amounts[i]);\n        }\n    }\n\n    function enableTrading() external onlyOwner {\n        require(!tradingEnabled, \"Trading is already enabled\");\n        tradingEnabled = true;\n    }\n}\n"
      }
    },
    "settings": {
      "evmVersion": "paris",
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "libraries": {}
    }
  }}