Contract 0xF4a1F5fEA79C3609514A417425971FadC10eCfBE

 
 
Txn Hash
Method
Block
From
To
Value
0x0f6d5b0e21b614357f26b4f116633593a9a01f899b2d022e49071a36afc29dccAdd Permissions151816112022-07-20 20:24:57197 days 1 hr agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00806132 63.2424364
0x9e314b1f6332ff14d90b5aa4dfcc8d2c8eda3bb6b1d6c7ad62fa41c1d006c7f6Add Permissions149758772022-06-16 22:59:04230 days 22 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00349455 45.97374086
0xc8b62435ab39bb9eb556cda978617bffefe304631d1e9bbcd31dd6cc096d59a7Add Permissions149734632022-06-16 13:08:48231 days 8 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.0015101 61.56896621
0xcd06b15d9b6ef32febcf1e2edc6e06d19c7a5af0e13dd0373afa1726043adf53Add Permissions148293732022-05-23 11:42:40255 days 10 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.0018557 24.41336635
0x04723970464ac2d36f5f2977e561f4d3f77f8434ba526ccc8bc24578b5b77099Add Permissions145718382022-04-12 16:35:24296 days 5 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00713681 55.98950022
0x45b27cd94618e06b9c74eedecd79f348ed925428482af363241d33f3f414f8ddAdd Permissions145718322022-04-12 16:33:44296 days 5 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00633695 49.71448483
0xb6b171cc7a2218090570f0dd32bfac5cee07192cc98b962c7ad12b6c526c1d65Add Permissions145715502022-04-12 15:29:06296 days 6 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00450298 59.24040883
0xaffd10a63a67b3591fb35b9fc50ee5e450d4af34625d3325f898885ff8523b9cAdd Permissions143927792022-03-15 18:24:01324 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00582863 76.68043655
0x1d0e001fa047f13809cdc42315fdb4ffa8ec9ef9469428e651b11447b86b6c96Add Permissions143927752022-03-15 18:23:01324 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00581175 76.45834694
0x4b3b5d19e5dfb0fcdd315d8d30c8e680edbc1909dae6bb6896d3edb48c465662Add Permissions143927722022-03-15 18:22:18324 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00889669 69.79604296
0x282a5a446b47dc59d27e62cb980d2b7cf578737a70331112572877379e74ceb5Add Permissions143927722022-03-15 18:22:18324 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00884353 69.37904296
0x2cd67ee0cd58b7dda57689b10e2c85d0b985fbe99855afb8a3dabd57861fd8e5Add Permissions143927722022-03-15 18:22:18324 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00530495 69.79104296
0x39acdea3e236a0aa9ccbd1e0711fddf57d295e38808a65a90dc76ea69f792cc1Add Permissions142119842022-02-15 17:10:54352 days 4 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00406528 53.48220763
0x636f2950772d1e3d3753c1485497c58f01f2c0de861d59e52e8547b4400fa8a1Add Permissions142116592022-02-15 16:06:30352 days 5 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00866089 67.94617949
0xf03613970f33b2cc1e8856020c6d3d7cb8f6a5ce893d1f2c5481adfab446954fAdd Permissions141806082022-02-10 20:59:46357 days 52 mins agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00795329 104.63214155
0x3c3e5e689fafedd47c371183606e0cbdaf1c011bdb3ff9224c7eef9f722fcea2Add Permissions141165652022-01-31 23:14:24366 days 22 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.02375664 186.37488221
0x090c457b3f353678f69b62c7447c512f70b052d332d88bf0b5c759298dbd40dfAdd Permissions141165642022-01-31 23:13:47366 days 22 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.01261134 165.91254274
0x2daa6368fbf01e57f540ebe4b41eccb7ddba0c20b957aee2d5c971c911b06cfaAdd Permissions141165622022-01-31 23:13:10366 days 22 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.01132751 156.34946677
0x4f1dcfd21b959cb7a28813e8b8d15403b62ef19141851262bb89f06f62658b41Add Permissions141153842022-01-31 18:55:20367 days 2 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.0140836 185.33989134
0x3451c8a8249f9630df25037107db2529b9fbd8b7ae850980b3b08996f151b34dAdd Permissions141153832022-01-31 18:54:26367 days 2 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.01254034 164.97843353
0x1688ee484bfee286e2d659b3aa92454cdcb106bcc40aa488f0c5990c71f9bcc6Add Permissions141153832022-01-31 18:54:26367 days 2 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.0210293 164.97843353
0x9293f16b18e8dcb16fb99518f5d0a7dfb3ed090a5f7dc37c43021bf14e536fa1Add Permissions141151972022-01-31 18:11:12367 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00566445 125.02926114
0x99efc409403f98c29dd95e6a8e31131c111dbf43774929da9e0ccf4e74816186Add Permissions141151572022-01-31 18:03:51367 days 3 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00693947 153.1724562
0x2fd3b6d7d2bef6b354557831adeab3ee4c8018d03b1ec15c03b4c897c2bf140dAdd Permissions140321182022-01-18 22:01:32379 days 23 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00958743 132.33173885
0xfe31fbbabf665ada95856cbda7e3f64c05ab5db82a49496b43f57c9e074d7c1dAdd Permissions140321182022-01-18 22:01:32379 days 23 hrs agoENS Name fireblockshq.eth IN  0xf4a1f5fea79c3609514a417425971fadc10ecfbe0 Ether0.00462247 132.33173885
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PermissionManager

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 4 : PermissionManager.sol
pragma solidity 0.6.12;

import {IPermissionManager} from '../../interfaces/IPermissionManager.sol';
import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';

/**
 * @title PermissionManager contract
 * @notice Implements basic whitelisting functions for different actors of the permissioned protocol

 * @author Aave
 **/
contract PermissionManager is IPermissionManager, Ownable {
  struct UserData {
    uint256 permissions;
    address permissionAdmin;
  }

  mapping(address => UserData) _users;
  mapping(address => uint256) _permissionsAdmins;

  uint256 public constant MAX_NUM_OF_ROLES = 256;

  modifier onlyPermissionAdmins(address user) {
    require(_permissionsAdmins[user] > 0, 'CALLER_NOT_PERMISSIONS_ADMIN');
    _;
  }

  ///@inheritdoc IPermissionManager
  function addPermissionAdmins(address[] calldata admins) external override onlyOwner {
    for (uint256 i = 0; i < admins.length; i++) {
      _permissionsAdmins[admins[i]] = 1;

      emit PermissionsAdminSet(admins[i], true);
    }
  }

  ///@inheritdoc IPermissionManager
  function removePermissionAdmins(address[] calldata admins) external override onlyOwner {
    for (uint256 i = 0; i < admins.length; i++) {
      _permissionsAdmins[admins[i]] = 0;

      emit PermissionsAdminSet(admins[i], false);
    }
  }

  ///@inheritdoc IPermissionManager
  function addPermissions(uint256[] calldata roles, address[] calldata users)
    external
    override
    onlyPermissionAdmins(msg.sender)
  {
    require(roles.length == users.length, 'INCONSISTENT_ARRAYS_LENGTH');

    for (uint256 i = 0; i < users.length; i++) {
      uint256 role = roles[i];
      address user = users[i];

      require(role < MAX_NUM_OF_ROLES, 'INVALID_ROLE');

      uint256 permissions = _users[user].permissions;
      address permissionAdmin = _users[user].permissionAdmin;

      require(
        (permissions != 0 && permissionAdmin == msg.sender) ||
          _users[user].permissionAdmin == address(0),
        'INVALID_PERMISSIONADMIN'
      );

      if (permissions == 0) {
        _users[user].permissionAdmin = msg.sender;
      }

      _users[user].permissions = permissions | (1 << role);

      emit RoleSet(user, role, msg.sender, true);
    }
  }

  ///@inheritdoc IPermissionManager
  function removePermissions(uint256[] calldata roles, address[] calldata users)
    external
    override
    onlyPermissionAdmins(msg.sender)
  {
    require(roles.length == users.length, 'INCONSISTENT_ARRAYS_LENGTH');

    for (uint256 i = 0; i < users.length; i++) {
      uint256 role = roles[i];
      address user = users[i];

      require(role < MAX_NUM_OF_ROLES, 'INVALID_ROLE');

      uint256 permissions = _users[user].permissions;
      address permissionAdmin = _users[user].permissionAdmin;

      require(
        (permissions != 0 && permissionAdmin == msg.sender) ||
          _users[user].permissionAdmin == address(0),
        'INVALID_PERMISSIONADMIN'
      );

      _users[user].permissions = permissions & ~(1 << role);

      if (_users[user].permissions == 0) {
        //all permission have been removed
        _users[user].permissionAdmin = address(0);
      }

      emit RoleSet(user, role, msg.sender, false);
    }
  }

  ///@inheritdoc IPermissionManager
  function getUserPermissions(address user)
    external
    view
    override
    returns (uint256[] memory, uint256)
  {
    uint256[] memory roles = new uint256[](256);
    uint256 rolesCount = 0;
    uint256 userPermissions = _users[user].permissions;

    for (uint256 i = 0; i < 256; i++) {
      if ((userPermissions >> i) & 1 > 0) {
        roles[rolesCount] = i;
        rolesCount++;
      }
    }

    return (roles, rolesCount);
  }

  ///@inheritdoc IPermissionManager
  function isInRole(address user, uint256 role) external view override returns (bool) {
    return (_users[user].permissions >> role) & 1 > 0;
  }

  ///@inheritdoc IPermissionManager
  function isInAllRoles(address user, uint256[] calldata roles)
    external
    view
    override
    returns (bool)
  {
    for (uint256 i = 0; i < roles.length; i++) {
      if ((_users[user].permissions >> roles[i]) & 1 == 0) {
        return false;
      }
    }
    return true;
  }

  ///@inheritdoc IPermissionManager
  function isInAnyRole(address user, uint256[] calldata roles)
    external
    view
    override
    returns (bool)
  {
    for (uint256 i = 0; i < roles.length; i++) {
      if ((_users[user].permissions >> roles[i]) & 1 > 0) {
        return true;
      }
    }
    return false;
  }

  ///@inheritdoc IPermissionManager
  function isPermissionsAdmin(address admin) public view override returns (bool) {
    return _permissionsAdmins[admin] > 0;
  }

  ///@inheritdoc IPermissionManager
  function getUserPermissionAdmin(address user) external view override returns (address) {
    return _users[user].permissionAdmin;
  }

  ///@inheritdoc IPermissionManager
  function isUserPermissionAdminValid(address user) external view override returns (bool) {
    return _permissionsAdmins[_users[user].permissionAdmin] > 0;
  }
}

File 2 of 4 : IPermissionManager.sol
pragma solidity 0.6.12;

interface IPermissionManager {
  event RoleSet(address indexed user, uint256 indexed role, address indexed whiteLister, bool set);
  event PermissionsAdminSet(address indexed user, bool set);

  /**
   * @dev Allows owner to add new permission admins
   * @param admins The addresses to promote to permission admin
   **/
  function addPermissionAdmins(address[] calldata admins) external;

  /**
   * @dev Allows owner to remove permission admins
   * @param admins The addresses to demote as permission admin
   **/
  function removePermissionAdmins(address[] calldata admins) external;

  /**
   * @dev Allows owner to whitelist a set of addresses for multiple roles
   * @param roles The list of roles to assign
   * @param users The list of users to add to the corresponding role
   **/
  function addPermissions(uint256[] calldata roles, address[] calldata users) external;

  /**
   * @dev Allows owner to remove permissions on a set of addresses
   * @param roles The list of roles to remove
   * @param users The list of users to remove from the corresponding role
   **/
  function removePermissions(uint256[] calldata roles, address[] calldata users) external;

  /**
   * @dev Returns the permissions configuration for a specific user
   * @param user The address of the user
   * @return the set of permissions states for the user
   **/
  function getUserPermissions(address user) external view returns (uint256[] memory, uint256);

  /**
   * @dev Used to query if a certain user has a certain role
   * @param user The address of the user
   * @return True if the user is in the specific role
   **/
  function isInRole(address user, uint256 role) external view returns (bool);

  /**
   * @dev Used to query if a certain user has the permissions admin role
   * @param user The address of the user
   * @return True if the user is a permissions admin, false otherwise
   **/
  function isPermissionsAdmin(address user) external view returns (bool);

  /**
   * @dev Used to query if a certain user satisfies certain roles
   * @param user The address of the user
   * @param roles The roles to check
   * @return True if the user has all the roles, false otherwise
   **/
  function isInAllRoles(address user, uint256[] calldata roles) external view returns (bool);

  /**
   * @dev Used to query if a certain user is in at least one of the roles specified
   * @param user The address of the user
   * @return True if the user has all the roles, false otherwise
   **/
  function isInAnyRole(address user, uint256[] calldata roles) external view returns (bool);

  /**
   * @dev Used to query if a certain user is in at least one of the roles specified
   * @param user The address of the user
   * @return the address of the permissionAdmin of the user
   **/
  function getUserPermissionAdmin(address user) external view returns (address);

  /**
   * @dev Used to query if the permission admin of a certain user is valid
   * @param user The address of the user
   * @return true if the permission admin of user is valid, false otherwise
   **/
  function isUserPermissionAdminValid(address user) external view returns (bool);
}

File 3 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import './Context.sol';

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
  address private _owner;

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor() internal {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(_owner == _msgSender(), 'Ownable: caller is not the owner');
    _;
  }

  /**
   * @dev Leaves the contract without owner. It will not be possible to call
   * `onlyOwner` functions anymore. Can only be called by the current owner.
   *
   * NOTE: Renouncing ownership will leave the contract without an owner,
   * thereby removing any functionality that is only available to the owner.
   */
  function renounceOwnership() public virtual onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), 'Ownable: new owner is the zero address');
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
  function _msgSender() internal view virtual returns (address payable) {
    return msg.sender;
  }

  function _msgData() internal view virtual returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "evmVersion": "istanbul",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"PermissionsAdminSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"role","type":"uint256"},{"indexed":true,"internalType":"address","name":"whiteLister","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"RoleSet","type":"event"},{"inputs":[],"name":"MAX_NUM_OF_ROLES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"name":"addPermissionAdmins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"roles","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"addPermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPermissionAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserPermissions","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"roles","type":"uint256[]"}],"name":"isInAllRoles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256[]","name":"roles","type":"uint256[]"}],"name":"isInAnyRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"isInRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPermissionsAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isUserPermissionAdminValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"name":"removePermissionAdmins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"roles","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"removePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6111488061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100d55760003560e01c80638857a624116100875780638857a624146102fd5780638cadc3341461036b5780638da5cb5b14610429578063be5de6af14610431578063c9c8836014610457578063ca553a7a1461047d578063ea6c64fb146104eb578063f2fde38b146105a9576100d5565b80631cea0e8c146100da57806325fde6631461011c5780633e734f551461019d578063643148251461022f5780636d38f7841461025b578063715018a6146102d957806377133d81146102e3575b600080fd5b610100600480360360208110156100f057600080fd5b50356001600160a01b03166105cf565b604080516001600160a01b039092168252519081900360200190f35b6101426004803603602081101561013257600080fd5b50356001600160a01b03166105f1565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610188578181015183820152602001610170565b50505050905001935050505060405180910390f35b61021b600480360360408110156101b357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101dd57600080fd5b8201836020820111156101ef57600080fd5b803590602001918460208302840111600160201b8311171561021057600080fd5b509092509050610680565b604080519115158252519081900360200190f35b61021b6004803603604081101561024557600080fd5b506001600160a01b0381351690602001356106f4565b61021b6004803603604081101561027157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029b57600080fd5b8201836020820111156102ad57600080fd5b803590602001918460208302840111600160201b831117156102ce57600080fd5b50909250905061071b565b6102e161078d565b005b6102eb61082f565b60408051918252519081900360200190f35b6102e16004803603602081101561031357600080fd5b810190602081018135600160201b81111561032d57600080fd5b82018360208201111561033f57600080fd5b803590602001918460208302840111600160201b8311171561036057600080fd5b509092509050610835565b6102e16004803603604081101561038157600080fd5b810190602081018135600160201b81111561039b57600080fd5b8201836020820111156103ad57600080fd5b803590602001918460208302840111600160201b831117156103ce57600080fd5b919390929091602081019035600160201b8111156103eb57600080fd5b8201836020820111156103fd57600080fd5b803590602001918460208302840111600160201b8311171561041e57600080fd5b50909250905061094a565b610100610be0565b61021b6004803603602081101561044757600080fd5b50356001600160a01b0316610bef565b61021b6004803603602081101561046d57600080fd5b50356001600160a01b0316610c0c565b6102e16004803603602081101561049357600080fd5b810190602081018135600160201b8111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111600160201b831117156104e057600080fd5b509092509050610c3d565b6102e16004803603604081101561050157600080fd5b810190602081018135600160201b81111561051b57600080fd5b82018360208201111561052d57600080fd5b803590602001918460208302840111600160201b8311171561054e57600080fd5b919390929091602081019035600160201b81111561056b57600080fd5b82018360208201111561057d57600080fd5b803590602001918460208302840111600160201b8311171561059e57600080fd5b509092509050610d4d565b6102e1600480360360208110156105bf57600080fd5b50356001600160a01b0316610fd0565b6001600160a01b03908116600090815260016020819052604090912001541690565b604080516101008082526120208201909252606091600091839160208201612000803683375050506001600160a01b03851660009081526001602052604081205491925090815b61010081101561067457600182821c161561066c578084848151811061065a57fe5b60209081029190910101526001909201915b600101610638565b50919350915050915091565b6000805b828110156106e75783838281811061069857fe5b9050602002013560016000876001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116600014156106df5760009150506106ed565b600101610684565b50600190505b9392505050565b6001600160a01b038216600090815260016020819052604090912054821c16151592915050565b6000805b8281101561078257600084848381811061073557fe5b9050602002013560016000886001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116111561077a5760019150506106ed565b60010161071f565b506000949350505050565b6107956110c8565b6000546001600160a01b039081169116146107e5576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61010081565b61083d6110c8565b6000546001600160a01b0390811691161461088d576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b81811015610945576001600260008585858181106108aa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055508282828181106108ea57fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600160405180821515815260200191505060405180910390a2600101610890565b505050565b336000818152600260205260409020546109ab576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b8382146109fc576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610a1557fe5b9050602002013590506000858584818110610a2c57fe5b905060200201356001600160a01b031690506101008210610a83576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610abe57506001600160a01b03811633145b80610ae557506001600160a01b038381166000908152600160208190526040909120015416155b610b30576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020819052604090912090851b19831690819055610b84576001600160a01b03831660009081526001602081905260409091200180546001600160a01b03191690555b60408051600081529051339186916001600160a01b038716917fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94919081900360200190a45050600190920191506109ff9050565b505050505050565b6000546001600160a01b031690565b6001600160a01b0316600090815260026020526040902054151590565b6001600160a01b03908116600090815260016020818152604080842090920154909316825260029092522054151590565b610c456110c8565b6000546001600160a01b03908116911614610c95576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b8181101561094557600060026000858585818110610cb257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550828282818110610cf257fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600060405180821515815260200191505060405180910390a2600101610c98565b33600081815260026020526040902054610dae576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b838214610dff576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610e1857fe5b9050602002013590506000858584818110610e2f57fe5b905060200201356001600160a01b031690506101008210610e86576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610ec157506001600160a01b03811633145b80610ee857506001600160a01b038381166000908152600160208190526040909120015416155b610f33576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b81610f65576001600160a01b03831660009081526001602081905260409091200180546001600160a01b031916331790555b6001600160a01b03831660008181526001602081815260409283902082891b87179055825191825291513393889390927fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94929081900390910190a4505060019092019150610e029050565b610fd86110c8565b6000546001600160a01b03908116911614611028576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d5760405162461bcd60e51b81526004018080602001828103825260268152602001806110cd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220aee55fd2ffe4c1ae4ebcf66d0cd51779458160aebfc82117874fa1cd3a9ae4b664736f6c634300060c0033

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.