ETH Price: $3,387.28 (+1.19%)

Contract

0x14725840DC13787D97ccc9C9CC456CF059057A5e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Batch Burn184083562023-10-22 20:56:59428 days ago1698008219IN
0x14725840...059057A5e
0 ETH0.01582078.79445326
Batch Burn184082342023-10-22 20:32:11428 days ago1698006731IN
0x14725840...059057A5e
0 ETH0.001260558.94741629
Batch Burn184080372023-10-22 19:52:47428 days ago1698004367IN
0x14725840...059057A5e
0 ETH0.0011123711.26623808
Batch Burn184074162023-10-22 17:47:23428 days ago1697996843IN
0x14725840...059057A5e
0 ETH0.0339452810.19824416
Batch Burn184070892023-10-22 16:41:35428 days ago1697992895IN
0x14725840...059057A5e
0 ETH0.005492439.94934326
Batch Burn184070682023-10-22 16:37:23428 days ago1697992643IN
0x14725840...059057A5e
0 ETH0.005176769.37751824
Batch Burn184070512023-10-22 16:33:59428 days ago1697992439IN
0x14725840...059057A5e
0 ETH0.0026390710.6543211
Batch Burn184055562023-10-22 11:31:23428 days ago1697974283IN
0x14725840...059057A5e
0 ETH0.000801997.11060996
Batch Burn184055442023-10-22 11:28:59428 days ago1697974139IN
0x14725840...059057A5e
0 ETH0.002588277.07639252
Batch Burn184048102023-10-22 9:00:47428 days ago1697965247IN
0x14725840...059057A5e
0 ETH0.000668277.89168068
Batch Burn184043742023-10-22 7:32:59428 days ago1697959979IN
0x14725840...059057A5e
0 ETH0.000853626.05848862
Batch Burn184013812023-10-21 21:31:23429 days ago1697923883IN
0x14725840...059057A5e
0 ETH0.00126378.96315416
Batch Burn184007012023-10-21 19:14:47429 days ago1697915687IN
0x14725840...059057A5e
0 ETH0.0027988512.91946245
Burn183986302023-10-21 12:17:35429 days ago1697890655IN
0x14725840...059057A5e
0 ETH0.000452978.13640799
Batch Burn183985422023-10-21 11:59:23429 days ago1697889563IN
0x14725840...059057A5e
0 ETH0.008345786.92525429
Batch Burn183980612023-10-21 10:22:47429 days ago1697883767IN
0x14725840...059057A5e
0 ETH0.006420316.97574412
Batch Burn183965552023-10-21 5:19:11429 days ago1697865551IN
0x14725840...059057A5e
0 ETH0.000566346.68793472
Batch Burn183956562023-10-21 2:17:59430 days ago1697854679IN
0x14725840...059057A5e
0 ETH0.001812526.58477451
Batch Burn183949002023-10-20 23:45:11430 days ago1697845511IN
0x14725840...059057A5e
0 ETH0.000581378.23155697
Batch Burn183931212023-10-20 17:48:11430 days ago1697824091IN
0x14725840...059057A5e
0 ETH0.0009786411.55680867
Burn183903302023-10-20 8:24:59430 days ago1697790299IN
0x14725840...059057A5e
0 ETH0.000411537.39219866
Batch Burn183902972023-10-20 8:18:23430 days ago1697789903IN
0x14725840...059057A5e
0 ETH0.001148948.60190351
Batch Burn183895702023-10-20 5:52:11430 days ago1697781131IN
0x14725840...059057A5e
0 ETH0.000571266.40680105
Batch Burn183884662023-10-20 2:10:35431 days ago1697767835IN
0x14725840...059057A5e
0 ETH0.000677448
Batch Burn183883382023-10-20 1:44:35431 days ago1697766275IN
0x14725840...059057A5e
0 ETH0.001826767.63457923
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BurnerContract

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : Contract.sol
// Layout of Contract:
// version
// imports
// errors
// interfaces, libraries, contracts
// Type declarations
// State variables
// Events
// Modifiers
// Functions

// Layout of Functions:
// constructor
// receive function (if exists)
// fallback function (if exists)
// external
// public
// internal
// private
// view & pure functions

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

import "@thirdweb-dev/contracts/extension/Permissions.sol";

import {INiftyKitCollection} from "../interfaces/INiftyKitCollection.sol";

contract BurnerContract is Permissions {
    error BurnerContract__NotOwner();

    INiftyKitCollection private targetCollection;

    constructor() {
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }

    function setCollection(
        address _targetCollection
    ) public onlyRole(DEFAULT_ADMIN_ROLE) {
        targetCollection = INiftyKitCollection(_targetCollection);
    }

    function burn(uint256 tokenId) public {
        address owner = targetCollection.ownerOf(tokenId);
        if (owner != msg.sender) {
            revert BurnerContract__NotOwner();
        }
        targetCollection.burn(tokenId);
    }

    function batchBurn(uint256[] calldata tokenIds) public {
        uint256 length = tokenIds.length;

        for (uint256 i = 0; i < length; i++) {
            address owner = targetCollection.ownerOf(tokenIds[i]);
            if (owner != msg.sender) {
                revert BurnerContract__NotOwner();
            }
        }
        for (uint256 i = 0; i < length; i++) {
            targetCollection.burn(tokenIds[i]);
        }
    }
}

File 2 of 5 : INiftyKitCollection.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;
interface INiftyKitCollection {
    function burn(uint256 tokenId) external;
    function ownerOf(uint256 tokenId) external view returns (address owner);
}

File 3 of 5 : Permissions.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/// @author thirdweb

import "./interface/IPermissions.sol";
import "../lib/TWStrings.sol";

/**
 *  @title   Permissions
 *  @dev     This contracts provides extending-contracts with role-based access control mechanisms
 */
contract Permissions is IPermissions {
    /// @dev Map from keccak256 hash of a role => a map from address => whether address has role.
    mapping(bytes32 => mapping(address => bool)) private _hasRole;

    /// @dev Map from keccak256 hash of a role to role admin. See {getRoleAdmin}.
    mapping(bytes32 => bytes32) private _getRoleAdmin;

    /// @dev Default admin role for all roles. Only accounts with this role can grant/revoke other roles.
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /// @dev Modifier that checks if an account has the specified role; reverts otherwise.
    modifier onlyRole(bytes32 role) {
        _checkRole(role, msg.sender);
        _;
    }

    /**
     *  @notice         Checks whether an account has a particular role.
     *  @dev            Returns `true` if `account` has been granted `role`.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     *  @param account  Address of the account for which the role is being checked.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _hasRole[role][account];
    }

    /**
     *  @notice         Checks whether an account has a particular role;
     *                  role restrictions can be swtiched on and off.
     *
     *  @dev            Returns `true` if `account` has been granted `role`.
     *                  Role restrictions can be swtiched on and off:
     *                      - If address(0) has ROLE, then the ROLE restrictions
     *                        don't apply.
     *                      - If address(0) does not have ROLE, then the ROLE
     *                        restrictions will apply.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     *  @param account  Address of the account for which the role is being checked.
     */
    function hasRoleWithSwitch(bytes32 role, address account) public view returns (bool) {
        if (!_hasRole[role][address(0)]) {
            return _hasRole[role][account];
        }

        return true;
    }

    /**
     *  @notice         Returns the admin role that controls the specified role.
     *  @dev            See {grantRole} and {revokeRole}.
     *                  To change a role's admin, use {_setRoleAdmin}.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     */
    function getRoleAdmin(bytes32 role) external view override returns (bytes32) {
        return _getRoleAdmin[role];
    }

    /**
     *  @notice         Grants a role to an account, if not previously granted.
     *  @dev            Caller must have admin role for the `role`.
     *                  Emits {RoleGranted Event}.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     *  @param account  Address of the account to which the role is being granted.
     */
    function grantRole(bytes32 role, address account) public virtual override {
        _checkRole(_getRoleAdmin[role], msg.sender);
        if (_hasRole[role][account]) {
            revert("Can only grant to non holders");
        }
        _setupRole(role, account);
    }

    /**
     *  @notice         Revokes role from an account.
     *  @dev            Caller must have admin role for the `role`.
     *                  Emits {RoleRevoked Event}.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     *  @param account  Address of the account from which the role is being revoked.
     */
    function revokeRole(bytes32 role, address account) public virtual override {
        _checkRole(_getRoleAdmin[role], msg.sender);
        _revokeRole(role, account);
    }

    /**
     *  @notice         Revokes role from the account.
     *  @dev            Caller must have the `role`, with caller being the same as `account`.
     *                  Emits {RoleRevoked Event}.
     *
     *  @param role     keccak256 hash of the role. e.g. keccak256("TRANSFER_ROLE")
     *  @param account  Address of the account from which the role is being revoked.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        if (msg.sender != account) {
            revert("Can only renounce for self");
        }
        _revokeRole(role, account);
    }

    /// @dev Sets `adminRole` as `role`'s admin role.
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = _getRoleAdmin[role];
        _getRoleAdmin[role] = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /// @dev Sets up `role` for `account`
    function _setupRole(bytes32 role, address account) internal virtual {
        _hasRole[role][account] = true;
        emit RoleGranted(role, account, msg.sender);
    }

    /// @dev Revokes `role` from `account`
    function _revokeRole(bytes32 role, address account) internal virtual {
        _checkRole(role, account);
        delete _hasRole[role][account];
        emit RoleRevoked(role, account, msg.sender);
    }

    /// @dev Checks `role` for `account`. Reverts with a message including the required role.
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!_hasRole[role][account]) {
            revert(
                string(
                    abi.encodePacked(
                        "Permissions: account ",
                        TWStrings.toHexString(uint160(account), 20),
                        " is missing role ",
                        TWStrings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /// @dev Checks `role` for `account`. Reverts with a message including the required role.
    function _checkRoleWithSwitch(bytes32 role, address account) internal view virtual {
        if (!hasRoleWithSwitch(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "Permissions: account ",
                        TWStrings.toHexString(uint160(account), 20),
                        " is missing role ",
                        TWStrings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }
}

File 4 of 5 : IPermissions.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/// @author thirdweb

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IPermissions {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

File 5 of 5 : TWStrings.sol
// SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.0;

/// @author thirdweb

/**
 * @dev String operations.
 */
library TWStrings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "remappings": [
    ":@thirdweb-dev/=node_modules/@thirdweb-dev/",
    ":ds-test/=lib/forge-std/lib/ds-test/src/",
    ":forge-std/=lib/forge-std/src/"
  ],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurnerContract__NotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRoleWithSwitch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_targetCollection","type":"address"}],"name":"setCollection","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061001c600033610021565b61007a565b6000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b610b3c806100896000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806391d148541161006657806391d1485414610124578063a217fddf14610147578063a32fa5b31461014f578063d547741f14610162578063dc8e92ea1461017557600080fd5b8063248a9ca3146100a35780632f2ff15d146100d657806336568abe146100eb57806342966c68146100fe578063768b5fd514610111575b600080fd5b6100c36100b1366004610896565b60009081526001602052604090205490565b6040519081526020015b60405180910390f35b6100e96100e43660046108c7565b610188565b005b6100e96100f93660046108c7565b610225565b6100e961010c366004610896565b610287565b6100e961011f3660046108f7565b610382565b6101376101323660046108c7565b6103b1565b60405190151581526020016100cd565b6100c3600081565b61013761015d3660046108c7565b6103dc565b6100e96101703660046108c7565b61042e565b6100e9610183366004610914565b610447565b6000828152600160205260409020546101a190336105bc565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16156102175760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c6465727300000060448201526064015b60405180910390fd5b610221828261063a565b5050565b336001600160a01b0382161461027d5760405162461bcd60e51b815260206004820152601a60248201527f43616e206f6e6c792072656e6f756e636520666f722073656c66000000000000604482015260640161020e565b6102218282610693565b6002546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610989565b90506001600160a01b03811633146103205760405163199ba92360e01b815260040160405180910390fd5b600254604051630852cd8d60e31b8152600481018490526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050505050565b600061038e81336105bc565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b60008281526020818152604080832083805290915281205460ff1661042557506000828152602081815260408083206001600160a01b038516845290915290205460ff166103d6565b50600192915050565b60008281526001602052604090205461027d90336105bc565b8060005b8181101561051d576002546000906001600160a01b0316636352211e868685818110610479576104796109a6565b905060200201356040518263ffffffff1660e01b815260040161049e91815260200190565b602060405180830381865afa1580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190610989565b90506001600160a01b038116331461050a5760405163199ba92360e01b815260040160405180910390fd5b5080610515816109d2565b91505061044b565b5060005b818110156105b6576002546001600160a01b03166342966c6885858481811061054c5761054c6109a6565b905060200201356040518263ffffffff1660e01b815260040161057191815260200190565b600060405180830381600087803b15801561058b57600080fd5b505af115801561059f573d6000803e3d6000fd5b5050505080806105ae906109d2565b915050610521565b50505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610221576105f8816001600160a01b031660146106f3565b6106038360206106f3565b604051602001610614929190610a0f565b60408051601f198184030181529082905262461bcd60e51b825261020e91600401610a7c565b6000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61069d82826105bc565b6000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610702836002610aaf565b61070d906002610ac6565b67ffffffffffffffff81111561072557610725610ad9565b6040519080825280601f01601f19166020018201604052801561074f576020820181803683370190505b509050600360fc1b8160008151811061076a5761076a6109a6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610799576107996109a6565b60200101906001600160f81b031916908160001a90535060006107bd846002610aaf565b6107c8906001610ac6565b90505b6001811115610840576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106107fc576107fc6109a6565b1a60f81b828281518110610812576108126109a6565b60200101906001600160f81b031916908160001a90535060049490941c9361083981610aef565b90506107cb565b50831561088f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020e565b9392505050565b6000602082840312156108a857600080fd5b5035919050565b6001600160a01b03811681146108c457600080fd5b50565b600080604083850312156108da57600080fd5b8235915060208301356108ec816108af565b809150509250929050565b60006020828403121561090957600080fd5b813561088f816108af565b6000806020838503121561092757600080fd5b823567ffffffffffffffff8082111561093f57600080fd5b818501915085601f83011261095357600080fd5b81358181111561096257600080fd5b8660208260051b850101111561097757600080fd5b60209290920196919550909350505050565b60006020828403121561099b57600080fd5b815161088f816108af565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016109e4576109e46109bc565b5060010190565b60005b83811015610a065781810151838201526020016109ee565b50506000910152565b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351610a3f8160158501602088016109eb565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351610a708160268401602088016109eb565b01602601949350505050565b6020815260008251806020840152610a9b8160408501602087016109eb565b601f01601f19169190910160400192915050565b80820281158282048414176103d6576103d66109bc565b808201808211156103d6576103d66109bc565b634e487b7160e01b600052604160045260246000fd5b600081610afe57610afe6109bc565b50600019019056fea2646970667358221220a52372e9ca6522ca1bc2f592c5646e1ab2af1c653102bee5b4996dbf294b7ddb64736f6c63430008140033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806391d148541161006657806391d1485414610124578063a217fddf14610147578063a32fa5b31461014f578063d547741f14610162578063dc8e92ea1461017557600080fd5b8063248a9ca3146100a35780632f2ff15d146100d657806336568abe146100eb57806342966c68146100fe578063768b5fd514610111575b600080fd5b6100c36100b1366004610896565b60009081526001602052604090205490565b6040519081526020015b60405180910390f35b6100e96100e43660046108c7565b610188565b005b6100e96100f93660046108c7565b610225565b6100e961010c366004610896565b610287565b6100e961011f3660046108f7565b610382565b6101376101323660046108c7565b6103b1565b60405190151581526020016100cd565b6100c3600081565b61013761015d3660046108c7565b6103dc565b6100e96101703660046108c7565b61042e565b6100e9610183366004610914565b610447565b6000828152600160205260409020546101a190336105bc565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16156102175760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c6465727300000060448201526064015b60405180910390fd5b610221828261063a565b5050565b336001600160a01b0382161461027d5760405162461bcd60e51b815260206004820152601a60248201527f43616e206f6e6c792072656e6f756e636520666f722073656c66000000000000604482015260640161020e565b6102218282610693565b6002546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610989565b90506001600160a01b03811633146103205760405163199ba92360e01b815260040160405180910390fd5b600254604051630852cd8d60e31b8152600481018490526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050505050565b600061038e81336105bc565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b60008281526020818152604080832083805290915281205460ff1661042557506000828152602081815260408083206001600160a01b038516845290915290205460ff166103d6565b50600192915050565b60008281526001602052604090205461027d90336105bc565b8060005b8181101561051d576002546000906001600160a01b0316636352211e868685818110610479576104796109a6565b905060200201356040518263ffffffff1660e01b815260040161049e91815260200190565b602060405180830381865afa1580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190610989565b90506001600160a01b038116331461050a5760405163199ba92360e01b815260040160405180910390fd5b5080610515816109d2565b91505061044b565b5060005b818110156105b6576002546001600160a01b03166342966c6885858481811061054c5761054c6109a6565b905060200201356040518263ffffffff1660e01b815260040161057191815260200190565b600060405180830381600087803b15801561058b57600080fd5b505af115801561059f573d6000803e3d6000fd5b5050505080806105ae906109d2565b915050610521565b50505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610221576105f8816001600160a01b031660146106f3565b6106038360206106f3565b604051602001610614929190610a0f565b60408051601f198184030181529082905262461bcd60e51b825261020e91600401610a7c565b6000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916600117905551339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61069d82826105bc565b6000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610702836002610aaf565b61070d906002610ac6565b67ffffffffffffffff81111561072557610725610ad9565b6040519080825280601f01601f19166020018201604052801561074f576020820181803683370190505b509050600360fc1b8160008151811061076a5761076a6109a6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610799576107996109a6565b60200101906001600160f81b031916908160001a90535060006107bd846002610aaf565b6107c8906001610ac6565b90505b6001811115610840576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106107fc576107fc6109a6565b1a60f81b828281518110610812576108126109a6565b60200101906001600160f81b031916908160001a90535060049490941c9361083981610aef565b90506107cb565b50831561088f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161020e565b9392505050565b6000602082840312156108a857600080fd5b5035919050565b6001600160a01b03811681146108c457600080fd5b50565b600080604083850312156108da57600080fd5b8235915060208301356108ec816108af565b809150509250929050565b60006020828403121561090957600080fd5b813561088f816108af565b6000806020838503121561092757600080fd5b823567ffffffffffffffff8082111561093f57600080fd5b818501915085601f83011261095357600080fd5b81358181111561096257600080fd5b8660208260051b850101111561097757600080fd5b60209290920196919550909350505050565b60006020828403121561099b57600080fd5b815161088f816108af565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016109e4576109e46109bc565b5060010190565b60005b83811015610a065781810151838201526020016109ee565b50506000910152565b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351610a3f8160158501602088016109eb565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351610a708160268401602088016109eb565b01602601949350505050565b6020815260008251806020840152610a9b8160408501602087016109eb565b601f01601f19169190910160400192915050565b80820281158282048414176103d6576103d66109bc565b808201808211156103d6576103d66109bc565b634e487b7160e01b600052604160045260246000fd5b600081610afe57610afe6109bc565b50600019019056fea2646970667358221220a52372e9ca6522ca1bc2f592c5646e1ab2af1c653102bee5b4996dbf294b7ddb64736f6c63430008140033

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

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