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": []
}
}}
Submitted on: 2025-11-06 12:19:45
Comments
Log in to comment.
No comments yet.