Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x0257fFD7eA2eBba4aAA090C7AdBDD032A08c1F74
Balance 0 ETH
Nonce 1
Code Size 5796 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

5796 bytes
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a9059cbb1161007c578063a9059cbb146102df578063b2520a7c146102f2578063c4f3a8531461031a578063d8fb93371461032d578063dd62ed3e14610340578063f2fde38b1461037957600080fd5b806370a082311461026d578063715018a61461029657806379cc67901461029e5780637eee288d146102b15780638da5cb5b146102c457806395d89b411461015257600080fd5b8063313ce56711610115578063313ce567146101ed57806338b82092146101fc578063404e51291461020f57806342966c68146102245780634b0bddd21461023757806363a846f81461024a57600080fd5b806306fdde0314610152578063095ea7b31461018257806316c02129146101a557806318160ddd146101c857806323b872dd146101da575b600080fd5b60408051808201825260058152640b48a9892b60db1b60208201529051610179919061136a565b60405180910390f35b6101956101903660046113cf565b61038c565b6040519015158152602001610179565b6101956101b33660046113f9565b60066020526000908152604090205460ff1681565b6000545b604051908152602001610179565b6101956101e8366004611414565b610410565b60405160128152602001610179565b61019561020a366004611450565b61059c565b61022261021d366004611483565b610648565b005b6101956102323660046114bf565b6106a7565b610222610245366004611483565b6106f3565b6101956102583660046113f9565b60056020526000908152604090205460ff1681565b6101cc61027b3660046113f9565b6001600160a01b031660009081526001602052604090205490565b610195610748565b6101956102ac3660046113cf565b610784565b6101956102bf3660046113cf565b610811565b6003546040516001600160a01b039091168152602001610179565b6101956102ed3660046113cf565b610855565b6103056103003660046113cf565b610997565b60408051928352602083019190915201610179565b6101956103283660046113f9565b610a29565b6101cc61033b3660046113f9565b610aeb565b6101cc61034e3660046114d8565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6101956103873660046113f9565b610bb8565b60006001600160a01b0383166103fb5760405162461bcd60e51b815260206004820152602960248201527f617070726f7665203a2053686f756c64206e6f7420617070726f7665207a65726044820152686f206164647265737360b81b60648201526084015b60405180910390fd5b610406338484610c78565b5060019392505050565b600083828061041e83610aeb565b6104289190611521565b6001600160a01b038316600090815260016020526040902054101561045f5760405162461bcd60e51b81526004016103f290611534565b6001600160a01b0385166104cc5760405162461bcd60e51b815260206004820152602e60248201527f7472616e7366657246726f6d203a2053686f756c64206e6f742073656e64207460448201526d6f207a65726f206164647265737360901b60648201526084016103f2565b6001600160a01b03851660009081526006602052604090205460ff1615801561050e57506001600160a01b03861660009081526006602052604090205460ff16155b6105485760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b60448201526064016103f2565b610553868686610ce1565b506001600160a01b03861660009081526002602090815260408083203380855292529091205461058f91889161058a908890611579565b610c78565b5060019695505050505050565b3360009081526005602052604081205460ff1615156001146105d05760405162461bcd60e51b81526004016103f29061158c565b6001600160a01b0384166106265760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742073656e6420746f207a65726f2061646472657373000000000060448201526064016103f2565b610631338585610ce1565b5061063d848484610d89565b506001949350505050565b3360009081526005602052604090205460ff16151560011461067c5760405162461bcd60e51b81526004016103f29061158c565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60006106b33383610f9e565b60405183815290915033907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a2506001919050565b6003546001600160a01b0316331461071d5760405162461bcd60e51b81526004016103f2906115c3565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6003546000906001600160a01b031633146107755760405162461bcd60e51b81526004016103f2906115c3565b61077f6000611036565b905090565b60006107908383610f9e565b50826001600160a01b03167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516107cc91815260200190565b60405180910390a26001600160a01b03831660009081526002602090815260408083203380855292529091205461080a91859161058a908690611579565b9392505050565b3360009081526005602052604081205460ff1615156001146108455760405162461bcd60e51b81526004016103f29061158c565b61080a8383611099565b92915050565b600033828061086383610aeb565b61086d9190611521565b6001600160a01b03831660009081526001602052604090205410156108a45760405162461bcd60e51b81526004016103f290611534565b6001600160a01b03851661090d5760405162461bcd60e51b815260206004820152602a60248201527f7472616e73666572203a2053686f756c64206e6f742073656e6420746f207a65604482015269726f206164647265737360b01b60648201526084016103f2565b6001600160a01b03851660009081526006602052604090205460ff1615801561094657503360009081526006602052604090205460ff16155b6109805760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b60448201526064016103f2565b61098b338686610ce1565b50600195945050505050565b6001600160a01b03821660009081526004602052604081208054829190849081106109c4576109c4611612565b906000526020600020906002020160000154915060046000856001600160a01b03166001600160a01b031681526020019081526020016000208381548110610a0e57610a0e611612565b90600052602060002090600202016001015490509250929050565b3360009081526005602052604081205460ff161515600114610a5d5760405162461bcd60e51b81526004016103f29061158c565b6001600160a01b0382166000908152600460205260409020545b8015610ae0576001600160a01b0383166000908152600460205260409020610acd908490610aa6600185611579565b81548110610ab657610ab6611612565b906000526020600020906002020160010154611099565b5080610ad881611628565b915050610a77565b50600190505b919050565b60008060005b6001600160a01b038416600090815260046020526040902054811015610bb1576001600160a01b0384166000908152600460205260409020805442919083908110610b3e57610b3e611612565b90600052602060002090600202016001015410610b9f576001600160a01b0384166000908152600460205260409020805482908110610b7f57610b7f611612565b90600052602060002090600202016000015482610b9c9190611521565b91505b80610ba98161163f565b915050610af1565b5092915050565b6003546000906001600160a01b03163314610be55760405162461bcd60e51b81526004016103f2906115c3565b6001600160a01b038216610c6f5760405162461bcd60e51b815260206004820152604560248201527f4f776e61626c652f7472616e736665724f776e657273686970203a2063616e6e60448201527f6f74207472616e73666572206f776e65727368697020746f207a65726f206164606482015264647265737360d81b608482015260a4016103f2565b61084f82611036565b6001600160a01b03838116600081815260026020908152604080832094871680845294825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b6001600160a01b038316600090815260016020526040812054610d05908390611579565b6001600160a01b038086166000908152600160205260408082209390935590851681522054610d35908390611521565b6001600160a01b0380851660008181526001602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ccf9086815260200190565b6000428211610dd35760405162461bcd60e51b815260206004820152601660248201527510d85b9b9bdd081cd95d08191d59481d1bc81c185cdd60521b60448201526064016103f2565b82610ddd85610aeb565b610de79190611521565b6001600160a01b0385166000908152600160205260409020541015610e625760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b656420746f74616c2073686f756c6420626520736d616c6c6572207460448201526a68616e2062616c616e636560a81b60648201526084016103f2565b6000610e6e85846112de565b905060008112610f00576001600160a01b0385166000908152600460205260408120805483908110610ea257610ea2611612565b60009182526020909120600290910201549050610ebf8582611521565b6001600160a01b0387166000908152600460205260409020805484908110610ee957610ee9611612565b600091825260209091206002909102015550610f4f565b6001600160a01b03851660009081526004602090815260408083208151808301909252878252818301878152815460018181018455928652939094209151600290930290910191825591519101555b60408051858152602081018590526001600160a01b038716917f49eaf4942f1237055eb4cfa5f31c9dfe50d5b4ade01e021f7de8be2fbbde557b910160405180910390a2506001949350505050565b6001600160a01b038216600090815260016020526040812054610fc2908390611579565b6001600160a01b03841660009081526001602052604081209190915554610fea908390611579565b60009081556040518381526001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350600192915050565b6003546040516000916001600160a01b03808516929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908490a350600380546001600160a01b0319166001600160a01b0392909216919091179055600190565b60006110a483610aeb565b6000036110ec5760405162461bcd60e51b815260206004820152601660248201527510d85b9b9bdd081cd95d08191d59481d1bc81c185cdd60521b60448201526064016103f2565b60005b6001600160a01b0384166000908152600460205260409020548110156112d4576001600160a01b038416600090815260046020526040902080548491908390811061113c5761113c611612565b906000526020600020906002020160010154036112c2576001600160a01b038416600090815260046020526040812080548390811061117d5761117d611612565b9060005260206000209060020201600001549050846001600160a01b03167f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f1826040516111cc91815260200190565b60405180910390a26001600160a01b038516600090815260046020526040902080546111fa90600190611579565b8154811061120a5761120a611612565b906000526020600020906002020160046000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061124e5761124e611612565b60009182526020808320845460029093020191825560019384015493909101929092556001600160a01b038716815260049091526040902080548061129557611295611658565b6000828152602081206002600019909301928302018181556001908101919091559155925061084f915050565b806112cc8161163f565b9150506110ef565b5060009392505050565b6000805b6001600160a01b03841660009081526004602052604090205481101561135f576001600160a01b038416600090815260046020526040902080548491908390811061132f5761132f611612565b9060005260206000209060020201600101540361134d57905061084f565b806113578161163f565b9150506112e2565b506000199392505050565b600060208083528351808285015260005b818110156113975785810183015185820160400152820161137b565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610ae657600080fd5b600080604083850312156113e257600080fd5b6113eb836113b8565b946020939093013593505050565b60006020828403121561140b57600080fd5b61080a826113b8565b60008060006060848603121561142957600080fd5b611432846113b8565b9250611440602085016113b8565b9150604084013590509250925092565b60008060006060848603121561146557600080fd5b61146e846113b8565b95602085013595506040909401359392505050565b6000806040838503121561149657600080fd5b61149f836113b8565b9150602083013580151581146114b457600080fd5b809150509250929050565b6000602082840312156114d157600080fd5b5035919050565b600080604083850312156114eb57600080fd5b6114f4836113b8565b9150611502602084016113b8565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561084f5761084f61150b565b60208082526025908201527f43616e6e6f742073656e64206d6f7265207468616e20756e6c6f636b656420616040820152641b5bdd5b9d60da1b606082015260800190565b8181038181111561084f5761084f61150b565b6020808252601e908201527f46756e6374696f6e2063616c6c65642062792061646d696e20757365722e0000604082015260600190565b6020808252602f908201527f4f776e61626c65203a2046756e6374696f6e2063616c6c656420627920756e6160408201526e3aba3437b934bd32b2103ab9b2b91760891b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000816116375761163761150b565b506000190190565b6000600182016116515761165161150b565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a8ceb2d1af525366c018cd93b1952bc221d439028516895c3666a92b7fd19d0f64736f6c63430008120033

Verified Source Code Partial Match

Compiler: v0.8.18+commit.87f61d96 EVM: paris Optimization: Yes (200 runs)
ZELIX.sol 365 lines
/**
 *Submitted for verification at Etherscan.io on 2021-10-29
*/

/**
 *Submitted for verification at Etherscan.io on 2021-03-10
*/

// Sources flattened with hardhat v2.1.1 https://hardhat.org

// File contracts/erc20/ERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;

abstract contract ERC20 {

    uint256 private _totalSupply;
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    /*
   * Internal Functions for ERC20 standard logics
   */

    function _transfer(address from, address to, uint256 amount)
        internal
        returns (bool success)
    {
        _balances[from] = _balances[from] - amount;
        _balances[to] = _balances[to] + amount;
        emit Transfer(from, to, amount);
        success = true;
    }

    function _approve(address owner, address spender, uint256 amount)
        internal
        returns (bool success)
    {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
        success = true;
    }

    function _mint(address recipient, uint256 amount)
        internal
        returns (bool success)
    {
        _totalSupply = _totalSupply + amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(address(0), recipient, amount);
        success = true;
    }

    function _burn(address burned, uint256 amount)
        internal
        returns (bool success)
    {
        _balances[burned] = _balances[burned] - amount;
        _totalSupply = _totalSupply - amount;
        emit Transfer(burned, address(0), amount);
        success = true;
    }

    /*
   * public view functions to view common data
   */

    function totalSupply() external view returns (uint256 total) {
        total = _totalSupply;
    }
    function balanceOf(address owner) external view returns (uint256 balance) {
        balance = _balances[owner];
    }

    function allowance(address owner, address spender)
        external
        view
        returns (uint256 remaining)
    {
        remaining = _allowances[owner][spender];
    }

    /*
   * External view Function Interface to implement on final contract
   */
    function name() virtual external view returns (string memory tokenName);
    function symbol() virtual external view returns (string memory tokenSymbol);
    function decimals() virtual external view returns (uint8 tokenDecimals);

    /*
   * External Function Interface to implement on final contract
   */
    function transfer(address to, uint256 amount)
        virtual
        external
        returns (bool success);
    function transferFrom(address from, address to, uint256 amount)
        virtual
        external
        returns (bool success);
    function approve(address spender, uint256 amount)
        virtual
        external
        returns (bool success);
}

abstract contract Ownable {
    address internal _owner;

    event OwnershipTransferred(
        address indexed currentOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(
            msg.sender == _owner,
            "Ownable : Function called by unauthorized user."
        );
        _;
    }

    function owner() external view returns (address ownerAddress) {
        ownerAddress = _owner;
    }

    function transferOwnership(address newOwner)
        public
        onlyOwner
        returns (bool success)
    {
        require(newOwner != address(0), "Ownable/transferOwnership : cannot transfer ownership to zero address");
        success = _transferOwnership(newOwner);
    }

    function renounceOwnership() external onlyOwner returns (bool success) {
        success = _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal returns (bool success) {
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
        success = true;
    }
}


abstract contract ERC20Lockable is ERC20, Ownable {
    struct LockInfo {
        uint256 amount;
        uint256 due;
    }

    mapping(address => LockInfo[]) internal _locks;
    mapping(address => bool) public admin;

    event Lock(address indexed from, uint256 amount, uint256 due);
    event Unlock(address indexed from, uint256 amount);

    modifier checkLock(address from, uint256 amount) {
        require(_balances[from] >= totalLocked(from) + amount, "Cannot send more than unlocked amount");
        _;
    }

    modifier onlyAdmin() {
        require(admin[msg.sender] == true, "Function called by admin user.");
        _;
    }
    function setAdmin(address _admin, bool _approved) external onlyOwner {
        admin[_admin] = _approved;
    }

    function totalLocked(address _from) public view returns (uint256) {
        uint256 lockedAmount;
        for (uint256 i = 0; i < _locks[_from].length; i++) {
            if (_locks[_from][i].due >= block.timestamp) {
                lockedAmount += _locks[_from][i].amount;
            }
        }
        return lockedAmount;
    }

    function lockIdx(address _from, uint256 _due) internal view returns (int256) {
    for (uint256 i = 0; i < _locks[_from].length; i++) {
        if (_locks[_from][i].due == _due) {
            return int256(i); // Return the index as a signed integer
        }
    }
    return -1;
}

    function _lock(address from, uint256 amount, uint256 due) internal returns (bool success) {
        require(due > block.timestamp, "Cannot set due to past");
        require(_balances[from] >= totalLocked(from) + amount, "Locked total should be smaller than balance");
        int256 idx = lockIdx(from, due);
        if (idx >= 0) {
            uint256 existingAmount = _locks[from][uint256(idx)].amount;
            _locks[from][uint256(idx)].amount = existingAmount + amount;
        } else {
            _locks[from].push(LockInfo(amount, due));
        }
        emit Lock(from, amount, due);
    return true;
}

    function _unlock(address from, uint256 due) internal returns (bool success) {
        require(totalLocked(from) != 0, "Cannot set due to past");
        for (uint256 i = 0; i < _locks[from].length; i++) {
            if (_locks[from][i].due == due) {
                uint256 unlockedAmount = _locks[from][i].amount;
                emit Unlock(from, unlockedAmount);
                _locks[from][i] = _locks[from][_locks[from].length - 1];
                _locks[from].pop();
                return true;
            }
        }
        return false;
    }

    function unlock(address from, uint256 due) external onlyAdmin returns (bool success) {
        return _unlock(from, due);
    }

    function unlockAll(address from) external onlyAdmin returns (bool success) {
        for (uint256 i = _locks[from].length; i > 0; i--) {
            _unlock(from, _locks[from][i - 1].due);
        }
        return true;
    }

    function transferWithLockUp(address recipient, uint256 amount, uint256 due) external onlyAdmin returns (bool success) {
        require(recipient != address(0), "Cannot send to zero address");
        _transfer(msg.sender, recipient, amount);
        _lock(recipient, amount, due);
        return true;
    }

    function lockInfo(address locked, uint256 index) external view returns (uint256 amount, uint256 due) {
        amount = _locks[locked][index].amount;
        due = _locks[locked][index].due;
    }
}

abstract contract ERC20Burnable is ERC20 {
    event Burn(address indexed burned, uint256 amount);

    function burn(uint256 amount) 
    external
    returns (bool success)
    {
        success = _burn(msg.sender, amount);
        emit Burn(msg.sender, amount);
        success = true;
    }

    function burnFrom(address burned, uint256 amount) 
    external
    returns (bool success)
    {
        _burn(burned, amount);
        emit Burn(burned, amount);
        success = _approve(
            burned,
            msg.sender,
            _allowances[burned][msg.sender] - amount
        );
    }
}

contract ZELIX is
    ERC20Lockable,
    ERC20Burnable
{
    string constant private _name = "ZELIX";
    string constant private _symbol = "ZELIX";
    uint8 constant private _decimals = 18;
    uint256 constant private _initial_supply = 10_000_000_000;
    mapping(address => bool) public blacklists;


    constructor() {
        _mint(_owner, _initial_supply * (10**uint256(_decimals)));
        admin[_owner] = true;
    }

    function blacklist(address _address, bool _approved ) external onlyAdmin   {
        blacklists[_address] = _approved;
    }

    function transfer(address to, uint256 amount)
        override
        external
        checkLock(msg.sender, amount)
        returns (bool success)
    {
        require(
            to != address(0),
            "transfer : Should not send to zero address"
        );
        require(!blacklists[to] && !blacklists[msg.sender], "Blacklisted");

        _transfer(msg.sender, to, amount);
        success = true;
    }

    function transferFrom(address from, address to, uint256 amount)
        override
        external
        checkLock(from, amount)
        returns (bool success)
    {
        require(
            to != address(0),
            "transferFrom : Should not send to zero address"
        );
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        _transfer(from, to, amount);
        _approve(
            from,
            msg.sender,
            _allowances[from][msg.sender] - amount
        );
        success = true;
    }

    function approve(address spender, uint256 amount)
        override
        external
        returns (bool success)
    {
        require(
            spender != address(0),
            "approve : Should not approve zero address"
        );
        _approve(msg.sender, spender, amount);
        success = true;
    }

    function name() override external pure returns (string memory tokenName) {
        tokenName = _name;
    }

    function symbol() override external pure returns (string memory tokenSymbol) {
        tokenSymbol = _symbol;
    }

    function decimals() override external pure returns (uint8 tokenDecimals) {
        tokenDecimals = _decimals;
    }
}

Read Contract

admin 0x63a846f8 → bool
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
blacklists 0x16c02129 → bool
decimals 0x313ce567 → uint8
lockInfo 0xb2520a7c → uint256, uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalLocked 0xd8fb9337 → uint256
totalSupply 0x18160ddd → uint256

Write Contract 12 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
blacklist 0x404e5129
address _address
bool _approved
burn 0x42966c68
uint256 amount
returns: bool
burnFrom 0x79cc6790
address burned
uint256 amount
returns: bool
renounceOwnership 0x715018a6
No parameters
returns: bool
setAdmin 0x4b0bddd2
address _admin
bool _approved
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
returns: bool
transferWithLockUp 0x38b82092
address recipient
uint256 amount
uint256 due
returns: bool
unlock 0x7eee288d
address from
uint256 due
returns: bool
unlockAll 0xc4f3a853
address from
returns: bool

Recent Transactions

No transactions found for this address