ETH Price: $1,715.25 (+2.01%)
Gas: 26 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multi Chain

Transaction Hash
Method
Block
From
To
Value
Approve143339812022-03-06 14:50:58574 days 23 hrs ago1646578258IN
0x3956C8...66c8ed66
0 ETH0.0015694433.66464659
0x60806040131765812021-09-07 4:46:52755 days 9 hrs ago1630990012IN
 Create: Magic
0 ETH0.10280985110

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Magic

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 14 : Magic.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import '@solidstate/contracts/access/OwnableInternal.sol';
import '@solidstate/contracts/token/ERC20/ERC20.sol';

import './IMagic.sol';

contract Magic is IMagic, ERC20, OwnableInternal {
    uint256 public teamMintAmount;
    mapping(address => bool) private whitelist;

    function setWhitelist(address[] calldata minters) external onlyOwner {
        require(!whitelist[address(this)], 'Magic: whitelist already set');

        for (uint256 i; i < minters.length; i++) {
            whitelist[minters[i]] = true;
        }

        whitelist[address(this)] = true;
    }

    function mint(address account, uint256 amount) external override {
        require(whitelist[msg.sender], 'Magic: sender must be whitelisted');
        _mint(account, amount);
    }

    function teamMint(address account, uint256 amount) external onlyOwner {
        require(
            (totalSupply() + amount) / (teamMintAmount + amount) >= 10,
            'Magic: excessive mint'
        );
        _mint(account, amount);
        teamMintAmount += amount;
    }
}

File 2 of 14 : OwnableInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {OwnableStorage} from './OwnableStorage.sol';

abstract contract OwnableInternal {
  using OwnableStorage for OwnableStorage.Layout;

  modifier onlyOwner {
    require(
      msg.sender == OwnableStorage.layout().owner,
      'Ownable: sender must be owner'
    );
    _;
  }
}

File 3 of 14 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {ERC20Base} from './base/ERC20Base.sol';
import {ERC20Extended} from './extended/ERC20Extended.sol';
import {ERC20Metadata} from './metadata/ERC20Metadata.sol';

/**
 * @title SolidState ERC20 implementation, including recommended extensions
 */
abstract contract ERC20 is ERC20Base, ERC20Extended, ERC20Metadata {}

File 4 of 14 : IMagic.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import '@solidstate/contracts/token/ERC20/IERC20.sol';

interface IMagic is IERC20 {
    function mint(address account, uint256 amount) external;
}

File 5 of 14 : OwnableStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library OwnableStorage {
  struct Layout {
    address owner;
  }

  bytes32 internal constant STORAGE_SLOT = keccak256(
    'solidstate.contracts.storage.Ownable'
  );

  function layout () internal pure returns (Layout storage l) {
    bytes32 slot = STORAGE_SLOT;
    assembly { l.slot := slot }
  }

  function setOwner (
    Layout storage l,
    address owner
  ) internal {
    l.owner = owner;
  }
}

File 6 of 14 : ERC20Base.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {IERC20} from '../IERC20.sol';
import {ERC20BaseInternal} from './ERC20BaseInternal.sol';
import {ERC20BaseStorage} from './ERC20BaseStorage.sol';

/**
 * @title Base ERC20 implementation, excluding optional extensions
 */
abstract contract ERC20Base is IERC20, ERC20BaseInternal {
  /**
   * @inheritdoc IERC20
   */
  function totalSupply () override virtual public view returns (uint) {
    return _totalSupply();
  }

  /**
   * @inheritdoc IERC20
   */
  function balanceOf (
    address account
  ) override virtual public view returns (uint) {
    return _balanceOf(account);
  }

  /**
   * @inheritdoc IERC20
   */
  function allowance (
    address holder,
    address spender
  ) override virtual public view returns (uint) {
    return ERC20BaseStorage.layout().allowances[holder][spender];
  }

  /**
   * @inheritdoc IERC20
   */
  function approve (
    address spender,
    uint amount
  ) override virtual public returns (bool) {
    _approve(msg.sender, spender, amount);
    return true;
  }

  /**
   * @inheritdoc IERC20
   */
  function transfer (
    address recipient,
    uint amount
  ) override virtual public returns (bool) {
    _transfer(msg.sender, recipient, amount);
    return true;
  }

  /**
   * @inheritdoc IERC20
   */
  function transferFrom (
    address holder,
    address recipient,
    uint amount
  ) override virtual public returns (bool) {
    uint256 currentAllowance = ERC20BaseStorage.layout().allowances[holder][msg.sender];
    require(currentAllowance >= amount, 'ERC20: transfer amount exceeds allowance');
    unchecked {
      _approve(holder, msg.sender, currentAllowance - amount);
    }
    _transfer(holder, recipient, amount);
    return true;
  }
}

File 7 of 14 : ERC20Extended.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {ERC20Base, ERC20BaseStorage} from '../base/ERC20Base.sol';

/**
 * @title ERC20 safe approval extensions
 * @dev mitigations for transaction-ordering vulnerability (see https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)
 */
abstract contract ERC20Extended is ERC20Base {
  /**
   * @notice increase spend amount granted to spender
   * @param spender address whose allowance to increase
   * @param amount quantity by which to increase allowance
   * @return success status (always true; otherwise function will revert)
   */
  function increaseAllowance (address spender, uint amount) virtual public returns (bool) {
    unchecked {
      mapping (address => uint) storage allowances = ERC20BaseStorage.layout().allowances[msg.sender];

      uint allowance = allowances[spender];
      require(allowance + amount >= allowance, 'ERC20Extended: excessive allowance');

      _approve(
        msg.sender,
        spender,
        allowances[spender] = allowance + amount
      );

      return true;
    }
  }

  /**
   * @notice decrease spend amount granted to spender
   * @param spender address whose allowance to decrease
   * @param amount quantity by which to decrease allowance
   * @return success status (always true; otherwise function will revert)
   */
  function decreaseAllowance (address spender, uint amount) virtual public returns (bool) {
    unchecked {
      mapping (address => uint) storage allowances = ERC20BaseStorage.layout().allowances[msg.sender];

      uint allowance = allowances[spender];
      require(amount <= allowance, 'ERC20Extended: insufficient allowance');

      _approve(
        msg.sender,
        spender,
        allowances[spender] = allowance - amount
      );

      return true;
    }
  }
}

File 8 of 14 : ERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {ERC20MetadataStorage} from './ERC20MetadataStorage.sol';
import {IERC20Metadata} from './IERC20Metadata.sol';

/**
 * @title ERC20 metadata extensions
 */
abstract contract ERC20Metadata is IERC20Metadata {
  /**
   * @inheritdoc IERC20Metadata
   */
  function name () virtual override public view returns (string memory) {
    return ERC20MetadataStorage.layout().name;
  }

  /**
   * @inheritdoc IERC20Metadata
   */
  function symbol () virtual override public view returns (string memory) {
    return ERC20MetadataStorage.layout().symbol;
  }

  /**
   * @inheritdoc IERC20Metadata
   */
  function decimals () virtual override public view returns (uint8) {
    return ERC20MetadataStorage.layout().decimals;
  }
}

File 9 of 14 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {IERC20Internal} from './IERC20Internal.sol';

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 is IERC20Internal {
  /**
   * @notice query the total minted token supply
   * @return token supply
   */
  function totalSupply () external view returns (uint256);

  /**
   * @notice query the token balance of given account
   * @param account address to query
   * @return token balance
   */
  function balanceOf (
    address account
  ) external view returns (uint256);

  /**
   * @notice query the allowance granted from given holder to given spender
   * @param holder approver of allowance
   * @param spender recipient of allowance
   * @return token allowance
   */
  function allowance (
    address holder,
    address spender
  ) external view returns (uint256);

  /**
   * @notice grant approval to spender to spend tokens
   * @dev prefer ERC20Extended functions to avoid transaction-ordering vulnerability (see https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)
   * @param spender recipient of allowance
   * @param amount quantity of tokens approved for spending
   * @return success status (always true; otherwise function should revert)
   */
  function approve (
    address spender,
    uint256 amount
  ) external returns (bool);

  /**
   * @notice transfer tokens to given recipient
   * @param recipient beneficiary of token transfer
   * @param amount quantity of tokens to transfer
   * @return success status (always true; otherwise function should revert)
   */
  function transfer (
    address recipient,
    uint256 amount
  ) external returns (bool);

  /**
   * @notice transfer tokens to given recipient on behalf of given holder
   * @param holder holder of tokens prior to transfer
   * @param recipient beneficiary of token transfer
   * @param amount quantity of tokens to transfer
   * @return success status (always true; otherwise function should revert)
   */
  function transferFrom (
    address holder,
    address recipient,
    uint256 amount
  ) external returns (bool);
}

File 10 of 14 : ERC20BaseInternal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {IERC20Internal} from '../IERC20Internal.sol';
import {ERC20BaseStorage} from './ERC20BaseStorage.sol';

/**
 * @title Base ERC20 implementation, excluding optional extensions
 */
abstract contract ERC20BaseInternal is IERC20Internal {
  /**
   * @notice query the total minted token supply
   * @return token supply
   */
  function _totalSupply () virtual internal view returns (uint) {
    return ERC20BaseStorage.layout().totalSupply;
  }

  /**
   * @notice query the token balance of given account
   * @param account address to query
   * @return token balance
   */
  function _balanceOf (
    address account
  ) virtual internal view returns (uint) {
    return ERC20BaseStorage.layout().balances[account];
  }

  /**
   * @notice enable spender to spend tokens on behalf of holder
   * @param holder address on whose behalf tokens may be spent
   * @param spender recipient of allowance
   * @param amount quantity of tokens approved for spending
   */
  function _approve (
    address holder,
    address spender,
    uint amount
  ) virtual internal {
    require(holder != address(0), 'ERC20: approve from the zero address');
    require(spender != address(0), 'ERC20: approve to the zero address');

    ERC20BaseStorage.layout().allowances[holder][spender] = amount;

    emit Approval(holder, spender, amount);
  }

  /**
   * @notice mint tokens for given account
   * @param account recipient of minted tokens
   * @param amount quantity of tokens minted
   */
  function _mint (
    address account,
    uint amount
  ) virtual internal {
    require(account != address(0), 'ERC20: mint to the zero address');

    _beforeTokenTransfer(address(0), account, amount);

    ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
    l.totalSupply += amount;
    l.balances[account] += amount;

    emit Transfer(address(0), account, amount);
  }

  /**
   * @notice burn tokens held by given account
   * @param account holder of burned tokens
   * @param amount quantity of tokens burned
   */
  function _burn (
    address account,
    uint amount
  ) virtual internal {
    require(account != address(0), 'ERC20: burn from the zero address');

    _beforeTokenTransfer(account, address(0), amount);

    ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
    uint256 balance = l.balances[account];
    require(balance >= amount, "ERC20: burn amount exceeds balance");
    unchecked {
      l.balances[account] = balance - amount;
    }
    l.totalSupply -= amount;

    emit Transfer(account, address(0), amount);
  }

  /**
   * @notice transfer tokens from holder to recipient
   * @param holder owner of tokens to be transferred
   * @param recipient beneficiary of transfer
   * @param amount quantity of tokens transferred
   */
  function _transfer (
    address holder,
    address recipient,
    uint amount
  ) virtual internal {
    require(holder != address(0), 'ERC20: transfer from the zero address');
    require(recipient != address(0), 'ERC20: transfer to the zero address');

    _beforeTokenTransfer(holder, recipient, amount);

    ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout();
    uint256 holderBalance = l.balances[holder];
    require(holderBalance >= amount, 'ERC20: transfer amount exceeds balance');
    unchecked {
      l.balances[holder] = holderBalance - amount;
    }
    l.balances[recipient] += amount;

    emit Transfer(holder, recipient, amount);
  }

  /**
   * @notice ERC20 hook, called before all transfers including mint and burn
   * @dev function should be overridden and new implementation must call super
   * @param from sender of tokens
   * @param to receiver of tokens
   * @param amount quantity of tokens transferred
   */
  function _beforeTokenTransfer (
    address from,
    address to,
    uint amount
  ) virtual internal {}
}

File 11 of 14 : ERC20BaseStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC20BaseStorage {
  struct Layout {
    mapping (address => uint) balances;
    mapping (address => mapping (address => uint)) allowances;
    uint totalSupply;
  }

  bytes32 internal constant STORAGE_SLOT = keccak256(
    'solidstate.contracts.storage.ERC20Base'
  );

  function layout () internal pure returns (Layout storage l) {
    bytes32 slot = STORAGE_SLOT;
    assembly { l.slot := slot }
  }
}

File 12 of 14 : IERC20Internal.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Partial ERC20 interface needed by internal functions
 */
interface IERC20Internal {
  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

File 13 of 14 : ERC20MetadataStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library ERC20MetadataStorage {
  struct Layout {
    string name;
    string symbol;
    uint8 decimals;
  }

  bytes32 internal constant STORAGE_SLOT = keccak256(
    'solidstate.contracts.storage.ERC20Metadata'
  );

  function layout () internal pure returns (Layout storage l) {
    bytes32 slot = STORAGE_SLOT;
    assembly { l.slot := slot }
  }

  function setName (
    Layout storage l,
    string memory name
  ) internal {
    l.name = name;
  }

  function setSymbol (
    Layout storage l,
    string memory symbol
  ) internal {
    l.symbol = symbol;
  }

  function setDecimals (
    Layout storage l,
    uint8 decimals
  ) internal {
    l.decimals = decimals;
  }
}

File 14 of 14 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC20 metadata interface
 */
interface IERC20Metadata {
  /**
   * @notice return token name
   * @return token name
   */
  function name () external view returns (string memory);

  /**
   * @notice return token symbol
   * @return token symbol
   */
  function symbol () external view returns (string memory);

  /**
   * @notice return token decimals, generally used only for display purposes
   * @return token decimals
   */
  function decimals () external view returns (uint8);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"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":[{"internalType":"address","name":"holder","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"minters","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610ff0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063add5a4fa11610066578063add5a4fa14610236578063b4bc159a14610249578063dd62ed3e14610252578063f42176481461029857600080fd5b806370a08231146101c057806395d89b4114610208578063a457c2d714610210578063a9059cbb1461022357600080fd5b806323b872dd116100d357806323b872dd14610151578063313ce56714610164578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102ab565b60405161010f9190610ea3565b60405180910390f35b61012b610126366004610e0a565b61035c565b604051901515815260200161010f565b610143610372565b60405190815260200161010f565b61012b61015f366004610dcf565b6103a1565b7f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f7430495460405160ff909116815260200161010f565b61012b6101a6366004610e0a565b61045b565b6101be6101b9366004610e0a565b61051e565b005b6101436101ce366004610d7c565b6001600160a01b031660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602052604090205490565b610102610595565b61012b61021e366004610e0a565b6105c6565b61012b610231366004610e0a565b61068a565b6101be610244366004610e0a565b610697565b61014360005481565b610143610260366004610d9d565b6001600160a01b039182166000908152600080516020610f9b8339815191526020908152604080832093909416825291909152205490565b6101be6102a6366004610e33565b6107a7565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304780546102d990610f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461030590610f2e565b80156103525780601f1061032757610100808354040283529160200191610352565b820191906000526020600020905b81548152906001019060200180831161033557829003601f168201915b5050505050905090565b6000610369338484610921565b50600192915050565b600061039c7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b65490565b905090565b6001600160a01b0383166000908152600080516020610f9b83398151915260209081526040808320338452909152812054828110156104385760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104458533858403610921565b610450858585610a53565b506001949350505050565b336000908152600080516020610f9b833981519152602090815260408083206001600160a01b0386168452918290528220548381018111156104ea5760405162461bcd60e51b815260206004820152602260248201527f4552433230457874656e6465643a2065786365737369766520616c6c6f77616e604482015261636560f01b606482015260840161042f565b61045033868684018560008a6001600160a01b03166001600160a01b03168152602001908152602001600020819055610921565b3360009081526001602052604090205460ff166105875760405162461bcd60e51b815260206004820152602160248201527f4d616769633a2073656e646572206d7573742062652077686974656c697374656044820152601960fa1b606482015260840161042f565b6105918282610c45565b5050565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304760010180546102d990610f2e565b336000908152600080516020610f9b833981519152602090815260408083206001600160a01b038616845291829052822054808411156106565760405162461bcd60e51b815260206004820152602560248201527f4552433230457874656e6465643a20696e73756666696369656e7420616c6c6f60448201526477616e636560d81b606482015260840161042f565b61045033868684038560008a6001600160a01b03166001600160a01b03168152602001908152602001600020819055610921565b6000610369338484610a53565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107105760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161042f565b600a816000546107209190610ef6565b82610729610372565b6107339190610ef6565b61073d9190610f0e565b10156107835760405162461bcd60e51b8152602060048201526015602482015274135859da58ce88195e18d95cdcda5d99481b5a5b9d605a1b604482015260640161042f565b61078d8282610c45565b8060008082825461079e9190610ef6565b90915550505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146108205760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161042f565b3060009081526001602052604090205460ff16156108805760405162461bcd60e51b815260206004820152601c60248201527f4d616769633a2077686974656c69737420616c72656164792073657400000000604482015260640161042f565b60005b818110156108ff5760018060008585858181106108b057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108c59190610d7c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806108f781610f69565b915050610883565b5050306000908152600160208190526040909120805460ff1916909117905550565b6001600160a01b0383166109835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161042f565b6001600160a01b0382166109e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161042f565b6001600160a01b038381166000818152600080516020610f9b833981519152602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ab75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161042f565b6001600160a01b038216610b195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161042f565b6001600160a01b03831660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602081905260409091205482811015610bb35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161042f565b6001600160a01b03808616600090815260208490526040808220868503905591861681529081208054859290610bea908490610ef6565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c3691815260200190565b60405180910390a35050505050565b6001600160a01b038216610c9b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161042f565b7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b680547fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4918391600090610cf0908490610ef6565b90915550506001600160a01b03831660009081526020829052604081208054849290610d1d908490610ef6565b90915550506040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a46565b80356001600160a01b0381168114610d7757600080fd5b919050565b600060208284031215610d8d578081fd5b610d9682610d60565b9392505050565b60008060408385031215610daf578081fd5b610db883610d60565b9150610dc660208401610d60565b90509250929050565b600080600060608486031215610de3578081fd5b610dec84610d60565b9250610dfa60208501610d60565b9150604084013590509250925092565b60008060408385031215610e1c578182fd5b610e2583610d60565b946020939093013593505050565b60008060208385031215610e45578182fd5b823567ffffffffffffffff80821115610e5c578384fd5b818501915085601f830112610e6f578384fd5b813581811115610e7d578485fd5b8660208260051b8501011115610e91578485fd5b60209290920196919550909350505050565b6000602080835283518082850152825b81811015610ecf57858101830151858201604001528201610eb3565b81811115610ee05783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610f0957610f09610f84565b500190565b600082610f2957634e487b7160e01b81526012600452602481fd5b500490565b600181811c90821680610f4257607f821691505b60208210811415610f6357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610f7d57610f7d610f84565b5060010190565b634e487b7160e01b600052601160045260246000fdfec991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b5a26469706673582212209972ce932cb8485c1139263e90cba4021c0e84f42e9b01f15ce4716c3faf7a5d64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063add5a4fa11610066578063add5a4fa14610236578063b4bc159a14610249578063dd62ed3e14610252578063f42176481461029857600080fd5b806370a08231146101c057806395d89b4114610208578063a457c2d714610210578063a9059cbb1461022357600080fd5b806323b872dd116100d357806323b872dd14610151578063313ce56714610164578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde03146100fa578063095ea7b31461011857806318160ddd1461013b575b600080fd5b6101026102ab565b60405161010f9190610ea3565b60405180910390f35b61012b610126366004610e0a565b61035c565b604051901515815260200161010f565b610143610372565b60405190815260200161010f565b61012b61015f366004610dcf565b6103a1565b7f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f7430495460405160ff909116815260200161010f565b61012b6101a6366004610e0a565b61045b565b6101be6101b9366004610e0a565b61051e565b005b6101436101ce366004610d7c565b6001600160a01b031660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602052604090205490565b610102610595565b61012b61021e366004610e0a565b6105c6565b61012b610231366004610e0a565b61068a565b6101be610244366004610e0a565b610697565b61014360005481565b610143610260366004610d9d565b6001600160a01b039182166000908152600080516020610f9b8339815191526020908152604080832093909416825291909152205490565b6101be6102a6366004610e33565b6107a7565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304780546102d990610f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461030590610f2e565b80156103525780601f1061032757610100808354040283529160200191610352565b820191906000526020600020905b81548152906001019060200180831161033557829003601f168201915b5050505050905090565b6000610369338484610921565b50600192915050565b600061039c7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b65490565b905090565b6001600160a01b0383166000908152600080516020610f9b83398151915260209081526040808320338452909152812054828110156104385760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6104458533858403610921565b610450858585610a53565b506001949350505050565b336000908152600080516020610f9b833981519152602090815260408083206001600160a01b0386168452918290528220548381018111156104ea5760405162461bcd60e51b815260206004820152602260248201527f4552433230457874656e6465643a2065786365737369766520616c6c6f77616e604482015261636560f01b606482015260840161042f565b61045033868684018560008a6001600160a01b03166001600160a01b03168152602001908152602001600020819055610921565b3360009081526001602052604090205460ff166105875760405162461bcd60e51b815260206004820152602160248201527f4d616769633a2073656e646572206d7573742062652077686974656c697374656044820152601960fa1b606482015260840161042f565b6105918282610c45565b5050565b60607f2967a798b92539a1b9eefe4d8eb931f96b68d27665e276f1bee2d5db7f74304760010180546102d990610f2e565b336000908152600080516020610f9b833981519152602090815260408083206001600160a01b038616845291829052822054808411156106565760405162461bcd60e51b815260206004820152602560248201527f4552433230457874656e6465643a20696e73756666696369656e7420616c6c6f60448201526477616e636560d81b606482015260840161042f565b61045033868684038560008a6001600160a01b03166001600160a01b03168152602001908152602001600020819055610921565b6000610369338484610a53565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146107105760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161042f565b600a816000546107209190610ef6565b82610729610372565b6107339190610ef6565b61073d9190610f0e565b10156107835760405162461bcd60e51b8152602060048201526015602482015274135859da58ce88195e18d95cdcda5d99481b5a5b9d605a1b604482015260640161042f565b61078d8282610c45565b8060008082825461079e9190610ef6565b90915550505050565b7f8a22373512790c48b83a1fe2efdd2888d4a917bcdc24d0adf63e60f671680460546001600160a01b031633146108205760405162461bcd60e51b815260206004820152601d60248201527f4f776e61626c653a2073656e646572206d757374206265206f776e6572000000604482015260640161042f565b3060009081526001602052604090205460ff16156108805760405162461bcd60e51b815260206004820152601c60248201527f4d616769633a2077686974656c69737420616c72656164792073657400000000604482015260640161042f565b60005b818110156108ff5760018060008585858181106108b057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108c59190610d7c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806108f781610f69565b915050610883565b5050306000908152600160208190526040909120805460ff1916909117905550565b6001600160a01b0383166109835760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161042f565b6001600160a01b0382166109e45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161042f565b6001600160a01b038381166000818152600080516020610f9b833981519152602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ab75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161042f565b6001600160a01b038216610b195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161042f565b6001600160a01b03831660009081527fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4602081905260409091205482811015610bb35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161042f565b6001600160a01b03808616600090815260208490526040808220868503905591861681529081208054859290610bea908490610ef6565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c3691815260200190565b60405180910390a35050505050565b6001600160a01b038216610c9b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161042f565b7fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b680547fc991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b4918391600090610cf0908490610ef6565b90915550506001600160a01b03831660009081526020829052604081208054849290610d1d908490610ef6565b90915550506040518281526001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610a46565b80356001600160a01b0381168114610d7757600080fd5b919050565b600060208284031215610d8d578081fd5b610d9682610d60565b9392505050565b60008060408385031215610daf578081fd5b610db883610d60565b9150610dc660208401610d60565b90509250929050565b600080600060608486031215610de3578081fd5b610dec84610d60565b9250610dfa60208501610d60565b9150604084013590509250925092565b60008060408385031215610e1c578182fd5b610e2583610d60565b946020939093013593505050565b60008060208385031215610e45578182fd5b823567ffffffffffffffff80821115610e5c578384fd5b818501915085601f830112610e6f578384fd5b813581811115610e7d578485fd5b8660208260051b8501011115610e91578485fd5b60209290920196919550909350505050565b6000602080835283518082850152825b81811015610ecf57858101830151858201604001528201610eb3565b81811115610ee05783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610f0957610f09610f84565b500190565b600082610f2957634e487b7160e01b81526012600452602481fd5b500490565b600181811c90821680610f4257607f821691505b60208210811415610f6357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610f7d57610f7d610f84565b5060010190565b634e487b7160e01b600052601160045260246000fdfec991b2e918acaba8e5721668ed0b1982684e5a8692a621bcd2d7ef326bb015b5a26469706673582212209972ce932cb8485c1139263e90cba4021c0e84f42e9b01f15ce4716c3faf7a5d64736f6c63430008040033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.