SMCAT

Description:

Smart contract deployed on Ethereum with Factory features.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contracts/SMCAT.sol": {
      "content": "/**\r
 *Submitted for verification at Etherscan.io on 2025-11-05\r
*/\r
\r
// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
/**\r
 * @title SMCAT Token – MayaCat Regulated Security Token\r
 * @dev ERC-20 token integrated with ERC-3643 compliance logic.\r
 * - ERC-20: Token Standard\r
 * - ERC-734/735: Identity (via external IdentityRegistry)\r
 * - ERC-3643: Real-World Asset Compliance Structure\r
 *\r
 * ------------------------------------------------------------------------\r
 * Creator / Developer : UK Financial LTD (United Kingdom)\r
 * Backed Asset        : 21,000,000 Maya Preferred PRA (Preferred Class Tokens)\r
 * Custody Vault       : uk-financial-ltd-irrevocable-treasury-vault.eth\r
 * Origin Reference    : Replacement for MayaCat (MCAT) on Solana\r
 * Solana Contract     : 2RbSgY3vd1SfnMst4jKeK7fyfedmiqoB7gah4inf73jt\r
 * Total Supply        : 50,000,000 SMCAT (reduced from 2,000,000,000)\r
 * Reduction           : 97.5% cut for benefit of coinholders\r
 * ------------------------------------------------------------------------\r
 * Token Hierarchy:\r
 * 1️⃣  SMPRA – First ERC-3643 Security Token (Preferred Class)\r
 * 2️⃣  SMCAT – Second ERC-3643 Security Token (MayaCat Regulated)\r
 * ------------------------------------------------------------------------\r
 */\r
\r
interface IIdentityRegistry {\r
    function isVerified(address user) external view returns (bool);\r
}\r
\r
interface ICompliance {\r
    function canTransfer(address from, address to, uint256 value) external view returns (bool);\r
}\r
\r
contract SMCAT {\r
    string public name = "MayaCat Regulated Security Token";\r
    string public symbol = "SMCAT";\r
    uint8 public decimals = 18;\r
    uint256 public totalSupply;\r
\r
    mapping(address => uint256) public balanceOf;\r
    mapping(address => mapping(address => uint256)) public allowance;\r
\r
    address public owner;\r
    IIdentityRegistry public identityRegistry;\r
    ICompliance public compliance;\r
\r
    modifier onlyOwner() {\r
        require(msg.sender == owner, "Not owner");\r
        _;\r
    }\r
\r
    constructor(\r
        address _identityRegistry,\r
        address _compliance\r
    ) {\r
        owner = 0xAF2587b7e09d7816Fc0867Ea3A8B3058bBaAa16F; // UK Financial LTD Primary Owner\r
        identityRegistry = IIdentityRegistry(_identityRegistry);\r
        compliance = ICompliance(_compliance);\r
\r
        // Mint full supply (50,000,000 * 10^18) to owner upon deployment\r
        _mint(owner, 50000000 * 10 ** uint256(decimals));\r
    }\r
\r
    function _mint(address to, uint256 amount) internal {\r
        require(to != address(0), "Invalid address");\r
        balanceOf[to] += amount;\r
        totalSupply += amount;\r
        emit Transfer(address(0), to, amount);\r
    }\r
\r
    function transfer(address to, uint256 value) external returns (bool) {\r
        require(identityRegistry.isVerified(msg.sender), "Sender not verified (ERC-734/735)");\r
        require(identityRegistry.isVerified(to), "Recipient not verified (ERC-734/735)");\r
        require(compliance.canTransfer(msg.sender, to, value), "Transfer blocked (ERC-3643)");\r
        require(balanceOf[msg.sender] >= value, "Insufficient balance");\r
\r
        balanceOf[msg.sender] -= value;\r
        balanceOf[to] += value;\r
        emit Transfer(msg.sender, to, value);\r
        return true;\r
    }\r
\r
    function approve(address spender, uint256 value) external returns (bool) {\r
        allowance[msg.sender][spender] = value;\r
        emit Approval(msg.sender, spender, value);\r
        return true;\r
    }\r
\r
    function transferFrom(address from, address to, uint256 value) external returns (bool) {\r
        require(identityRegistry.isVerified(from), "From not verified (ERC-734/735)");\r
        require(identityRegistry.isVerified(to), "To not verified (ERC-734/735)");\r
        require(compliance.canTransfer(from, to, value), "Transfer blocked (ERC-3643)");\r
        require(balanceOf[from] >= value, "Insufficient balance");\r
        require(allowance[from][msg.sender] >= value, "Not allowed");\r
\r
        allowance[from][msg.sender] -= value;\r
        balanceOf[from] -= value;\r
        balanceOf[to] += value;\r
        emit Transfer(from, to, value);\r
        return true;\r
    }\r
\r
    event Transfer(address indexed from, address indexed to, uint256 value);\r
    event Approval(address indexed owner, address indexed spender, uint256 value);\r
}"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": []
  }
}}

Tags:
Factory|addr:0x4198fa66779c1ee49c10adfb378fa1d5e3314d5c|verified:true|block:23738875|tx:0x6e88e4c172af950b7e39cc71f8d9c4163a7c9fa041de659717de03f987760d57|first_check:1762427985

Submitted on: 2025-11-06 12:19:45

Comments

Log in to comment.

No comments yet.