{"status":"full","files":[{"name":"metadata.json","path":"/contracts/full_match/7120/0x7A2992af0d4979aDD076347666023d66d29276Fc/metadata.json","content":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"name\":\"TokenDeployed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"name\":\"deployToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deployedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"tokenCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"tokensOf\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Sentrix Labs\",\"details\":\"Tracks deployed-token-by-deployer to make discovery easy.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Sentrix TokenFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Deploys standard ERC-20 tokens. Single entry point for builders         who want a fungible token without writing Solidity. Initial         supply is minted to the deployer (`msg.sender`).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TokenFactory.sol\":\"TokenFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"contracts/TokenFactory.sol\":{\"keccak256\":\"0x9e264e93512eaf09e7733e184907511f15768828c44de0808dfa1ec1155761e7\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://262fd230bddd0ec20fb3bb0e7a6dc476984ca4ace9490d039d0f0f2c4c1e81de\",\"dweb:/ipfs/QmUos4CU2N4Xzr38qhuKYBfDiNy6LFXbZsuB1n5kxHSHDf\"]}},\"version\":1}"},{"name":"TokenFactory.sol","path":"/contracts/full_match/7120/0x7A2992af0d4979aDD076347666023d66d29276Fc/sources/contracts/TokenFactory.sol","content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.24;\n\n/// @title Sentrix TokenFactory\n/// @author Sentrix Labs\n/// @notice Deploys standard ERC-20 tokens. Single entry point for builders\n///         who want a fungible token without writing Solidity. Initial\n///         supply is minted to the deployer (`msg.sender`).\n/// @dev Tracks deployed-token-by-deployer to make discovery easy.\ncontract TokenFactory {\n    event TokenDeployed(address indexed token, address indexed owner, string name, string symbol, uint256 initialSupply);\n\n    mapping(address => address[]) public deployedTokens;\n\n    function deployToken(string calldata name, string calldata symbol, uint256 initialSupply) external returns (address token) {\n        FactoryToken t = new FactoryToken(name, symbol, initialSupply, msg.sender);\n        token = address(t);\n        deployedTokens[msg.sender].push(token);\n        emit TokenDeployed(token, msg.sender, name, symbol, initialSupply);\n    }\n\n    function tokensOf(address owner) external view returns (address[] memory) {\n        return deployedTokens[owner];\n    }\n\n    function tokenCount(address owner) external view returns (uint256) {\n        return deployedTokens[owner].length;\n    }\n}\n\n/// @notice Minimal ERC-20 deployed by the factory.\ncontract FactoryToken {\n    string public name;\n    string public symbol;\n    uint8 public constant decimals = 18;\n    uint256 public totalSupply;\n\n    mapping(address => uint256) public balanceOf;\n    mapping(address => mapping(address => uint256)) public allowance;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    constructor(string memory _name, string memory _symbol, uint256 _initialSupply, address _owner) {\n        name = _name;\n        symbol = _symbol;\n        totalSupply = _initialSupply;\n        balanceOf[_owner] = _initialSupply;\n        emit Transfer(address(0), _owner, _initialSupply);\n    }\n\n    function transfer(address to, uint256 amount) external returns (bool) {\n        return _transfer(msg.sender, to, amount);\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 from, address to, uint256 amount) external returns (bool) {\n        if (from != msg.sender) {\n            uint256 allowed = allowance[from][msg.sender];\n            if (allowed != type(uint256).max) {\n                require(allowed >= amount, \"FactoryToken: insufficient allowance\");\n                allowance[from][msg.sender] = allowed - amount;\n            }\n        }\n        return _transfer(from, to, amount);\n    }\n\n    function _transfer(address from, address to, uint256 amount) internal returns (bool) {\n        require(balanceOf[from] >= amount, \"FactoryToken: insufficient balance\");\n        balanceOf[from] -= amount;\n        balanceOf[to] += amount;\n        emit Transfer(from, to, amount);\n        return true;\n    }\n}\n"}]}