EquifoldToken
0x9d783133a3ff9ba27fa1605547368cf9a316341e
Verification
Verified
v0.8.24+commit.e11b9ed9
Type
Contract
3,383 bytes
ABI entries
36
16 read · 5 write
License
none
Contract information
- Address
- 0x9d783133a3ff9ba27fa1605547368cf9a316341e
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.24+commit.e11b9ed9
- Optimization
- Enabled
- Creator
- 0xE40A3445dF…B9EA3Cb4d0
- Creation tx
- 0x460c8c719c…e7c449e991
Token
- Name
- EquiFold
- Symbol
- EQUI
- Decimals
- 18
- Holders
- 108
- Market
- View token page →
Read contract (16)
MAX_DECIMALS() → uint8
MIN_DECIMALS() → uint8
TOKEN_VERSION() → uint32
allowance(address, address) → uint256
balanceOf(address) → uint256
creator() → address
decimals() → uint8
factory() → address
isBurnable() → bool
launchContract() → address
launchTimestamp() → uint48
metadataURI() → string
name() → string
projectNumber() → uint256
symbol() → string
totalSupply() → uint256
Events (2)
ApprovalTransfer
ABI
[
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "initialSupply",
"type": "uint256"
},
{
"internalType": "bool",
"name": "burnable",
"type": "bool"
},
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "uint256",
"name": "projectNumber",
"type": "uint256"
},
{
"internalType": "string",
"name": "metadataURI",
"type": "string"
},
{
"internalType": "address",
"name": "launchContract",
"type": "address"
}
],
"internalType": "struct EquifoldToken.Initialization",
"name": "initial",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "BurningDisabled",
"type": "error"
},
{
"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": "InvalidAddress",
"type": "error"
},
{
"inputs": [],
"name": "InvalidDecimals",
"type": "error"
},
{
"inputs": [],
"name": "InvalidMetadata",
"type": "error"
},
{
"inputs": [],
"name": "InvalidProject",
"type": "error"
},
{
"inputs": [],
"name": "InvalidSupply",
"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": [],
"name": "MAX_DECIMALS",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_DECIMALS",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "TOKEN_VERSION",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"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": [
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "burnFrom",
"outputs": [],
"stateMutability": "nonpayable",
"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": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isBurnable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "launchContract",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "launchTimestamp",
"outputs": [
{
"internalType": "uint48",
"name": "",
"type": "uint48"
}
],
"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": "projectNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"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.24;
import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { ERC20Burnable } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
/// @title Equifold Standard Token
/// @author Equifold
/// @notice Fixed-supply token implementation used by every standard-token launch, including EQUI.
contract EquifoldToken is ERC20Burnable {
error BurningDisabled();
error InvalidAddress();
error InvalidDecimals();
error InvalidMetadata();
error InvalidProject();
error InvalidSupply();
uint8 public constant MIN_DECIMALS = 6;
uint8 public constant MAX_DECIMALS = 18;
uint32 public constant TOKEN_VERSION = 1;
address public immutable creator;
address public immutable launchContract;
address public immutable factory;
uint256 public immutable projectNumber;
uint48 public immutable launchTimestamp;
bool public immutable isBurnable;
uint8 private immutable _configuredDecimals;
string public metadataURI;
struct Initialization {
string name;
string symbol;
uint8 decimals;
uint256 initialSupply;
bool burnable;
address creator;
uint256 projectNumber;
string metadataURI;
address launchContract;
}
constructor(
Initialization memory initial
) ERC20(initial.name, initial.symbol) {
if (initial.creator == address(0) || initial.launchContract == address(0)) {
revert InvalidAddress();
}
if (initial.launchContract.code.length == 0) revert InvalidAddress();
if (initial.projectNumber == 0) revert InvalidProject();
if (initial.decimals < MIN_DECIMALS || initial.decimals > MAX_DECIMALS) {
revert InvalidDecimals();
}
if (initial.initialSupply == 0) revert InvalidSupply();
if (
bytes(initial.name).length == 0 || bytes(initial.name).length > 128
|| bytes(initial.symbol).length == 0 || bytes(initial.symbol).length > 32
|| bytes(initial.metadataURI).length == 0 || bytes(initial.metadataURI).length > 512
) revert InvalidMetadata();
creator = initial.creator;
launchContract = initial.launchContract;
factory = msg.sender;
projectNumber = initial.projectNumber;
launchTimestamp = uint48(block.timestamp);
isBurnable = initial.burnable;
_configuredDecimals = initial.decimals;
metadataURI = initial.metadataURI;
_mint(initial.launchContract, initial.initialSupply);
}
function decimals() public view override returns (uint8) {
return _configuredDecimals;
}
function burn(
uint256 value
) public override {
if (!isBurnable) revert BurningDisabled();
super.burn(value);
}
function burnFrom(
address account,
uint256 value
) public override {
if (!isBurnable) revert BurningDisabled();
super.burnFrom(account, value);
}
}
Chain explorer1631msChain node75ms