Address Contract Partially Verified
Address
0x848896470d989F30503d8f883c331f63b73b66Ea
Balance
0 ETH
Nonce
1
Code Size
4973 bytes
Creator
0xD3CeabD5...0C7e at tx 0xcf03bc6c...17bf18
Indexed Transactions
0 (1 on-chain, 1.2% indexed)
Contract Bytecode
4973 bytes
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063644fab74116100ad578063a457c2d711610071578063a457c2d714610292578063a9059cbb146102a5578063dd62ed3e146102b8578063f2fde38b146102cb578063f435f5a7146102de57600080fd5b8063644fab741461021d57806370a0823114610230578063715018a6146102595780638da5cb5b1461026157806395d89b411461028a57600080fd5b806323b872dd116100f457806323b872dd146101c25780632f6c493c146101d5578063313ce567146101e857806339509351146101f757806342966c681461020a57600080fd5b806306fdde0314610131578063095ea7b31461014f57806317abee1e1461017257806318160ddd146101875780631c260b5f14610199575b600080fd5b6101396102f1565b6040516101469190610fe7565b60405180910390f35b61016261015d366004611051565b610383565b6040519015158152602001610146565b61018561018036600461107b565b61039d565b005b6004545b604051908152602001610146565b61018b6101a736600461107b565b6001600160a01b031660009081526001602052604090205490565b6101626101d0366004611096565b6103e2565b6101856101e336600461107b565b610406565b60405160128152602001610146565b610162610205366004611051565b61043f565b6101856102183660046110d2565b610461565b61018561022b366004611051565b6104b0565b61018b61023e36600461107b565b6001600160a01b031660009081526002602052604090205490565b6101856104ee565b60075461010090046001600160a01b03166040516001600160a01b039091168152602001610146565b61013961052a565b6101626102a0366004611051565b610539565b6101626102b3366004611051565b6105b4565b61018b6102c63660046110eb565b6105c2565b6101856102d936600461107b565b6105ed565b6101856102ec36600461107b565b61068b565b6060600580546103009061111e565b80601f016020809104026020016040519081016040528092919081815260200182805461032c9061111e565b80156103795780601f1061034e57610100808354040283529160200191610379565b820191906000526020600020905b81548152906001019060200180831161035c57829003601f168201915b5050505050905090565b60003361039181858561072a565b60019150505b92915050565b6007546001600160a01b036101009091041633146103d65760405162461bcd60e51b81526004016103cd90611158565b60405180910390fd5b6103df8161084e565b50565b6000336103f08582856108c7565b6103fb858585610941565b506001949350505050565b6007546001600160a01b036101009091041633146104365760405162461bcd60e51b81526004016103cd90611158565b6103df81610bee565b60003361039181858561045283836105c2565b61045c91906111a3565b61072a565b6007546001600160a01b036101009091041633146104915760405162461bcd60e51b81526004016103cd90611158565b6103df336104a16012600a61129a565b6104ab90846112a6565b610c93565b6007546001600160a01b036101009091041633146104e05760405162461bcd60e51b81526004016103cd90611158565b6104ea8282610d9e565b5050565b6007546001600160a01b0361010090910416331461051e5760405162461bcd60e51b81526004016103cd90611158565b6105286000610e69565b565b6060600680546103009061111e565b6000338161054782866105c2565b9050838110156105a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103cd565b6103fb828686840361072a565b600033610391818585610941565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6007546001600160a01b0361010090910416331461061d5760405162461bcd60e51b81526004016103cd90611158565b6001600160a01b0381166106825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cd565b6103df81610e69565b6007546001600160a01b036101009091041633146106bb5760405162461bcd60e51b81526004016103cd90611158565b6103df81610ec3565b6000806106d183856111a3565b9050838110156107235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103cd565b9392505050565b6001600160a01b03831661078c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103cd565b6001600160a01b0382166107ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103cd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166108745760405162461bcd60e51b81526004016103cd906112bd565b6001600160a01b03811660008181526001602090815260408083209290925590519182527f2411a6bc22519fe98a9db2ddbd83af278807704eac69a546c5d52fd3e0b2db9191015b60405180910390a150565b60006108d384846105c2565b9050600019811461093b578181101561092e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103cd565b61093b848484840361072a565b50505050565b6001600160a01b0383166109a55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103cd565b6001600160a01b038216610a075760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103cd565b6001600160a01b03831660009081526020819052604090205460ff161515600103610a745760405162461bcd60e51b815260206004820152601760248201527f45524332303a2073656e646572206973206c6f636b656400000000000000000060448201526064016103cd565b42610a94846001600160a01b031660009081526001602052604090205490565b1115600003610ae55760405162461bcd60e51b815260206004820152601c60248201527f45524332303a2073656e6465722069732054696d65206c6f636b65640000000060448201526064016103cd565b6001600160a01b03831660009081526002602052604090205481811015610b5d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103cd565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610b949084906111a3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be091815260200190565b60405180910390a350505050565b6001600160a01b038116610c445760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206c6f636b20746f20746865207a65726f20616464726573730060448201526064016103cd565b6001600160a01b03811660008181526020818152604091829020805460ff1916905590519182527f7e6adfec7e3f286831a0200a754127c171a2da564078722cb97704741bbdb0ea91016108bc565b6001600160a01b038216610cf35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103cd565b610d3081604051806060016040528060228152602001611316602291396001600160a01b0385166000908152600260205260409020549190610f6b565b6001600160a01b038316600090815260026020526040902055600454610d569082610fa5565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610dc45760405162461bcd60e51b81526004016103cd906112bd565b80610e115760405162461bcd60e51b815260206004820152601960248201527f54696d656c6f636b3a20697320746865207a65726f206461790000000000000060448201526064016103cd565b6001600160a01b038216600081815260016020908152604091829020849055815192835282018390527fde6a7e6fbd24aa298ba27260cb50684143d79f1132db1e14ba235be2a6030610910160405180910390a15050565b600780546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038116610f195760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206c6f636b20746f20746865207a65726f20616464726573730060448201526064016103cd565b6001600160a01b03811660008181526020818152604091829020805460ff1916600117905590519182527f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15991016108bc565b60008184841115610f8f5760405162461bcd60e51b81526004016103cd9190610fe7565b506000610f9c8486611302565b95945050505050565b600061072383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f6b565b600060208083528351808285015260005b8181101561101457858101830151858201604001528201610ff8565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461104c57600080fd5b919050565b6000806040838503121561106457600080fd5b61106d83611035565b946020939093013593505050565b60006020828403121561108d57600080fd5b61072382611035565b6000806000606084860312156110ab57600080fd5b6110b484611035565b92506110c260208501611035565b9150604084013590509250925092565b6000602082840312156110e457600080fd5b5035919050565b600080604083850312156110fe57600080fd5b61110783611035565b915061111560208401611035565b90509250929050565b600181811c9082168061113257607f821691505b60208210810361115257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156103975761039761118d565b600181815b808511156111f15781600019048211156111d7576111d761118d565b808516156111e457918102915b93841c93908002906111bb565b509250929050565b60008261120857506001610397565b8161121557506000610397565b816001811461122b576002811461123557611251565b6001915050610397565b60ff8411156112465761124661118d565b50506001821b610397565b5060208310610133831016604e8410600b8410161715611274575081810a610397565b61127e83836111b6565b80600019048211156112925761129261118d565b029392505050565b600061072383836111f9565b80820281158282048414176103975761039761118d565b60208082526025908201527f54696d656c6f636b3a206163636f756e7420697320746865207a65726f206164604082015264647265737360d81b606082015260800190565b818103818111156103975761039761118d56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212203fe700f74ea5548898ca46ab5172abc21185bd0f63975f0c5ea87ba3051e1d9a64736f6c63430008120033
Verified Source Code Partial Match
Compiler: v0.8.18+commit.87f61d96
EVM: paris
Optimization: Yes (200 runs)
CreateToken.sol 405 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly { size := extcodesize(account) }
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
contract Lockable is Context {
event Locked(address account);
event Unlocked(address account);
mapping(address => bool) private _locked;
function locked(address _to) internal view returns (bool) {
return _locked[_to];
}
function _lock(address to) internal virtual {
require(to != address(0), "ERC20: lock to the zero address");
_locked[to] = true;
emit Locked(to);
}
function _unlock(address to) internal virtual {
require(to != address(0), "ERC20: lock to the zero address");
_locked[to] = false;
emit Unlocked(to);
}
}
contract TimeLock {
using SafeMath for uint256;
using Address for address;
event SetTimeLock(address account, uint timestamp);
event RemoveTimeLock(address account);
mapping(address => uint) private _endTimestamp;
function getEndTime(address to) public view virtual returns(uint) {
return _endTimestamp[to];
}
function _setTimeLock(address to, uint256 timestamp) internal virtual {
require(to != address(0), "Timelock: account is the zero address");
require(timestamp != uint256(0), "Timelock: is the zero day");
_endTimestamp[to] = timestamp;
emit SetTimeLock(to, timestamp);
}
function _removeTimeLock(address to) internal virtual {
require(to != address(0), "Timelock: account is the zero address");
_endTimestamp[to] = 0;
emit RemoveTimeLock(to);
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata, Lockable, TimeLock {
using SafeMath for uint256;
using Address for address;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(locked(from) != true, "ERC20: sender is locked");
require((getEndTime(from) <= block.timestamp) != false, "ERC20: sender is Time locked");
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
contract ERC20Pauser is Context, ERC20, Ownable {
constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_){}
function mint(address account, uint256 amount) internal virtual onlyOwner {
_mint(account, amount);
}
function lock(address account) public virtual onlyOwner {
_lock(account);
}
function unlock(address account) public virtual onlyOwner {
_unlock(account);
}
function burn(uint256 amount) public virtual onlyOwner {
_burn(_msgSender(), amount*(10**uint256(decimals())));
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function setTimeLock(address account, uint256 timestamp) public virtual onlyOwner {
_setTimeLock(account, timestamp);
}
function removeTimeLock(address account) public virtual onlyOwner {
_removeTimeLock(account);
}
}
contract CreateToken is ERC20Pauser {
constructor () ERC20Pauser("MDI", "MDI") {
mint(msg.sender, 10*(10**8)*(10**uint256(decimals())));
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
getEndTime 0x1c260b5f → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
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
burn 0x42966c68
uint256 amount
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
lock 0xf435f5a7
address account
removeTimeLock 0x17abee1e
address account
renounceOwnership 0x715018a6
No parameters
setTimeLock 0x644fab74
address account
uint256 timestamp
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unlock 0x2f6c493c
address account
Recent Transactions
This address has 1 on-chain transactions, but only 1.2% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →