Contract 0xfe5e8baaa93bb559142593b6402595f493a79a68

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x5115b702339334031826c41dde167eb28e85f8cc59eef867b7b49e0364422bf7Set Preapproved ...147899992021-05-22 7:35:22677 days 58 mins ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000531591
0x42c334c1a65a8904ea196ce80b6d15b2e5be03a2952d4b49a5d30f54b39be3d9Set Approvable C...147899812021-05-22 7:34:46677 days 59 mins ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000508681
0x553b353cd684daa437dbcb2655802e140ff7ac2a202395be7cbebd75377a180eSet Preapproved ...147130342021-05-20 7:17:30679 days 1 hr ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000480591
0x328d122bf8624e2586c3117a25e98145f6a678f5405e4677e8d4453cd153ac41Set Approvable C...147130252021-05-20 7:17:12679 days 1 hr ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000470681
0xbc5dcc8835bf2c0e8a33bd5091295936a060e62700762893a241b8f5b037dcffSet Preapproved ...147126332021-05-20 7:02:56679 days 1 hr ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000480591
0x706eba9934bec882dea7aa213ee5cd25b3f646cacfeaa9ca7b8d10b058a6dcbbSet Approvable C...147126222021-05-20 7:02:34679 days 1 hr ago0x335944b36b02401fb35ca3aa64cc9468e5eb3742 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000470681
0x552e742eb289c82c1c633d7198c29bb852726319b7e651e2df7b5bcbf6e968b1Add Operator147125602021-05-20 7:00:26679 days 1 hr ago0xdb235e08be03b46aeedd6b046704544c6565ba46 IN  0xfe5e8baaa93bb559142593b6402595f493a79a680 MATIC0.0000458681
0x7e9e13b802e242b5ff14f7fcdc7f7d1e7aa83178c880c6b6bf0ad2b0859545b20x60806040144763002021-05-14 8:28:19685 days 5 mins ago0xdb235e08be03b46aeedd6b046704544c6565ba46 IN  Create: BFHApprovalProxyV10 MATIC0.0008681821
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BFHApprovalProxyV1

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-30
*/

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

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File contracts3/roles/Roles.sol


pragma solidity ^0.8.0;

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "role already has the account");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "role dosen't have the account");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account)
        internal
        view
        returns (bool)
    {
        return role.bearer[account];
    }
}


// File contracts3/roles/ERC173.sol


pragma solidity ^0.8.0;

//import "@openzeppelin/contracts/utils/introspection/ERC165.sol";

/// @title ERC-173 Contract Ownership Standard
/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-173.md
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() external view returns (address);

    /// @notice Set the address of the new owner of the contract
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

abstract contract ERC173 is IERC173 {
    address private _owner;

    constructor() {
        //_registerInterface(0x7f5828d0);
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner(), "Must be owner");
        _;
    }

    function owner() public view override returns (address) {
        return _owner;
    }

    function transferOwnership(address _newOwner)
        public
        virtual
        override
        onlyOwner()
    {
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner) internal {
        address previousOwner = owner();
        _owner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }
}


// File contracts3/roles/Operatable.sol


pragma solidity ^0.8.0;


abstract contract Operatable is ERC173 {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;
    Roles.Role private operators;

    constructor() {
        operators.add(msg.sender);
        _paused = false;
    }

    modifier onlyOperator() {
        require(isOperator(msg.sender), "Must be operator");
        _;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    function transferOwnership(address _newOwner)
        public
        override
        onlyOperator()
    {
        _transferOwnership(_newOwner);
    }

    function isOperator(address account) public view returns (bool) {
        return operators.has(account);
    }

    function addOperator(address account) public onlyOperator() {
        operators.add(account);
        emit OperatorAdded(account);
    }

    function removeOperator(address account) public onlyOperator() {
        operators.remove(account);
        emit OperatorRemoved(account);
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    function pause() public onlyOperator() whenNotPaused() {
        _paused = true;
        emit Paused(msg.sender);
    }

    function unpause() public onlyOperator() whenPaused() {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}


// File contracts3/IApprovalProxy.sol

pragma solidity ^0.8.0;

interface IApprovalProxy {
  function setApprovalForAll(address _owner, address _spender, bool _approved) external;
  function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool);
}


// File contracts3/BFHApprovalProxyV1.sol

pragma solidity ^0.8.0;



contract OwnableDelegateProxy { }
contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
    function set(address _owner, address _spender) external {
        proxies[_owner] = OwnableDelegateProxy(_spender);
    }
}

contract BFHApprovalProxyV1 is IApprovalProxy, Operatable {
    using Address for address;
    using Roles for Roles.Role;

    Roles.Role private approvableContracts;
    Roles.Role private preapprovedContracts;
    mapping (address => mapping (address => bool)) private _expresslyNotApprovalSpender;
    mapping (address => mapping (address => bool)) private _contractApprovals;

    ProxyRegistry public openSeaProxyRegistry;
    mapping (address => bool) private openSeaDisabled;

    event UpdateApprovableContracts (address spender, bool approved);
    event UpdatePreapprovedContracts (address spender, bool approved);

    modifier onlyContract(address _spender) {
        require(_spender.isContract(), "_spender must be contract");
        _;
    }

    constructor() {}

    function setApprovalForAll(address _owner, address _spender, bool _approved) override public onlyContract(_spender) onlyOperator() {
        require(isApprovableContract(_spender), "_spender must belong to approvable role");
        _expresslyNotApprovalSpender[_owner][_spender] = !_approved;
    }

    function isApprovedForAll(address _owner, address _spender, bool _original) override public view returns (bool) {
        if (approvalToOpenSea(_owner, _spender)) {
            return true;
        }
        if (_spender.isContract()) {
            if (!isApprovableContract(_spender)) {
                return false;
            }
            if (isPreapprovedContract(_spender)) {
                return !_expresslyNotApprovalSpender[_owner][_spender];
            }
        }
        return _original;
    }

    // OpenSea
    function setOpenSeaProxyRegistry(address _openSeaProxyRegistry) public onlyOperator() {
        openSeaProxyRegistry = ProxyRegistry(_openSeaProxyRegistry);
    }

    function enableOpenSea() public {
        openSeaDisabled[msg.sender] = false;
    }

    function disableOpenSea() public {
        openSeaDisabled[msg.sender] = true;
    }
    
    function getOpenSeaSpender(address _owner) public view returns (address) {
        return address(openSeaProxyRegistry.proxies(_owner));
    }

    function approvalToOpenSea(address _owner, address _spender) public view returns (bool) {
        if (address(openSeaProxyRegistry) == address(0x0)) {
            return false;
        }
        if (openSeaDisabled[_owner]) {
            return false;
        }
        return (getOpenSeaSpender(_owner) == _spender);
    }

    // Approvable list
    function setApprovableContracts(address _spender, bool _approvable) public onlyOperator() onlyContract(_spender) {
        emit UpdateApprovableContracts(_spender, _approvable);
        if (_approvable) {
            approvableContracts.add(_spender);
        } else {
            require(!isPreapprovedContract(_spender), "_spender must not be preapproval");
            approvableContracts.remove(_spender);
        }
    }

    function isApprovableContract(address _spender) public view returns (bool) {
        return approvableContracts.has(_spender);
    }

    function setPreapprovedContracts(address _spender, bool _approval) public onlyOperator() onlyContract(_spender) {
        require(isApprovableContract(_spender), "_spender must not be approvable");
        emit UpdatePreapprovedContracts(_spender, _approval);
        if (_approval) {
            preapprovedContracts.add(_spender);
        } else {
            preapprovedContracts.remove(_spender);
        }
    }

    function isPreapprovedContract(address _spender) public view returns (bool) {
        return preapprovedContracts.has(_spender);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"UpdateApprovableContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"UpdatePreapprovedContracts","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"approvalToOpenSea","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOpenSeaSpender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovableContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_original","type":"bool"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"isPreapprovedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaProxyRegistry","outputs":[{"internalType":"contract ProxyRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approvable","type":"bool"}],"name":"setApprovableContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_openSeaProxyRegistry","type":"address"}],"name":"setOpenSeaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approval","type":"bool"}],"name":"setPreapprovedContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061001a33610044565b61003233600161009f60201b61095f1790919060201c565b6000805460ff60a01b19169055610159565b600061004e6100f4565b600080546001600160a01b0319166001600160a01b0385811691821783556040519394509092908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6100a98282610103565b156100cf5760405162461bcd60e51b81526004016100c690610122565b60405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000546001600160a01b031690565b6001600160a01b03166000908152602091909152604090205460ff1690565b6020808252601c908201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604082015260600190565b610dcc806101686000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806389f69dba116100ad578063ac8a584a11610071578063ac8a584a14610231578063cf10ef2d14610244578063d3b805d814610257578063f2fde38b1461026a578063f8c0c9161461027d5761012c565b806389f69dba146101dd5780638da5cb5b146101f05780638dccfc52146101f85780639870d7fe1461020b578063a4d925f11461021e5761012c565b80635c975abb116100f45780635c975abb1461019f5780635e6241b2146101a75780636025b389146101ba5780636d70f7ae146101c25780638456cb59146101d55761012c565b8063171b5b6a14610131578063367605ca146101465780633f4ba83a146101595780635025b548146101615780635b620bd31461017f575b600080fd5b61014461013f366004610b1d565b610285565b005b610144610154366004610ad7565b610366565b610144610419565b6101696104ae565b6040516101769190610b6d565b60405180910390f35b61019261018d366004610a83565b6104bd565b6040516101769190610b9c565b6101926104d2565b6101926101b5366004610a9f565b6104e2565b61014461054c565b6101926101d0366004610a83565b610565565b610144610572565b6101446101eb366004610b1d565b610604565b6101696106d3565b610192610206366004610ad7565b6106e2565b610144610219366004610a83565b61076f565b61014461022c366004610a83565b6107d6565b61014461023f366004610a83565b61081d565b610192610252366004610a83565b610884565b610169610265366004610a83565b610891565b610144610278366004610a83565b610912565b610144610943565b61028e33610565565b6102b35760405162461bcd60e51b81526004016102aa90610bd5565b60405180910390fd5b816102c6816001600160a01b03166109ab565b6102e25760405162461bcd60e51b81526004016102aa90610bff565b6102eb83610884565b6103075760405162461bcd60e51b81526004016102aa90610d13565b7f41243044fceb8e758713bc0c30e27030c46b1979b7e6936d996d00f840f03d8f8383604051610338929190610b81565b60405180910390a181156103565761035160038461095f565b610361565b6103616003846109b1565b505050565b81610379816001600160a01b03166109ab565b6103955760405162461bcd60e51b81526004016102aa90610bff565b61039e33610565565b6103ba5760405162461bcd60e51b81526004016102aa90610bd5565b6103c383610884565b6103df5760405162461bcd60e51b81526004016102aa90610c36565b506001600160a01b03928316600090815260046020908152604080832094909516825292909252919020805460ff19169115919091179055565b61042233610565565b61043e5760405162461bcd60e51b81526004016102aa90610bd5565b600054600160a01b900460ff166104675760405162461bcd60e51b81526004016102aa90610ba7565b6000805460ff60a01b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906104a4903390610b6d565b60405180910390a1565b6006546001600160a01b031681565b60006104ca6003836109f9565b90505b919050565b600054600160a01b900460ff1690565b6006546000906001600160a01b03166104fd57506000610546565b6001600160a01b03831660009081526007602052604090205460ff161561052657506000610546565b816001600160a01b031661053984610891565b6001600160a01b03161490505b92915050565b336000908152600760205260409020805460ff19169055565b60006104ca6001836109f9565b61057b33610565565b6105975760405162461bcd60e51b81526004016102aa90610bd5565b600054600160a01b900460ff16156105c15760405162461bcd60e51b81526004016102aa90610c7d565b6000805460ff60a01b1916600160a01b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906104a4903390610b6d565b61060d33610565565b6106295760405162461bcd60e51b81526004016102aa90610bd5565b8161063c816001600160a01b03166109ab565b6106585760405162461bcd60e51b81526004016102aa90610bff565b7fb27c82517d508b5ef74d0dee84509db8503c954c999cfb72a3a0bd5e002552e78383604051610689929190610b81565b60405180910390a181156106a25761035160028461095f565b6106ab836104bd565b156106c85760405162461bcd60e51b81526004016102aa90610ca7565b6103616002846109b1565b6000546001600160a01b031690565b60006106ee84846104e2565b156106fb57506001610768565b61070d836001600160a01b03166109ab565b156107655761071b83610884565b61072757506000610768565b610730836104bd565b1561076557506001600160a01b0380841660009081526004602090815260408083209386168352929052205460ff1615610768565b50805b9392505050565b61077833610565565b6107945760405162461bcd60e51b81526004016102aa90610bd5565b61079f60018261095f565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b6107df33610565565b6107fb5760405162461bcd60e51b81526004016102aa90610bd5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61082633610565565b6108425760405162461bcd60e51b81526004016102aa90610bd5565b61084d6001826109b1565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b60006104ca6002836109f9565b60065460405163c455279160e01b81526000916001600160a01b03169063c4552791906108c2908590600401610b6d565b60206040518083038186803b1580156108da57600080fd5b505afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca9190610b51565b61091b33610565565b6109375760405162461bcd60e51b81526004016102aa90610bd5565b61094081610a18565b50565b336000908152600760205260409020805460ff19166001179055565b61096982826109f9565b156109865760405162461bcd60e51b81526004016102aa90610cdc565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b6109bb82826109f9565b6109d75760405162461bcd60e51b81526004016102aa90610d4a565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03166000908152602091909152604090205460ff1690565b6000610a226106d3565b600080546001600160a01b0319166001600160a01b0385811691821783556040519394509092908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b803580151581146104cd57600080fd5b600060208284031215610a94578081fd5b813561076881610d81565b60008060408385031215610ab1578081fd5b8235610abc81610d81565b91506020830135610acc81610d81565b809150509250929050565b600080600060608486031215610aeb578081fd5b8335610af681610d81565b92506020840135610b0681610d81565b9150610b1460408501610a73565b90509250925092565b60008060408385031215610b2f578182fd5b8235610b3a81610d81565b9150610b4860208401610a73565b90509250929050565b600060208284031215610b62578081fd5b815161076881610d81565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526010908201526f26bab9ba1031329037b832b930ba37b960811b604082015260600190565b60208082526019908201527f5f7370656e646572206d75737420626520636f6e747261637400000000000000604082015260600190565b60208082526027908201527f5f7370656e646572206d7573742062656c6f6e6720746f20617070726f7661626040820152666c6520726f6c6560c81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f5f7370656e646572206d757374206e6f7420626520707265617070726f76616c604082015260600190565b6020808252601c908201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604082015260600190565b6020808252601f908201527f5f7370656e646572206d757374206e6f7420626520617070726f7661626c6500604082015260600190565b6020808252601d908201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604082015260600190565b6001600160a01b038116811461094057600080fdfea26469706673582212204f567043562c579ce8d88f6b591b2a6c9136535c3d216a5b4e2c57d03e4ba6f664736f6c63430008010033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.