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
- Creator
- 0x6689aB375A…C547478Cf1
- Creation tx
- 0x6bba72749b…93633d805e
Token
- Name
- Kaleido Shares
- Symbol
- SHARE
- Decimals
- —
- Holders
- 146
- Market
- View token page →
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