{
    "Function": "constructor",
    "File": "contracts/token/VariableSupplyERC20Token.sol",
    "Parent Contracts": [
        "contracts/AccessProtected.sol",
        "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "node_modules/@openzeppelin/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "require(bool,string)",
        "constructor",
        "mint",
        "_msgSender"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "constructor(string memory name_, string memory symbol_, uint256 initialSupply_, uint256 maxSupply_) ERC20(name_, symbol_) {\n        // max supply == 0 means mint at will. \n        // initialSupply_ == 0 means nothing preminted\n        // Therefore, we have valid scenarios if either of them is 0\n        // However, if both are 0 we might have a valid scenario as well - user just wants to create a token but doesn't want to mint anything\n        // Should we allow this?\n        require(initialSupply_ > 0 || maxSupply_ > 0, \"INVALID_AMOUNT\");\n        mintableSupply = maxSupply_;\n        \n        // Note: the check whether initial supply is less than or equal than mintableSupply will happen in mint fn.\n        if(initialSupply_ > 0) {\n            mint(_msgSender(), initialSupply_);\n        }\n    }"
}