StokToken
0x25cf3e5d8fb6941438eba60b148fb6649c91b78f
Verification
Verified
v0.8.26+commit.8a97fa7a
Type
Contract
3,628 bytes
ABI entries
28
14 read · 3 write
License
none
Contract information
- Address
- 0x25cf3e5d8fb6941438eba60b148fb6649c91b78f
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.26+commit.8a97fa7a
- Optimization
- Enabled
- Creator
- 0x733d02415C…1EF90eEc77
- Creation tx
- 0x63af98bd54…ae8e14b6b6
Token
- Name
- Stok
- Symbol
- STOK
- Decimals
- 18
- Holders
- 132
- Market
- View token page →
Read contract (14)
allowance(address, address) → uint256
balanceOf(address) → uint256
creationBlock() → uint256
creator() → address
decimals() → uint8
description() → string
getTokenInfo() → address, string, string, tuple
logo() → string
metadataURI() → string
name() → string
socials() → string, string, string, string, string
symbol() → string
tokenURI() → string
totalSupply() → uint256
Events (2)
ApprovalTransfer
ABI
[
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "string",
"name": "logo_",
"type": "string"
},
{
"internalType": "string",
"name": "description_",
"type": "string"
},
{
"components": [
{
"internalType": "string",
"name": "twitter",
"type": "string"
},
{
"internalType": "string",
"name": "telegram",
"type": "string"
},
{
"internalType": "string",
"name": "discord",
"type": "string"
},
{
"internalType": "string",
"name": "website",
"type": "string"
},
{
"internalType": "string",
"name": "farcaster",
"type": "string"
}
],
"internalType": "struct StokToken.Socials",
"name": "socials_",
"type": "tuple"
},
{
"internalType": "string",
"name": "metadataURI_",
"type": "string"
},
{
"internalType": "uint256",
"name": "totalSupply_",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient_",
"type": "address"
},
{
"internalType": "address",
"name": "creator_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"inputs": [],
"name": "ZeroRecipient",
"type": "error"
},
{
"inputs": [],
"name": "ZeroSupply",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "creationBlock",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "creator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "description",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getTokenInfo",
"outputs": [
{
"internalType": "address",
"name": "tokenDeployer",
"type": "address"
},
{
"internalType": "string",
"name": "tokenLogo",
"type": "string"
},
{
"internalType": "string",
"name": "tokenDescription",
"type": "string"
},
{
"components": [
{
"internalType": "string",
"name": "twitter",
"type": "string"
},
{
"internalType": "string",
"name": "telegram",
"type": "string"
},
{
"internalType": "string",
"name": "discord",
"type": "string"
},
{
"internalType": "string",
"name": "website",
"type": "string"
},
{
"internalType": "string",
"name": "farcaster",
"type": "string"
}
],
"internalType": "struct StokToken.Socials",
"name": "tokenSocials",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "logo",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "metadataURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "socials",
"outputs": [
{
"internalType": "string",
"name": "twitter",
"type": "string"
},
{
"internalType": "string",
"name": "telegram",
"type": "string"
},
{
"internalType": "string",
"name": "discord",
"type": "string"
},
{
"internalType": "string",
"name": "website",
"type": "string"
},
{
"internalType": "string",
"name": "farcaster",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]Source code
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/// @title StokToken
/// @notice Minimal, fully immutable fixed-supply ERC-20 for Stok's Uniswap-V3 launcher.
/// No owner, no minting after construction, no blacklist, no tax, no pause, no upgrades.
/// @dev Exposes the SAME on-chain metadata interface as Pons's launched token — `logo()`,
/// `socials()`, and `getTokenInfo()` — so Robinhood Chain aggregators (GMGN/Axiom) that read
/// those fields directly pick up the image + socials. `logo` is a raw image URI (ipfs://…),
/// NOT a JSON document.
contract StokToken is ERC20 {
struct Socials {
string twitter;
string telegram;
string discord;
string website;
string farcaster;
}
address public immutable creator;
uint256 public immutable creationBlock;
string public logo; // raw image URI (ipfs://<cid>) — read by aggregators
string public description;
Socials private _socials;
string private _metadataURI; // ipfs://<metadata-json-cid> — standard NFT-style metadata layer
error ZeroSupply();
error ZeroRecipient();
constructor(
string memory name_,
string memory symbol_,
string memory logo_,
string memory description_,
Socials memory socials_,
string memory metadataURI_,
uint256 totalSupply_,
address recipient_,
address creator_
) ERC20(name_, symbol_) {
if (totalSupply_ == 0) revert ZeroSupply();
if (recipient_ == address(0)) revert ZeroRecipient();
logo = logo_;
description = description_;
_socials = socials_;
_metadataURI = metadataURI_;
creator = creator_;
creationBlock = block.number;
_mint(recipient_, totalSupply_);
}
/// @notice Standard IPFS metadata JSON (ipfs://<cid>) — for wallets/explorers/indexers.
/// Additive; the Pons-compatible logo()/socials()/getTokenInfo() are unchanged.
function metadataURI() external view returns (string memory) {
return _metadataURI;
}
/// @notice Alias of {metadataURI} for tools that look for `tokenURI()`.
function tokenURI() external view returns (string memory) {
return _metadataURI;
}
/// @notice The five social links (Pons-compatible tuple ordering).
function socials()
external
view
returns (string memory twitter, string memory telegram, string memory discord, string memory website, string memory farcaster)
{
Socials memory s = _socials;
return (s.twitter, s.telegram, s.discord, s.website, s.farcaster);
}
/// @notice Creator + metadata in Pons's launcher-compatible tuple, so aggregators read it directly.
function getTokenInfo()
external
view
returns (address tokenDeployer, string memory tokenLogo, string memory tokenDescription, Socials memory tokenSocials)
{
return (creator, logo, description, _socials);
}
}
Chain explorer4299msChain node75ms