// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
/// @notice Immutable-monetary-policy ERC-20 deployed by ZavoFactory.
/// @dev The entire supply is created once for the deploying factory. There is deliberately no
/// owner, mint, tax, blacklist, pause, metadata mutation, or privileged withdrawal path.
contract ZavoToken {
error ZeroAddress();
error InsufficientBalance(address account, uint256 available, uint256 required);
error InsufficientAllowance(
address owner, address spender, uint256 available, uint256 required
);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
string public name;
string public symbol;
string public metadataURI;
uint8 public constant decimals = 18;
uint256 public immutable totalSupply;
address public immutable creator;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
constructor(
string memory name_,
string memory symbol_,
string memory metadataURI_,
address creator_,
uint256 supply_
) {
if (creator_ == address(0)) revert ZeroAddress();
name = name_;
symbol = symbol_;
metadataURI = metadataURI_;
creator = creator_;
totalSupply = supply_;
balanceOf[msg.sender] = supply_;
emit Transfer(address(0), msg.sender, supply_);
}
function transfer(address to, uint256 amount) external returns (bool) {
_transfer(msg.sender, to, amount);
return true;
}
function approve(address spender, uint256 amount) external returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) external returns (bool) {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) {
if (allowed < amount) {
revert InsufficientAllowance(from, msg.sender, allowed, amount);
}
unchecked {
allowance[from][msg.sender] = allowed - amount;
}
emit Approval(from, msg.sender, allowed - amount);
}
_transfer(from, to, amount);
return true;
}
function _transfer(address from, address to, uint256 amount) internal {
if (to == address(0)) revert ZeroAddress();
uint256 balance = balanceOf[from];
if (balance < amount) revert InsufficientBalance(from, balance, amount);
unchecked {
balanceOf[from] = balance - amount;
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "metadataURI_",
"type": "string",
"internalType": "string"
},
{
"name": "creator_",
"type": "address",
"internalType": "address"
},
{
"name": "supply_",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "available",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "available",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "creator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "metadataURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816302d05d3f146107dd5750806303ee438c146106c557806306fdde03146105b0578063095ea7b31461052b57806318160ddd146104f157806323b872dd1461036f578063313ce5671461035457806370a082311461030f57806395d89b4114610138578063a9059cbb146101075763dd62ed3e14610095575f80fd5b34610103576040600319360112610103576100ae610873565b73ffffffffffffffffffffffffffffffffffffffff6100cb610896565b91165f52600460205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b346101035760406003193601126101035761012d610123610873565b60243590336108b9565b602060405160018152f35b34610103575f600319360112610103576040515f600154908160011c60018316928315610305575b6020821084146102d857818552849390811561027857506001146101fe575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101d157604082905281906101cd908261082b565b0390f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60015f90815291507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b81831061025c57505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061017f565b6020919350806001915483858801015201910190918392610228565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061017f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b90607f1690610160565b346101035760206003193601126101035773ffffffffffffffffffffffffffffffffffffffff61033d610873565b165f526003602052602060405f2054604051908152f35b34610103575f60031936011261010357602060405160128152f35b3461010357606060031936011261010357610388610873565b610390610896565b6044359073ffffffffffffffffffffffffffffffffffffffff831692835f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810361040c575b5061012d93506108b9565b8381106104ae5783810390855f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f526020528160405f205581116104815761012d946040519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203393a384610401565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8484608492604051927f91beda24000000000000000000000000000000000000000000000000000000008452600484015233602484015260448301526064820152fd5b34610103575f6003193601126101035760206040517f0000000000000000000000000000000000000001431e0fae6d7217caa00000008152f35b3461010357604060031936011261010357610544610873565b73ffffffffffffffffffffffffffffffffffffffff60243591335f52600460205260405f208282165f526020528260405f205560405192835216907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610103575f600319360112610103576040515f5f54908160011c600183169283156106bb575b6020821084146102d85781855284939081156102785750600114610643575003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101d157604082905281906101cd908261082b565b5f80805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b81831061069f57505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061017f565b602091935080600191548385880101520191019091839261066b565b90607f16906105d7565b34610103575f600319360112610103576040515f600254908160011c600183169283156107d3575b6020821084146102d85781855284939081156102785750600114610759575003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101d157604082905281906101cd908261082b565b60025f90815291507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8183106107b757505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061017f565b6020919350806001915483858801015201910190918392610783565b90607f16906106ed565b34610103575f6003193601126101035760209073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000de4842169298f4773df9c1225e85ac09b1060854168152f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010357565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361010357565b919073ffffffffffffffffffffffffffffffffffffffff169182156109825773ffffffffffffffffffffffffffffffffffffffff1690815f52600360205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600384520360405f2055845f526003825260405f20818154019055604051908152a3565b827fdb42144d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220e40d3b5f5127e9023bf086aa9a5dec723201bb01c3c83dc7f871540f56b1fdd164736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x5c8816…3693c6 | 15 days agoFri, 31 Jul 2026 09:34:39 UTC | Transfer | [0] 0x000000000000…b1060854 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…d8f30104 |
| 0x5c8816…3693c6 | 15 days agoFri, 31 Jul 2026 09:34:39 UTC | Approval | [0] 0x000000000000…b1060854 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…00000000 |
| 0xe789dd…fa48c7 | 15 days agoFri, 31 Jul 2026 09:34:38 UTC | Approval | [0] 0x000000000000…b1060854 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…d8f30104 |
| 0x58d13e…040a1f | 15 days agoFri, 31 Jul 2026 09:27:22 UTC | Transfer | [0] 0x000000000000…431da57c [1] 0x000000000000…b1060854 data: 0x000000000000000000…ae79eda5 |
| 0x132fef…652cd6 | 15 days agoFri, 31 Jul 2026 09:27:21 UTC | Transfer | [0] 0x000000000000…3b00d5eb [1] 0x000000000000…b1060854 data: 0x000000000000000000…5f4daae6 |
| 0x5c4da3…1d7973 | 15 days agoFri, 31 Jul 2026 09:27:21 UTC | Transfer | [0] 0x000000000000…c3f2f150 [1] 0x000000000000…b1060854 data: 0x000000000000000000…5b10ddee |
| 0xb48fe4…29d4de | 15 days agoFri, 31 Jul 2026 09:27:20 UTC | Transfer | [0] 0x000000000000…5ceb9547 [1] 0x000000000000…b1060854 data: 0x000000000000000000…91c36860 |
| 0xecc088…c2d0bb | 15 days agoFri, 31 Jul 2026 09:27:19 UTC | Transfer | [0] 0x000000000000…a4b33e66 [1] 0x000000000000…b1060854 data: 0x000000000000000000…605fbf45 |
| 0xd37453…5b7866 | 15 days agoFri, 31 Jul 2026 09:27:18 UTC | Transfer | [0] 0x000000000000…5740a359 [1] 0x000000000000…b1060854 data: 0x000000000000000000…2e6481a7 |
| 0xf09dfb…7dabed | 15 days agoFri, 31 Jul 2026 09:27:18 UTC | Transfer | [0] 0x000000000000…81272b6f [1] 0x000000000000…b1060854 data: 0x000000000000000000…69b454d9 |
| 0xae8367…5d9715 | 15 days agoFri, 31 Jul 2026 09:27:17 UTC | Transfer | [0] 0x000000000000…ad2c3136 [1] 0x000000000000…b1060854 data: 0x000000000000000000…ac100dc7 |
| 0x384e39…9ee533 | 15 days agoFri, 31 Jul 2026 09:27:17 UTC | Transfer | [0] 0x000000000000…d917e398 [1] 0x000000000000…b1060854 data: 0x000000000000000000…b492f988 |
| 0x7e04b5…d3e09f | 15 days agoFri, 31 Jul 2026 09:27:16 UTC | Transfer | [0] 0x000000000000…0a0e3793 [1] 0x000000000000…b1060854 data: 0x000000000000000000…4d2349ab |
| 0xce97d2…4208f0 | 15 days agoFri, 31 Jul 2026 09:27:15 UTC | Transfer | [0] 0x000000000000…5559cab5 [1] 0x000000000000…b1060854 data: 0x000000000000000000…1fffb68d |
| 0xc40c95…8be728 | 15 days agoFri, 31 Jul 2026 09:27:15 UTC | Transfer | [0] 0x000000000000…88763d22 [1] 0x000000000000…b1060854 data: 0x000000000000000000…87d2449d |
| 0x9ba66e…6321ce | 15 days agoFri, 31 Jul 2026 09:27:14 UTC | Transfer | [0] 0x000000000000…948d8470 [1] 0x000000000000…b1060854 data: 0x000000000000000000…c36a84bf |
| 0x65a886…3c647a | 15 days agoFri, 31 Jul 2026 09:27:13 UTC | Transfer | [0] 0x000000000000…d02e38de [1] 0x000000000000…b1060854 data: 0x000000000000000000…4dd0996c |
| 0x1f9e58…15c713 | 15 days agoFri, 31 Jul 2026 09:27:13 UTC | Transfer | [0] 0x000000000000…34e0294a [1] 0x000000000000…b1060854 data: 0x000000000000000000…b77bcae3 |
| 0x225233…3219b4 | 21 days agoSun, 26 Jul 2026 00:15:30 UTC | Transfer | [0] 0x000000000000…d917e398 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…f9acc369 |
| 0x225233…3219b4 | 21 days agoSun, 26 Jul 2026 00:15:30 UTC | Approval | [0] 0x000000000000…d917e398 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…00000000 |
| 0x380b70…bd2c70 | 21 days agoSun, 26 Jul 2026 00:09:22 UTC | Approval | [0] 0x000000000000…d917e398 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…f9acc369 |
| 0x66e3e5…4bb931 | 21 days agoSat, 25 Jul 2026 22:16:22 UTC | Transfer | [0] 0x000000000000…88763d22 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…2880afd4 |
| 0x66e3e5…4bb931 | 21 days agoSat, 25 Jul 2026 22:16:22 UTC | Approval | [0] 0x000000000000…88763d22 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…00000000 |
| 0x035a4c…5c8834 | 21 days agoSat, 25 Jul 2026 22:13:45 UTC | Approval | [0] 0x000000000000…88763d22 [1] 0x000000000000…c3b6c2b0 data: 0x000000000000000000…2880afd4 |
| 0xc46f92…b19e73 | 21 days agoSat, 25 Jul 2026 22:04:39 UTC | Transfer | [0] 0x000000000000…c3b6c2b0 [1] 0x000000000000…ad2c3136 data: 0x000000000000000000…6355dea9 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xe789dd…fa48c7 | Approve | 24,073,267 | 15 days agoFri, 31 Jul 2026 09:34:38 UTC | 0xde48…0854 | IN | You can buy land | $0.000 ETH | 0.00000092 | |
| 0x58d13e…040a1f | Transfer | 24,068,919 | 15 days agoFri, 31 Jul 2026 09:27:22 UTC | 0x076f…a57c | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0x132fef…652cd6 | Transfer | 24,068,912 | 15 days agoFri, 31 Jul 2026 09:27:21 UTC | 0xac40…d5eb | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0x5c4da3…1d7973 | Transfer | 24,068,905 | 15 days agoFri, 31 Jul 2026 09:27:21 UTC | 0x6226…f150 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0xb48fe4…29d4de | Transfer | 24,068,895 | 15 days agoFri, 31 Jul 2026 09:27:20 UTC | 0x591b…9547 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0xecc088…c2d0bb | Transfer | 24,068,889 | 15 days agoFri, 31 Jul 2026 09:27:19 UTC | 0xb907…3e66 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0xd37453…5b7866 | Transfer | 24,068,883 | 15 days agoFri, 31 Jul 2026 09:27:18 UTC | 0xba70…a359 | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0xf09dfb…7dabed | Transfer | 24,068,877 | 15 days agoFri, 31 Jul 2026 09:27:18 UTC | 0x4b72…2b6f | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0xae8367…5d9715 | Transfer | 24,068,871 | 15 days agoFri, 31 Jul 2026 09:27:17 UTC | 0x4eaf…3136 | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0x384e39…9ee533 | Transfer | 24,068,865 | 15 days agoFri, 31 Jul 2026 09:27:17 UTC | 0xd7a1…e398 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0x7e04b5…d3e09f | Transfer | 24,068,859 | 15 days agoFri, 31 Jul 2026 09:27:16 UTC | 0x906a…3793 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0xce97d2…4208f0 | Transfer | 24,068,853 | 15 days agoFri, 31 Jul 2026 09:27:15 UTC | 0xbf1c…cab5 | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0xc40c95…8be728 | Transfer | 24,068,847 | 15 days agoFri, 31 Jul 2026 09:27:15 UTC | 0x40ad…3d22 | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0x9ba66e…6321ce | Transfer | 24,068,840 | 15 days agoFri, 31 Jul 2026 09:27:14 UTC | 0x3946…8470 | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0x65a886…3c647a | Transfer | 24,068,834 | 15 days agoFri, 31 Jul 2026 09:27:13 UTC | 0x4552…38de | IN | You can buy land | $0.000 ETH | 0.00000059 | |
| 0x1f9e58…15c713 | Transfer | 24,068,828 | 15 days agoFri, 31 Jul 2026 09:27:13 UTC | 0x58b6…294a | IN | You can buy land | $0.000 ETH | 0.00000058 | |
| 0x380b70…bd2c70 | Approve | 19,428,981 | 21 days agoSun, 26 Jul 2026 00:09:22 UTC | 0xd7a1…e398 | IN | You can buy land | $0.000 ETH | 0.00000321 | |
| 0x035a4c…5c8834 | Approve | 19,359,861 | 21 days agoSat, 25 Jul 2026 22:13:45 UTC | 0x40ad…3d22 | IN | You can buy land | $0.000 ETH | 0.00000331 | |
| 0x66a525…066dc0 | Approve | 16,849,255 | 24 days agoThu, 23 Jul 2026 00:16:11 UTC | 0xbf1c…cab5 | IN | You can buy land | $0.000 ETH | 0.00000435 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 16,820,916 | 24 days agoWed, 22 Jul 2026 23:28:48 UTC | 0xcc3060…4040f6 | CREATE2 | 0xb5147ca5 | 0x918f…eb53 | IN | 0x90d4…785f | 0 ETH |