KaleidoMirror

0xb14f91e91d0f3a38bee4044db9da8f35a8683d4d

Verification
Verified
v0.8.26+commit.8a97fa7a
Type
Contract
3,728 bytes
ABI entries
24
10 read · 8 write
License
mit

Contract information

Address
0xb14f91e91d0f3a38bee4044db9da8f35a8683d4d
Chain
Robinhood Chain (4663)
Compiler
v0.8.26+commit.8a97fa7a
Optimization
Enabled
Creation tx
0x6bba72749b…93633d805e

Token

Name
Kaleido Shares
Symbol
SHARE
Decimals
Holders
146

Read contract (10)

balanceOf(address)uint256
contractURI()string
getApproved(uint256)address
isApprovedForAll(address, address)bool
name()string
ownerOf(uint256)address
supportsInterface(bytes4)bool
symbol()string
token()address
tokenURI(uint256)string

Events (3)

ApprovalApprovalForAllTransfer

ABI

[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_token",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "NonERC721Receiver",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyToken",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "emitApproval",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "emitApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "emitTransfer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "id",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "token",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]

Source code

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.26;

// Derived from Prism's PrismMirror (https://github.com/0xsolazy/prism, MIT © 0xsolazy).
// See docs/fork-map.md §2.5, §5. The "Shares" collection ("Kaleido Shares"); historical code name Quotra/QOTA
// survives only in git history.
//
// Thin ERC-721 façade: zero storage of its own — every call forwards to the core KaleidoToken,
// which owns all NFT state and calls back the emit* hooks (onlyToken) so events originate here.

interface IKaleidoTokenNFT {
    function nftOwnerOf(uint256 tokenId) external view returns (address);
    function nftBalanceOf(address owner) external view returns (uint256);
    function nftTokenURI(uint256 tokenId) external view returns (string memory);
    function nftContractURI() external view returns (string memory);
    function nftGetApproved(uint256 tokenId) external view returns (address);
    function nftIsApprovedForAll(address owner, address operator) external view returns (bool);

    function handleNFTTransfer(address from, address to, uint256 tokenId, address caller) external;
    function handleNFTApprove(address spender, uint256 tokenId, address caller) external;
    function handleNFTSetApprovalForAll(address operator, bool approved, address caller) external;
}

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data)
        external
        returns (bytes4);
}

/// @notice The Shares — 5000 NFT shares of the protocol LP position (1 whole KALEIDO = 1 Share = 1/5000).
contract KaleidoMirror {
    /*                            ERRORS                          */

    /// @dev Caller is not the core token.
    error OnlyToken();

    /// @dev Recipient did not accept the safeTransfer.
    error NonERC721Receiver();

    /*                            EVENTS                          */

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*                           METADATA                         */

    /// @dev Collection metadata — the NFT "Shares" of the protocol (final brand set in VEG2-1148).
    string internal constant NAME = "Kaleido Shares";
    string internal constant SYMBOL = "SHARE";

    string public constant name = NAME;
    string public constant symbol = SYMBOL;

    /// @dev The core KaleidoToken contract that owns all state.
    address public immutable token;

    /*                          MODIFIERS                         */

    modifier onlyToken() {
        if (msg.sender != token) revert OnlyToken();
        _;
    }

    /*                         CONSTRUCTOR                        */

    constructor(address _token) {
        token = _token;
    }

    /*                           ERC721                           */

    /// @dev Returns the owner of `tokenId`. Reverts on the token side if unminted.
    function ownerOf(uint256 tokenId) external view returns (address) {
        return IKaleidoTokenNFT(token).nftOwnerOf(tokenId);
    }

    /// @dev Returns the number of Shares owned by `owner`.
    function balanceOf(address owner) external view returns (uint256) {
        return IKaleidoTokenNFT(token).nftBalanceOf(owner);
    }

    /// @dev Returns the metadata URI for `tokenId`.
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        return IKaleidoTokenNFT(token).nftTokenURI(tokenId);
    }

    /// @dev ERC-7572 collection-level metadata (marketplaces). Forwarded to the core's replaceable renderer.
    function contractURI() external view returns (string memory) {
        return IKaleidoTokenNFT(token).nftContractURI();
    }

    /// @dev Returns the address approved to spend `tokenId`, or address(0).
    function getApproved(uint256 tokenId) external view returns (address) {
        return IKaleidoTokenNFT(token).nftGetApproved(tokenId);
    }

    /// @dev Returns whether `operator` is approved for all of `owner`'s NFTs.
    function isApprovedForAll(address owner, address operator) external view returns (bool) {
        return IKaleidoTokenNFT(token).nftIsApprovedForAll(owner, operator);
    }

    /// @dev ERC-165 introspection: ERC-165, ERC-721, ERC-721-Metadata.
    function supportsInterface(bytes4 id) external pure returns (bool) {
        return id == 0x01ffc9a7 || id == 0x80ac58cd || id == 0x5b5e139f;
    }

    /// @dev Approves `to` for `tokenId`. Forwarded to the core, which performs all checks.
    function approve(address to, uint256 tokenId) external {
        IKaleidoTokenNFT(token).handleNFTApprove(to, tokenId, msg.sender);
    }

    /// @dev Sets operator approval for `msg.sender`'s entire collection.
    function setApprovalForAll(address operator, bool approved) external {
        IKaleidoTokenNFT(token).handleNFTSetApprovalForAll(operator, approved, msg.sender);
    }

    /// @dev Transfers `tokenId` from `from` to `to`. Also moves 1 KALEIDO on the core to keep balances synced.
    function transferFrom(address from, address to, uint256 tokenId) public {
        IKaleidoTokenNFT(token).handleNFTTransfer(from, to, tokenId, msg.sender);
    }

    /// @dev `transferFrom` + ERC-721 receiver check.
    function safeTransferFrom(address from, address to, uint256 tokenId) external {
        safeTransferFrom(from, to, tokenId, "");
    }

    /// @dev `transferFrom` + ERC-721 receiver check with custom data.
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {
        transferFrom(from, to, tokenId);
        if (to.code.length > 0) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, data) returns (bytes4 ret) {
                if (ret != IERC721Receiver.onERC721Received.selector) revert NonERC721Receiver();
            } catch {
                revert NonERC721Receiver();
            }
        }
    }

    /*                     CORE → MIRROR EVENTS                   */

    /// @dev Core-only: emit ERC-721 Transfer from this contract's address.
    function emitTransfer(address from, address to, uint256 tokenId) external onlyToken {
        emit Transfer(from, to, tokenId);
    }

    /// @dev Core-only: emit single-token Approval.
    function emitApproval(address owner, address approved, uint256 tokenId) external onlyToken {
        emit Approval(owner, approved, tokenId);
    }

    /// @dev Core-only: emit ApprovalForAll.
    function emitApprovalForAll(address owner, address operator, bool approved) external onlyToken {
        emit ApprovalForAll(owner, operator, approved);
    }
}
Chain explorer5850msChain node79ms