ETH Price: $2,421.57 (+0.82%)

Contract

0x7Ee06e44C4764A49346290CD9a2267DB6daD7214
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy For159573702022-11-12 23:58:11693 days ago1668297491IN
0x7Ee06e44...B6daD7214
0 ETH0.0119795912.90866188
0x60806040145547542022-04-10 0:29:58910 days ago1649550598IN
 Contract Creation
0 ETH0.0405512836.97485401

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
167252922023-02-28 7:52:47585 days ago1677570767
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
164533672023-01-21 6:25:23623 days ago1674282323
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
163944452023-01-13 0:58:23632 days ago1673571503
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
163875122023-01-12 1:42:59633 days ago1673487779
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
162397142022-12-22 10:41:47653 days ago1671705707
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
161692292022-12-12 14:29:35663 days ago1670855375
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
159829602022-11-16 13:43:47689 days ago1668606227
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
159806122022-11-16 5:50:59689 days ago1668577859
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
159573702022-11-12 23:58:11693 days ago1668297491
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
157996652022-10-21 23:08:47715 days ago1666393727
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
157747052022-10-18 11:30:47718 days ago1666092647
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
157746962022-10-18 11:28:59718 days ago1666092539
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
156982932022-10-07 19:28:23729 days ago1665170903
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
156912372022-10-06 19:46:23730 days ago1665085583
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
156466922022-09-30 14:16:47736 days ago1664547407
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
156167272022-09-26 9:42:59740 days ago1664185379
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153635702022-08-18 6:56:11779 days ago1660805771
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153633562022-08-18 5:58:57779 days ago1660802337
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153588172022-08-17 12:49:00780 days ago1660740540
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153587552022-08-17 12:35:39780 days ago1660739739
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153573122022-08-17 7:14:16780 days ago1660720456
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
153181612022-08-11 2:42:01787 days ago1660185721
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
152804492022-08-05 5:34:29792 days ago1659677669
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
152642712022-08-02 16:53:02795 days ago1659459182
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
152636322022-08-02 14:23:48795 days ago1659450228
0x7Ee06e44...B6daD7214
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x2E017428...6af1d8975
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PRBProxyFactory

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 8000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-06
*/

// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.4;

/// @title IPRBProxy
/// @author Paul Razvan Berg
/// @notice Proxy contract to compose transactions on owner's behalf.
interface IPRBProxy {
    /// EVENTS ///

    event Execute(address indexed target, bytes data, bytes response);

    event TransferOwnership(address indexed oldOwner, address indexed newOwner);

    /// PUBLIC CONSTANT FUNCTIONS ///

    /// @notice Returns a boolean flag that indicates whether the envoy has permission to call the given target
    /// contract and function selector.
    function getPermission(
        address envoy,
        address target,
        bytes4 selector
    ) external view returns (bool);

    /// @notice The address of the owner account or contract.
    function owner() external view returns (address);

    /// @notice How much gas to reserve for running the remainder of the "execute" function after the DELEGATECALL.
    /// @dev This prevents the proxy from becoming unusable if EVM opcode gas costs change in the future.
    function minGasReserve() external view returns (uint256);

    /// PUBLIC NON-CONSTANT FUNCTIONS ///

    /// @notice Delegate calls to the target contract by forwarding the call data. Returns the data it gets back,
    /// including when the contract call reverts with a reason or custom error.
    ///
    /// @dev Requirements:
    /// - The caller must be either an owner or an envoy.
    /// - `target` must be a deployed contract.
    /// - The owner cannot be changed during the DELEGATECALL.
    ///
    /// @param target The address of the target contract.
    /// @param data Function selector plus ABI encoded data.
    /// @return response The response received from the target contract.
    function execute(address target, bytes calldata data) external payable returns (bytes memory response);

    /// @notice Gives or takes a permission from an envoy to call the given target contract and function selector
    /// on behalf of the owner.
    /// @dev It is not an error to reset a permission on the same (envoy,target,selector) tuple multiple types.
    ///
    /// Requirements:
    /// - The caller must be the owner.
    ///
    /// @param envoy The address of the envoy account.
    /// @param target The address of the target contract.
    /// @param selector The 4 byte function selector on the target contract.
    /// @param permission The boolean permission to set.
    function setPermission(
        address envoy,
        address target,
        bytes4 selector,
        bool permission
    ) external;

    /// @notice Transfers the owner of the contract to a new account.
    /// @dev Requirements:
    /// - The caller must be the owner.
    /// @param newOwner The address of the new owner account.
    function transferOwnership(address newOwner) external;
}
/// @title IPRBProxyFactory
/// @author Paul Razvan Berg
/// @notice Deploys new proxies with CREATE2.
interface IPRBProxyFactory {
    /// EVENTS ///

    event DeployProxy(
        address indexed origin,
        address indexed deployer,
        address indexed owner,
        bytes32 seed,
        bytes32 salt,
        address proxy
    );

    /// PUBLIC CONSTANT FUNCTIONS ///

    /// @notice Gets the next seed that will be used to deploy the proxy.
    /// @param eoa The externally owned account that will own the proxy.
    function getNextSeed(address eoa) external view returns (bytes32 result);

    /// @notice Mapping to track all deployed proxies.
    /// @param proxy The address of the proxy to make the check for.
    function isProxy(address proxy) external view returns (bool result);

    /// @notice The release version of PRBProxy.
    /// @dev This is stored in the factory rather than the proxy to save gas for end users.
    function version() external view returns (uint256);

    /// PUBLIC NON-CONSTANT FUNCTIONS ///

    /// @notice Deploys a new proxy via CREATE2.
    /// @dev Sets "msg.sender" as the owner of the proxy.
    /// @return proxy The address of the newly deployed proxy contract.
    function deploy() external returns (address payable proxy);

    /// @notice Deploys a new proxy via CREATE2, for the given owner.
    /// @param owner The owner of the proxy.
    /// @return proxy The address of the newly deployed proxy contract.
    function deployFor(address owner) external returns (address payable proxy);
}
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)



// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)



// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)



// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)



/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)





/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

/**
 * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
 *
 * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
 * stuck.
 *
 * @dev _Available since v3.1._
 */
contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)



// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)



/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}
/// @notice Emitted when the caller is not the owner.
error PRBProxy__ExecutionNotAuthorized(address owner, address caller, address target, bytes4 selector);

/// @notice Emitted when execution reverted with no reason.
error PRBProxy__ExecutionReverted();

/// @notice Emitted when the caller is not the owner.
error PRBProxy__NotOwner(address owner, address caller);

/// @notice Emitted when the owner is changed during the DELEGATECALL.
error PRBProxy__OwnerChanged(address originalOwner, address newOwner);

/// @notice Emitted when passing an EOA or an undeployed contract as the target.
error PRBProxy__TargetInvalid(address target);

/// @title PRBProxy
/// @author Paul Razvan Berg
contract PRBProxy is IPRBProxy, ERC1155Holder, ERC721Holder {
    /// PUBLIC STORAGE ///

    /// @inheritdoc IPRBProxy
    address public override owner;

    /// @inheritdoc IPRBProxy
    uint256 public override minGasReserve;

    /// INTERNAL STORAGE ///

    /// @notice Maps envoys to target contracts to function selectors to boolean flags.
    mapping(address => mapping(address => mapping(bytes4 => bool))) internal permissions;

    /// CONSTRUCTOR ///

    constructor() {
        minGasReserve = 5_000;
        owner = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    /// FALLBACK FUNCTION ///

    /// @dev Called when Ether is sent and the call data is empty.
    receive() external payable {}

    /// PUBLIC CONSTANT FUNCTIONS ///

    /// @inheritdoc IPRBProxy
    function getPermission(
        address envoy,
        address target,
        bytes4 selector
    ) external view override returns (bool) {
        return permissions[envoy][target][selector];
    }

    /// PUBLIC NON-CONSTANT FUNCTIONS ///

    /// @inheritdoc IPRBProxy
    function execute(address target, bytes calldata data) external payable override returns (bytes memory response) {
        // Check that the caller is either the owner or an envoy.
        if (owner != msg.sender) {
            bytes4 selector;
            assembly {
                selector := calldataload(data.offset)
            }
            if (!permissions[msg.sender][target][selector]) {
                revert PRBProxy__ExecutionNotAuthorized(owner, msg.sender, target, selector);
            }
        }

        // Check that the target is a valid contract.
        if (target.code.length == 0) {
            revert PRBProxy__TargetInvalid(target);
        }

        // Save the owner address in memory. This local variable cannot be modified during the DELEGATECALL.
        address owner_ = owner;

        // Reserve some gas to ensure that the function has enough to finish the execution.
        uint256 stipend = gasleft() - minGasReserve;

        // Delegate call to the target contract.
        bool success;
        (success, response) = target.delegatecall{ gas: stipend }(data);

        // Check that the owner has not been changed.
        if (owner_ != owner) {
            revert PRBProxy__OwnerChanged(owner_, owner);
        }

        // Log the execution.
        emit Execute(target, data, response);

        // Check if the call was successful or not.
        if (!success) {
            // If there is return data, the call reverted with a reason or a custom error.
            if (response.length > 0) {
                assembly {
                    let returndata_size := mload(response)
                    revert(add(32, response), returndata_size)
                }
            } else {
                revert PRBProxy__ExecutionReverted();
            }
        }
    }

    /// @inheritdoc IPRBProxy
    function setPermission(
        address envoy,
        address target,
        bytes4 selector,
        bool permission
    ) external override {
        if (owner != msg.sender) {
            revert PRBProxy__NotOwner(owner, msg.sender);
        }
        permissions[envoy][target][selector] = permission;
    }

    /// @inheritdoc IPRBProxy
    function transferOwnership(address newOwner) external override {
        address oldOwner = owner;
        if (oldOwner != msg.sender) {
            revert PRBProxy__NotOwner(oldOwner, msg.sender);
        }
        owner = newOwner;
        emit TransferOwnership(oldOwner, newOwner);
    }
}

/// @title PRBProxyFactory
/// @author Paul Razvan Berg
contract PRBProxyFactory is IPRBProxyFactory {
    /// PUBLIC STORAGE ///

    /// @inheritdoc IPRBProxyFactory
    uint256 public constant override version = 2;

    /// INTERNAL STORAGE ///

    /// @dev Internal mapping to track all deployed proxies.
    mapping(address => bool) internal proxies;

    /// @dev Internal mapping to track the next seed to be used by an EOA.
    mapping(address => bytes32) internal nextSeeds;

    /// PUBLIC CONSTANT FUNCTIONS ///

    /// @inheritdoc IPRBProxyFactory
    function getNextSeed(address eoa) external view override returns (bytes32 nextSeed) {
        nextSeed = nextSeeds[eoa];
    }

    /// @inheritdoc IPRBProxyFactory
    function isProxy(address proxy) external view override returns (bool result) {
        result = proxies[proxy];
    }

    /// PUBLIC NON-CONSTANT FUNCTIONS ///

    /// @inheritdoc IPRBProxyFactory
    function deploy() external override returns (address payable proxy) {
        proxy = deployFor(msg.sender);
    }

    /// @inheritdoc IPRBProxyFactory
    function deployFor(address owner) public override returns (address payable proxy) {
        bytes32 seed = nextSeeds[tx.origin];

        // Prevent front-running the salt by hashing the concatenation of "tx.origin" and the user-provided seed.
        bytes32 salt = keccak256(abi.encode(tx.origin, seed));

        // Deploy the proxy with CREATE2.
        proxy = payable(new PRBProxy{ salt: salt }());

        // Transfer the ownership from this factory contract to the specified owner.
        IPRBProxy(proxy).transferOwnership(owner);

        // Mark the proxy as deployed.
        proxies[proxy] = true;

        // Increment the seed.
        unchecked {
            nextSeeds[tx.origin] = bytes32(uint256(seed) + 1);
        }

        // Log the proxy via en event.
        emit DeployProxy(tx.origin, msg.sender, owner, seed, salt, address(proxy));
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"origin","type":"address"},{"indexed":true,"internalType":"address","name":"deployer","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"bytes32","name":"seed","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"salt","type":"bytes32"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"DeployProxy","type":"event"},{"inputs":[],"name":"deploy","outputs":[{"internalType":"address payable","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"deployFor","outputs":[{"internalType":"address payable","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"eoa","type":"address"}],"name":"getNextSeed","outputs":[{"internalType":"bytes32","name":"nextSeed","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100675760003560e01c806354fd4d501161005057806354fd4d50146100fe57806374912cd214610106578063775c300c1461013e57600080fd5b8063297103881461006c57806337a6be16146100ba575b600080fd5b6100a561007a366004610305565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100f06100c8366004610305565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6040519081526020016100b1565b6100f0600281565b610119610114366004610305565b610146565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b1565b6101196102e8565b326000818152600160209081526040808320548151928301949094528101839052909190829060600160405160208183030381529060405280519060200120905080604051610194906102f8565b8190604051809103906000f59050801580156101b4573d6000803e3d6000fd5b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529194509084169063f2fde38b90602401600060405180830381600087803b15801561022257600080fd5b505af1158015610236573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff83811660008181526020818152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091553280855281845293829020908801905580518781529182018690528101929092529186169133917f6aafca263a35a9d2a6e4e4659a84688092f4ae153df2f95cd7659508d95c18709060600160405180910390a45050919050565b60006102f333610146565b905090565b610f8d8061034383390190565b60006020828403121561031757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461033b57600080fd5b939250505056fe608060405234801561001057600080fd5b50611388600155600080546001600160a01b0319163390811782556040519091907f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c908290a3610f28806100656000396000f3fe6080604052600436106100b55760003560e01c8063bc197c8111610069578063e64624fa1161004e578063e64624fa146102c7578063f23a6e61146102e9578063f2fde38b1461032e57600080fd5b8063bc197c8114610201578063da8d882c1461024657600080fd5b80631cff79cd1161009a5780631cff79cd1461016b5780638da5cb5b1461018b5780639d159568146101dd57600080fd5b806301ffc9a7146100c1578063150b7a02146100f657600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc36600461093b565b61034e565b60405190151581526020015b60405180910390f35b34801561010257600080fd5b5061013a610111366004610a8d565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100ed565b61017e610179366004610af5565b6103e7565b6040516100ed9190610be3565b34801561019757600080fd5b506000546101b89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b3480156101e957600080fd5b506101f360015481565b6040519081526020016100ed565b34801561020d57600080fd5b5061013a61021c366004610c76565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561025257600080fd5b506100e1610261366004610d20565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526002602090815260408083209490951682529283528381207fffffffff000000000000000000000000000000000000000000000000000000009290921681529152205460ff1690565b3480156102d357600080fd5b506102e76102e2366004610d63565b61071c565b005b3480156102f557600080fd5b5061013a610304366004610dbe565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b34801561033a57600080fd5b506102e7610349366004610e23565b610822565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806103e157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60005460609073ffffffffffffffffffffffffffffffffffffffff1633146104f85733600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825280832086357fffffffff000000000000000000000000000000000000000000000000000000008116855292529091205460ff166104f6576000546040517fa2ee03b800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015233602482015290861660448201527fffffffff00000000000000000000000000000000000000000000000000000000821660648201526084015b60405180910390fd5b505b8373ffffffffffffffffffffffffffffffffffffffff163b600003610561576040517f29ba3bdf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016104ed565b6000805460015473ffffffffffffffffffffffffffffffffffffffff90911691905a61058d9190610e3e565b905060008673ffffffffffffffffffffffffffffffffffffffff168287876040516105b9929190610e7c565b6000604051808303818686f4925050503d80600081146105f5576040519150601f19603f3d011682016040523d82523d6000602084013e6105fa565b606091505b5060005490955090915073ffffffffffffffffffffffffffffffffffffffff848116911614610679576000546040517fbcac60ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015290911660248201526044016104ed565b8673ffffffffffffffffffffffffffffffffffffffff167fb24ebe141c5f2a744b103bea65fce6c40e0dc65d7341d092c09b160f404479908787876040516106c393929190610e8c565b60405180910390a280610712578351156106e05783518085602001fd5b6040517fe336368800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461078f576000546040517fac976e3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201523360248201526044016104ed565b73ffffffffffffffffffffffffffffffffffffffff93841660009081526002602090815260408083209590961682529384528481207fffffffff00000000000000000000000000000000000000000000000000000000939093168152919092529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16338114610892576040517fac976e3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201523360248201526044016104ed565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821783556040519192908416917f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9190a35050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461093657600080fd5b919050565b60006020828403121561094d57600080fd5b61095682610906565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461093657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109f7576109f7610981565b604052919050565b600082601f830112610a1057600080fd5b813567ffffffffffffffff811115610a2a57610a2a610981565b610a5b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016109b0565b818152846020838601011115610a7057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215610aa357600080fd5b610aac8561095d565b9350610aba6020860161095d565b925060408501359150606085013567ffffffffffffffff811115610add57600080fd5b610ae9878288016109ff565b91505092959194509250565b600080600060408486031215610b0a57600080fd5b610b138461095d565b9250602084013567ffffffffffffffff80821115610b3057600080fd5b818601915086601f830112610b4457600080fd5b813581811115610b5357600080fd5b876020828501011115610b6557600080fd5b6020830194508093505050509250925092565b6000815180845260005b81811015610b9e57602081850181015186830182015201610b82565b81811115610bb0576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006109566020830184610b78565b600082601f830112610c0757600080fd5b8135602067ffffffffffffffff821115610c2357610c23610981565b8160051b610c328282016109b0565b9283528481018201928281019087851115610c4c57600080fd5b83870192505b84831015610c6b57823582529183019190830190610c52565b979650505050505050565b600080600080600060a08688031215610c8e57600080fd5b610c978661095d565b9450610ca56020870161095d565b9350604086013567ffffffffffffffff80821115610cc257600080fd5b610cce89838a01610bf6565b94506060880135915080821115610ce457600080fd5b610cf089838a01610bf6565b93506080880135915080821115610d0657600080fd5b50610d13888289016109ff565b9150509295509295909350565b600080600060608486031215610d3557600080fd5b610d3e8461095d565b9250610d4c6020850161095d565b9150610d5a60408501610906565b90509250925092565b60008060008060808587031215610d7957600080fd5b610d828561095d565b9350610d906020860161095d565b9250610d9e60408601610906565b915060608501358015158114610db357600080fd5b939692955090935050565b600080600080600060a08688031215610dd657600080fd5b610ddf8661095d565b9450610ded6020870161095d565b93506040860135925060608601359150608086013567ffffffffffffffff811115610e1757600080fd5b610d13888289016109ff565b600060208284031215610e3557600080fd5b6109568261095d565b600082821015610e77577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b8183823760009101908152919050565b604081528260408201528284606083013760006060848301015260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682016060838203016020840152610ee86060820185610b78565b969550505050505056fea264697066735822122040baae7ba7d17a7154c2408661b75cada84bdd2dbfcadd8f3fe3bd34c5af3fe764736f6c634300080d0033a264697066735822122001fc5d3d9470ff935002868f3451709f6476a4ba776bb655a9ba2e07996e24d364736f6c634300080d0033

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  ]
[ 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.