TokenFactory

0xA11768954AACeA9e52995AE398aaA7cca736c6FeVerified
Native balance0USDX
Account typeSmart contract
NetworkTuven 99359

Overview

Contract name
TokenFactory
Verification
Verified source
Balance updated at block
15561

Verified contract source

Verified
Contract name
TokenFactory
Compiler
v0.8.29+commit.ab55807c
EVM version
prague
License
none
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {MintableERC20} from "./MintableERC20.sol";

/// @notice Multisig-controlled factory that deploys MintableERC20s with multisig as sole minter.
contract TokenFactory {
    address public immutable multisig;
    address[] public tokens;

    error NotMultisig();

    event TokenCreated(address indexed token, string name, string symbol, uint256 cap);

    modifier onlyMultisig() {
        if (msg.sender != multisig) revert NotMultisig();
        _;
    }

    constructor(address _multisig) {
        require(_multisig != address(0), "multisig=0");
        multisig = _multisig;
    }

    function createToken(string calldata name_, string calldata symbol_, uint256 cap_)
        external
        onlyMultisig
        returns (address token)
    {
        token = address(new MintableERC20(name_, symbol_, cap_, multisig));
        tokens.push(token);
        emit TokenCreated(token, name_, symbol_, cap_);
    }

    function tokensLength() external view returns (uint256) {
        return tokens.length;
    }
}
Contract ABI
JSON
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_multisig",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "NotMultisig",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "symbol",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "cap",
        "type": "uint256"
      }
    ],
    "name": "TokenCreated",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "name_",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "symbol_",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "cap_",
        "type": "uint256"
      }
    ],
    "name": "createToken",
    "outputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "multisig",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "tokens",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokensLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]

YOUR GATEWAY TO TUVEN

Connect to possibility.

Choose a wallet. Your assets stay in your control.

No wallet detected. On mobile, open this page in your wallet’s built-in browser.
Get MetaMask

Tuven · Chain 99359 · USDX