ETH Price: $2,025.69 (+5.66%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

ContractCreator

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve243660842026-02-02 2:06:475 days ago1769998007IN
0xE9b1cFEA...0921664ED
0 ETH0.000003450.10593696
Transfer243371722026-01-29 1:17:359 days ago1769649455IN
0xE9b1cFEA...0921664ED
0 ETH0.000002430.05670677
Transfer243371572026-01-29 1:14:359 days ago1769649275IN
0xE9b1cFEA...0921664ED
0 ETH0.000002520.05862642
Transfer243371212026-01-29 1:07:239 days ago1769648843IN
0xE9b1cFEA...0921664ED
0 ETH0.000002240.05213671
Transfer243371152026-01-29 1:06:119 days ago1769648771IN
0xE9b1cFEA...0921664ED
0 ETH0.000002350.05477219
Transfer243370842026-01-29 0:59:599 days ago1769648399IN
0xE9b1cFEA...0921664ED
0 ETH0.000003050.05076513
Transfer243366202026-01-28 23:26:479 days ago1769642807IN
0xE9b1cFEA...0921664ED
0 ETH0.000002110.04906342
Transfer243366122026-01-28 23:25:119 days ago1769642711IN
0xE9b1cFEA...0921664ED
0 ETH0.000002570.05985512
Transfer243365982026-01-28 23:22:239 days ago1769642543IN
0xE9b1cFEA...0921664ED
0 ETH0.000002380.05550399
Transfer243365792026-01-28 23:18:359 days ago1769642315IN
0xE9b1cFEA...0921664ED
0 ETH0.000002410.05616193
Transfer243365752026-01-28 23:17:479 days ago1769642267IN
0xE9b1cFEA...0921664ED
0 ETH0.000002570.05988558
Transfer243362992026-01-28 22:21:599 days ago1769638919IN
0xE9b1cFEA...0921664ED
0 ETH0.000002070.04821309
Transfer243362902026-01-28 22:20:119 days ago1769638811IN
0xE9b1cFEA...0921664ED
0 ETH0.000002890.04808589
Transfer243361772026-01-28 21:57:359 days ago1769637455IN
0xE9b1cFEA...0921664ED
0 ETH0.000002040.0474567
Transfer243361322026-01-28 21:48:359 days ago1769636915IN
0xE9b1cFEA...0921664ED
0 ETH0.000003130.05213382
Transfer243360982026-01-28 21:41:479 days ago1769636507IN
0xE9b1cFEA...0921664ED
0 ETH0.000002020.04712931
Transfer243360912026-01-28 21:40:239 days ago1769636423IN
0xE9b1cFEA...0921664ED
0 ETH0.000002020.04695711
Transfer243360772026-01-28 21:37:359 days ago1769636255IN
0xE9b1cFEA...0921664ED
0 ETH0.000001920.04485025
Transfer243360702026-01-28 21:36:119 days ago1769636171IN
0xE9b1cFEA...0921664ED
0 ETH0.000003150.05250777
Transfer243215682026-01-26 21:04:3511 days ago1769461475IN
0xE9b1cFEA...0921664ED
0 ETH0.000006070.1588912
Transfer243154742026-01-26 0:40:1112 days ago1769388011IN
0xE9b1cFEA...0921664ED
0 ETH0.000002090.05472441
Transfer243154732026-01-26 0:39:5912 days ago1769387999IN
0xE9b1cFEA...0921664ED
0 ETH0.000002170.05676108
Transfer243154722026-01-26 0:39:4712 days ago1769387987IN
0xE9b1cFEA...0921664ED
0 ETH0.000002030.0533016
Transfer243154722026-01-26 0:39:4712 days ago1769387987IN
0xE9b1cFEA...0921664ED
0 ETH0.000002030.0533016
Transfer243154702026-01-26 0:39:2312 days ago1769387963IN
0xE9b1cFEA...0921664ED
0 ETH0.00000220.05763809
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x602c3d81223545372025-04-26 16:54:23286 days ago1745686463  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Minimal Proxy Contract for 0xc35b3fcad7e37c7af7f61b105e1d978fdba2c223

Contract Name:
Token

Compiler Version
v0.8.29+commit.ab55807c

Optimization Enabled:
Yes with 9999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2025-04-09
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.29;

error OnlyExternal();
error Unauthorized();
error InvalidMetadata();
error DeploymentFailed();

/// @title Coins
/// @notice Singleton for ERC6909 & ERC20s
/// @author z0r0z & 0xc0de4c0ffee & kobuta23
contract Coins {
    event MetadataSet(uint256 indexed);
    event OwnershipTransferred(uint256 indexed);

    event OperatorSet(address indexed, address indexed, bool);
    event Approval(address indexed, address indexed, uint256 indexed, uint256);
    event Transfer(address, address indexed, address indexed, uint256 indexed, uint256);

    Token immutable implementation = new Token{salt: keccak256("")}();

    mapping(uint256 id => Metadata) _metadata;

    mapping(uint256 id => uint256) public totalSupply;
    mapping(uint256 id => address owner) public ownerOf;

    mapping(address owner => mapping(uint256 id => uint256)) public balanceOf;
    mapping(address owner => mapping(address operator => bool)) public isOperator;
    mapping(address owner => mapping(address spender => mapping(uint256 id => uint256))) public
        allowance;

    modifier onlyOwnerOf(uint256 id) {
        require(msg.sender == ownerOf[id], Unauthorized());
        _;
    }

    constructor() payable {}

    // METADATA

    struct Metadata {
        string name;
        string symbol;
        string tokenURI;
    }

    function name(uint256 id) public view returns (string memory) {
        Metadata storage meta = _metadata[id];
        return bytes(meta.tokenURI).length != 0 ? meta.name : Token(address(uint160(id))).name();
    }

    function symbol(uint256 id) public view returns (string memory) {
        Metadata storage meta = _metadata[id];
        return bytes(meta.tokenURI).length != 0 ? meta.symbol : Token(address(uint160(id))).symbol();
    }

    function decimals(uint256 id) public view returns (uint8) {
        return bytes(_metadata[id].tokenURI).length != 0
            ? 18
            : uint8(Token(address(uint160(id))).decimals());
    }

    function tokenURI(uint256 id) public view returns (string memory) {
        return _metadata[id].tokenURI;
    }

    // CREATION

    function create(
        string calldata _name,
        string calldata _symbol,
        string calldata _tokenURI,
        address owner,
        uint256 supply
    ) public {
        require(bytes(_tokenURI).length != 0, InvalidMetadata());
        uint256 id;
        Token _implementation = implementation;
        bytes32 salt = keccak256(abi.encodePacked(_name, address(this), _symbol));
        assembly ("memory-safe") {
            mstore(0x21, 0x5af43d3d93803e602a57fd5bf3)
            mstore(0x14, _implementation)
            mstore(0x00, 0x602c3d8160093d39f33d3d3d3d363d3d37363d73)
            id := create2(0, 0x0c, 0x35, salt)
            if iszero(id) {
                mstore(0x00, 0x30116425) // `DeploymentFailed()`
                revert(0x1c, 0x04)
            }
            mstore(0x21, 0)
        }
        _metadata[id] = Metadata(_name, _symbol, _tokenURI);
        emit Transfer(
            msg.sender,
            address(0),
            ownerOf[id] = owner,
            id,
            balanceOf[owner][id] = totalSupply[id] = supply
        );
    }

    // WRAPPING

    function wrap(Token token, uint256 amount) public {
        uint256 id = uint160(address(token));
        require(bytes(_metadata[id].tokenURI).length == 0, OnlyExternal());
        token.transferFrom(msg.sender, address(this), amount);
        _mint(msg.sender, id, amount);
    }

    function unwrap(Token token, uint256 amount) public {
        _burn(msg.sender, uint256(uint160(address(token))), amount);
        token.transfer(msg.sender, amount);
    }

    // MINT/BURN

    function mint(address to, uint256 id, uint256 amount) public onlyOwnerOf(id) {
        _mint(to, id, amount);
    }

    function burn(uint256 id, uint256 amount) public {
        _burn(msg.sender, id, amount);
    }

    // GOVERNANCE

    function setMetadata(uint256 id, string calldata _tokenURI) public onlyOwnerOf(id) {
        require(bytes(_tokenURI).length != 0, InvalidMetadata());
        _metadata[id].tokenURI = _tokenURI;
        emit MetadataSet(id);
    }

    function transferOwnership(uint256 id, address newOwner) public onlyOwnerOf(id) {
        ownerOf[id] = newOwner;
        emit OwnershipTransferred(id);
    }

    // ERC6909

    function transfer(address to, uint256 id, uint256 amount) public returns (bool) {
        balanceOf[msg.sender][id] -= amount;
        unchecked {
            balanceOf[to][id] += amount;
        }
        emit Transfer(msg.sender, msg.sender, to, id, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 id, uint256 amount)
        public
        returns (bool)
    {
        if (msg.sender != address(uint160(id))) {
            if (!isOperator[from][msg.sender]) {
                if (allowance[from][msg.sender][id] != type(uint256).max) {
                    allowance[from][msg.sender][id] -= amount;
                }
            }
        }
        balanceOf[from][id] -= amount;
        unchecked {
            balanceOf[to][id] += amount;
        }
        emit Transfer(msg.sender, from, to, id, amount);
        return true;
    }

    function approve(address spender, uint256 id, uint256 amount) public returns (bool) {
        allowance[msg.sender][spender][id] = amount;
        emit Approval(msg.sender, spender, id, amount);
        return true;
    }

    function setOperator(address operator, bool approved) public returns (bool) {
        isOperator[msg.sender][operator] = approved;
        emit OperatorSet(msg.sender, operator, approved);
        return true;
    }

    // ERC20 APPROVAL

    function setAllowance(address owner, address spender, uint256 id, uint256 amount)
        public
        payable
        returns (bool)
    {
        require(msg.sender == address(uint160(id)), Unauthorized());
        allowance[owner][spender][id] = amount;
        emit Approval(owner, spender, id, amount);
        return true;
    }

    // ERC165

    function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
        return interfaceId == 0x01ffc9a7 // ERC165
            || interfaceId == 0x0f632fb3; // ERC6909
    }

    // INTERNAL MINT/BURN

    function _mint(address to, uint256 id, uint256 amount) internal {
        totalSupply[id] += amount;
        unchecked {
            balanceOf[to][id] += amount;
        }
        emit Transfer(msg.sender, address(0), to, id, amount);
    }

    function _burn(address from, uint256 id, uint256 amount) internal {
        balanceOf[from][id] -= amount;
        unchecked {
            totalSupply[id] -= amount;
        }
        emit Transfer(msg.sender, from, address(0), id, amount);
    }
}

contract Token {
    event Approval(address indexed, address indexed, uint256);
    event Transfer(address indexed, address indexed, uint256);

    uint256 public constant decimals = 18;
    address immutable coins = msg.sender;

    constructor() payable {}

    function name() public view returns (string memory) {
        return Coins(coins).name(uint160(address(this)));
    }

    function symbol() public view returns (string memory) {
        return Coins(coins).symbol(uint160(address(this)));
    }

    function totalSupply() public view returns (uint256) {
        return Coins(coins).totalSupply(uint160(address(this)));
    }

    function balanceOf(address owner) public view returns (uint256) {
        return Coins(coins).balanceOf(owner, uint160(address(this)));
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        if (Coins(coins).isOperator(owner, spender)) return type(uint256).max;
        return Coins(coins).allowance(owner, spender, uint160(address(this)));
    }

    function approve(address spender, uint256 amount) public returns (bool) {
        emit Approval(msg.sender, spender, amount);
        return Coins(coins).setAllowance(msg.sender, spender, uint160(address(this)), amount);
    }

    function transfer(address to, uint256 amount) public returns (bool) {
        emit Transfer(msg.sender, to, amount);
        return Coins(coins).transferFrom(msg.sender, to, uint160(address(this)), amount);
    }

    function transferFrom(address from, address to, uint256 amount) public returns (bool) {
        require(allowance(from, msg.sender) >= amount, Unauthorized());
        emit Transfer(from, to, amount);
        return Coins(coins).transferFrom(from, to, uint160(address(this)), amount);
    }
}

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.