ETH Price: $3,337.89 (-0.05%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Platform ...168913432023-03-23 16:12:47675 days ago1679587967IN
0x31E1cC72...691173F5f
0 ETH0.0019016936.81965992
Update Platform ...168697032023-03-20 15:13:11678 days ago1679325191IN
0x31E1cC72...691173F5f
0 ETH0.0012408123.95253246
Update Platform ...167281652023-02-28 17:33:11698 days ago1677605591IN
0x31E1cC72...691173F5f
0 ETH0.0018618634.38481651
Update Platform ...166839232023-02-22 12:15:59704 days ago1677068159IN
0x31E1cC72...691173F5f
0 ETH0.0010120429.17324311
Update Platform ...166778272023-02-21 15:39:35705 days ago1676993975IN
0x31E1cC72...691173F5f
0 ETH0.0020829140.20842934
Update Platform ...166768372023-02-21 12:20:47705 days ago1676982047IN
0x31E1cC72...691173F5f
0 ETH0.0013453725.97090796
Update Platform ...166217072023-02-13 18:45:23713 days ago1676313923IN
0x31E1cC72...691173F5f
0 ETH0.0025286434.11276414
Update Platform ...165926752023-02-09 17:26:11717 days ago1675963571IN
0x31E1cC72...691173F5f
0 ETH0.0019297437.20418083
Update Platform ...164132332023-01-15 15:56:11742 days ago1673798171IN
0x31E1cC72...691173F5f
0 ETH0.0018130824.45952935
Update Render Pr...164132292023-01-15 15:55:23742 days ago1673798123IN
0x31E1cC72...691173F5f
0 ETH0.0007785224.11637879
Update Render Pr...164132222023-01-15 15:53:59742 days ago1673798039IN
0x31E1cC72...691173F5f
0 ETH0.0016667422.4950223
Clear Render Pro...164131752023-01-15 15:44:23742 days ago1673797463IN
0x31E1cC72...691173F5f
0 ETH0.000814923.90042672
Clear Platform B...164131622023-01-15 15:41:47742 days ago1673797307IN
0x31E1cC72...691173F5f
0 ETH0.0008128123.84798441
Update Platform ...164130492023-01-15 15:19:11742 days ago1673795951IN
0x31E1cC72...691173F5f
0 ETH0.0022440643.26413428
Update Render Pr...163993652023-01-13 17:28:35744 days ago1673630915IN
0x31E1cC72...691173F5f
0 ETH0.0020541737.95036652
Update Platform ...163993552023-01-13 17:26:35744 days ago1673630795IN
0x31E1cC72...691173F5f
0 ETH0.0021388939.50099711
Update Platform ...163285052023-01-03 19:59:59753 days ago1672775999IN
0x31E1cC72...691173F5f
0 ETH0.0011758822.7668887
Update Platform ...162232872022-12-20 3:42:11768 days ago1671507731IN
0x31E1cC72...691173F5f
0 ETH0.0006711212.99388408
Clear Platform B...161267612022-12-06 15:50:47782 days ago1670341847IN
0x31E1cC72...691173F5f
0 ETH0.0006172518.1455455
Clear Platform B...161267492022-12-06 15:48:23782 days ago1670341703IN
0x31E1cC72...691173F5f
0 ETH0.0007025522.16667483
Update Platform ...161267372022-12-06 15:45:59782 days ago1670341559IN
0x31E1cC72...691173F5f
0 ETH0.0017348323.42093053
Update Render Pr...161267182022-12-06 15:42:11782 days ago1670341331IN
0x31E1cC72...691173F5f
0 ETH0.0011577721.39436958
Update Platform ...161265592022-12-06 15:10:23782 days ago1670339423IN
0x31E1cC72...691173F5f
0 ETH0.0010158219.61402048
Update Platform ...159349882022-11-09 20:56:23808 days ago1668027383IN
0x31E1cC72...691173F5f
0 ETH0.0040582974.8569119
Update Render Pr...159349842022-11-09 20:55:35808 days ago1668027335IN
0x31E1cC72...691173F5f
0 ETH0.0041706976.9586129
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:
GenArt721RoyaltyOverride_PBAB

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 5 : GenArt721RoyaltyOverride_PBAB.sol
// SPDX-License-Identifier: LGPL-3.0-only
// Created By: Art Blocks Inc.

import "../interfaces/0.8.x/IArtblocksRoyaltyOverride.sol";
import "../interfaces/0.8.x/IGenArt721CoreV2_PBAB.sol";

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

pragma solidity 0.8.9;

/**
 * @title Royalty Registry override for Art Blocks PBAB token contracts.
 * @author Art Blocks Inc.
 */
contract GenArt721RoyaltyOverride_PBAB is ERC165, IArtblocksRoyaltyOverride {
    /**
     * @notice Platform royalty payment address for `contractAddress`
     * updated to be `platformRoyaltyAddress`.
     */
    event PlatformRoyaltyAddressForContractUpdated(
        address indexed contractAddress,
        address payable indexed platformRoyaltyAddress
    );

    /**
     * @notice Render provider royalty payment basis points for `tokenAddress`
     * updated to be `bps` if `useOverride`, else updated to use default BPS.
     */
    event RenderProviderBpsForContractUpdated(
        address indexed tokenAddress,
        bool indexed useOverride,
        uint256 bps
    );

    /**
     * @notice Platform royalty payment basis points for
     * `tokenAddress` updated to be `bps` if `useOverride`, else
     * updated to use default BPS.
     */
    event PlatformBpsForContractUpdated(
        address indexed tokenAddress,
        bool indexed useOverride,
        uint256 bps
    );

    /// token contract => Platform royalty payment address
    mapping(address => address payable)
        public tokenAddressToPlatformRoyaltyAddress;

    struct BpsOverride {
        bool useOverride;
        uint256 bps;
    }

    /// Default Render Provider royalty basis points if no BPS override is set.
    uint256 public constant RENDER_PROVIDER_DEFAULT_BPS = 250; // 2.5 percent
    /// Default Platform royalty basis points if no BPS override is set.
    uint256 public constant PLATFORM_DEFAULT_BPS = 250; // 2.5 percent
    /// token contract => if render provider bps override is set, and bps value.
    mapping(address => BpsOverride)
        public tokenAddressToRenderProviderBpsOverride;
    /// token contract => if Platform bps override is set, and bps value.
    mapping(address => BpsOverride) public tokenAddressToPlatformBpsOverride;

    modifier onlyAdminOnContract(address _tokenContract) {
        require(
            IGenArt721CoreV2_PBAB(_tokenContract).admin() == msg.sender,
            "Only core admin for specified token contract"
        );
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            // register interface 0x9ca7dc7a - getRoyalties(address,uint256)
            interfaceId == type(IArtblocksRoyaltyOverride).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @notice Updates platform royalty payment address for `_tokenContract`
     * to be `_platformRoyaltyAddress`.
     * @param _tokenContract Token contract to be updated.
     * @param _platformRoyaltyAddress Address to receive royalty payments.
     */
    function updatePlatformRoyaltyAddressForContract(
        address _tokenContract,
        address payable _platformRoyaltyAddress
    ) external onlyAdminOnContract(_tokenContract) {
        tokenAddressToPlatformRoyaltyAddress[
            _tokenContract
        ] = _platformRoyaltyAddress;
        emit PlatformRoyaltyAddressForContractUpdated(
            _tokenContract,
            _platformRoyaltyAddress
        );
    }

    /**
     * @notice Updates render provider royalty payment BPS for `_tokenContract`
     * to be `_bps`.
     * @param _tokenContract Token contract to be updated.
     * @param _bps Render provider royalty payment basis points.
     */
    function updateRenderProviderBpsForContract(
        address _tokenContract,
        uint256 _bps
    ) external onlyAdminOnContract(_tokenContract) {
        require(_bps <= 10000, "invalid bps");
        tokenAddressToRenderProviderBpsOverride[_tokenContract] = BpsOverride(
            true,
            _bps
        );
        emit RenderProviderBpsForContractUpdated(_tokenContract, true, _bps);
    }

    /**
     * @notice Updates platform royalty payment BPS for `_tokenContract` to be
     * `_bps`.
     * @param _tokenContract Token contract to be updated.
     * @param _bps Platform royalty payment basis points.
     */
    function updatePlatformBpsForContract(address _tokenContract, uint256 _bps)
        external
        onlyAdminOnContract(_tokenContract)
    {
        require(_bps <= 10000, "invalid bps");
        tokenAddressToPlatformBpsOverride[_tokenContract] = BpsOverride(
            true,
            _bps
        );
        emit PlatformBpsForContractUpdated(_tokenContract, true, _bps);
    }

    /**
     * @notice Clears any overrides of render provider royalty payment BPS
     * for `_tokenContract`.
     * @param _tokenContract Token contract to be cleared.
     * @dev token contracts without overrides use default BPS value.
     */
    function clearRenderProviderBpsForContract(address _tokenContract)
        external
        onlyAdminOnContract(_tokenContract)
    {
        tokenAddressToRenderProviderBpsOverride[_tokenContract] = BpsOverride(
            false,
            0
        ); // initial values
        emit RenderProviderBpsForContractUpdated(_tokenContract, false, 0);
    }

    /**
     * @notice Clears any overrides of platform provider royalty payment BPS
     * for `_tokenContract`.
     * @param _tokenContract Token contract to be cleared.
     * @dev token contracts without overrides use default BPS value.
     */
    function clearPlatformBpsForContract(address _tokenContract)
        external
        onlyAdminOnContract(_tokenContract)
    {
        tokenAddressToPlatformBpsOverride[_tokenContract] = BpsOverride(
            false,
            0
        ); // initial values
        emit PlatformBpsForContractUpdated(_tokenContract, false, 0);
    }

    /**
     * @notice Gets royalites of token ID `_tokenId` on token contract
     * `_tokenAddress`.
     * @param _tokenAddress Token contract to be queried.
     * @param _tokenId Token ID to be queried.
     * @return recipients_ array of royalty recipients
     * @return bps array of basis points for each recipient, aligned by index
     */
    function getRoyalties(address _tokenAddress, uint256 _tokenId)
        external
        view
        returns (address payable[] memory recipients_, uint256[] memory bps)
    {
        recipients_ = new address payable[](4);
        bps = new uint256[](4);
        // get standard royalty data for artist and additional payee
        (
            address artistAddress,
            address additionalPayee,
            uint256 additionalPayeePercentage,
            uint256 royaltyFeeByID
        ) = IGenArt721CoreV2_PBAB(_tokenAddress).getRoyaltyData(_tokenId);
        // translate to desired output
        recipients_[0] = payable(artistAddress);
        bps[0] = (uint256(100) - additionalPayeePercentage) * royaltyFeeByID;
        recipients_[1] = payable(additionalPayee);
        bps[1] = additionalPayeePercentage * royaltyFeeByID;
        // append platform provider royalty
        require(
            tokenAddressToPlatformRoyaltyAddress[_tokenAddress] != address(0),
            "Platform royalty address must be defined for contract"
        );
        recipients_[2] = tokenAddressToPlatformRoyaltyAddress[_tokenAddress];
        bps[2] = tokenAddressToPlatformBpsOverride[_tokenAddress].useOverride
            ? tokenAddressToPlatformBpsOverride[_tokenAddress].bps
            : PLATFORM_DEFAULT_BPS;
        // append render provider royalty
        recipients_[3] = payable(
            IGenArt721CoreV2_PBAB(_tokenAddress).renderProviderAddress()
        );
        bps[3] = tokenAddressToRenderProviderBpsOverride[_tokenAddress]
            .useOverride
            ? tokenAddressToRenderProviderBpsOverride[_tokenAddress].bps
            : RENDER_PROVIDER_DEFAULT_BPS;
        return (recipients_, bps);
    }
}

File 2 of 5 : IArtblocksRoyaltyOverride.sol
// SPDX-License-Identifier: LGPL-3.0-only
// Created By: Art Blocks Inc.

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

pragma solidity ^0.8.0;

/**
 * @notice Interface for Art Blocks Royalty override.
 * Supported by the Royalty Registry v1 Engine.
 * @dev  ref: https://royaltyregistry.xyz / engine-v1.royaltyregistry.eth
 */
interface IArtblocksRoyaltyOverride is IERC165 {
    /**
     * @notice Gets royalites of token ID `_tokenId` on token contract
     * `_tokenAddress`.
     * @param tokenAddress Token contract to be queried.
     * @param tokenId Token ID to be queried.
     * @return recipients_ array of royalty recipients
     * @return bps array of basis points for each recipient, aligned by index
     * @dev Interface ID:
     *
     * bytes4(keccak256('getRoyalties(address,uint256)')) == 0x9ca7dc7a
     *
     * => 0x9ca7dc7a = 0x9ca7dc7a
     */
    function getRoyalties(address tokenAddress, uint256 tokenId)
        external
        view
        returns (address payable[] memory recipients_, uint256[] memory bps);
}

File 3 of 5 : IGenArt721CoreV2_PBAB.sol
// SPDX-License-Identifier: LGPL-3.0-only
// Created By: Art Blocks Inc.

pragma solidity ^0.8.0;

interface IGenArt721CoreV2_PBAB {
    /**
     * @notice Token ID `_tokenId` minted on project ID `_projectId` to `_to`.
     */
    event Mint(
        address indexed _to,
        uint256 indexed _tokenId,
        uint256 indexed _projectId
    );

    // getter function of public variable
    function admin() external view returns (address);

    // getter function of public variable
    function nextProjectId() external view returns (uint256);

    // getter function of public mapping
    function tokenIdToProjectId(uint256 tokenId)
        external
        view
        returns (uint256 projectId);

    function isWhitelisted(address sender) external view returns (bool);

    function projectIdToCurrencySymbol(uint256 _projectId)
        external
        view
        returns (string memory);

    function projectIdToCurrencyAddress(uint256 _projectId)
        external
        view
        returns (address);

    function projectIdToArtistAddress(uint256 _projectId)
        external
        view
        returns (address payable);

    function projectIdToPricePerTokenInWei(uint256 _projectId)
        external
        view
        returns (uint256);

    function projectIdToAdditionalPayee(uint256 _projectId)
        external
        view
        returns (address payable);

    function projectIdToAdditionalPayeePercentage(uint256 _projectId)
        external
        view
        returns (uint256);

    function projectTokenInfo(uint256 _projectId)
        external
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            bool,
            address,
            uint256,
            string memory,
            address
        );

    function renderProviderAddress() external view returns (address payable);

    function renderProviderPercentage() external view returns (uint256);

    function mint(
        address _to,
        uint256 _projectId,
        address _by
    ) external returns (uint256 tokenId);

    function getRoyaltyData(uint256 _tokenId)
        external
        view
        returns (
            address artistAddress,
            address additionalPayee,
            uint256 additionalPayeePercentage,
            uint256 royaltyFeeByID
        );
}

File 4 of 5 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.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;
    }
}

File 5 of 5 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @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);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"useOverride","type":"bool"},{"indexed":false,"internalType":"uint256","name":"bps","type":"uint256"}],"name":"PlatformBpsForContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address payable","name":"platformRoyaltyAddress","type":"address"}],"name":"PlatformRoyaltyAddressForContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"useOverride","type":"bool"},{"indexed":false,"internalType":"uint256","name":"bps","type":"uint256"}],"name":"RenderProviderBpsForContractUpdated","type":"event"},{"inputs":[],"name":"PLATFORM_DEFAULT_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RENDER_PROVIDER_DEFAULT_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"clearPlatformBpsForContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"clearRenderProviderBpsForContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getRoyalties","outputs":[{"internalType":"address payable[]","name":"recipients_","type":"address[]"},{"internalType":"uint256[]","name":"bps","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenAddressToPlatformBpsOverride","outputs":[{"internalType":"bool","name":"useOverride","type":"bool"},{"internalType":"uint256","name":"bps","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenAddressToPlatformRoyaltyAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenAddressToRenderProviderBpsOverride","outputs":[{"internalType":"bool","name":"useOverride","type":"bool"},{"internalType":"uint256","name":"bps","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_bps","type":"uint256"}],"name":"updatePlatformBpsForContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address payable","name":"_platformRoyaltyAddress","type":"address"}],"name":"updatePlatformRoyaltyAddressForContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_bps","type":"uint256"}],"name":"updateRenderProviderBpsForContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610e85806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80639ca7dc7a116100715780639ca7dc7a146101905780639e0d31c2146101b1578063cf9a973c146101c4578063d020306d146100e1578063e6e97118146101d7578063e99f58da146101ea57600080fd5b806301ffc9a7146100b95780631ba1e650146100e15780631d1e569c146100f75780633dfba7ab1461010c5780634d196fab1461011f57806397df364414610163575b600080fd5b6100cc6100c7366004610bc8565b61022b565b60405190151581526020015b60405180910390f35b6100e960fa81565b6040519081526020016100d8565b61010a610105366004610c11565b610262565b005b61010a61011a366004610c2e565b610387565b61014c61012d366004610c11565b6002602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016100d8565b61014c610171366004610c11565b6001602081905260009182526040909120805491015460ff9091169082565b6101a361019e366004610c2e565b6104c5565b6040516100d8929190610c5a565b61010a6101bf366004610cde565b610884565b61010a6101d2366004610c11565b61097e565b61010a6101e5366004610c2e565b610a92565b6102136101f8366004610c11565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b60006001600160e01b03198216634e53ee3d60e11b148061025c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b80336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a657600080fd5b505afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de9190610d17565b6001600160a01b03161461030d5760405162461bcd60e51b815260040161030490610d34565b60405180910390fd5b604080518082018252600080825260208083018281526001600160a01b038716808452600283528584209451855460ff19169015151785559051600190940193909355925181815290927f236d38a8cdac19567ba384c1ea9833c930d1472ea05aa08c93d95e2224f7559391015b60405180910390a35050565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cb57600080fd5b505afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104039190610d17565b6001600160a01b0316146104295760405162461bcd60e51b815260040161030490610d34565b61271082111561044b5760405162461bcd60e51b815260040161030490610d80565b604080518082018252600180825260208083018681526001600160a01b03881660008181528484528690209451855460ff1916901515178555905193830193909355925185815290927f45a926fd99cb5c25b970de6015f5a179dbe5402af5f392232db13f2d40086b8491015b60405180910390a3505050565b60408051600480825260a0820190925260609182919060208201608080368337505060408051600480825260a08201909252929450905060208201608080368337019050509050600080600080876001600160a01b031663a65ff74c886040518263ffffffff1660e01b815260040161054091815260200190565b60806040518083038186803b15801561055857600080fd5b505afa15801561056c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190610da5565b935093509350935083866000815181106105ac576105ac610ded565b6001600160a01b0390921660209283029190910190910152806105d0836064610e19565b6105da9190610e30565b856000815181106105ed576105ed610ded565b602002602001018181525050828660018151811061060d5761060d610ded565b6001600160a01b039092166020928302919091019091015261062f8183610e30565b8560018151811061064257610642610ded565b6020908102919091018101919091526001600160a01b03898116600090815291829052604090912054166106d65760405162461bcd60e51b815260206004820152603560248201527f506c6174666f726d20726f79616c74792061646472657373206d757374206265604482015274081919599a5b995908199bdc8818dbdb9d1c9858dd605a1b6064820152608401610304565b6001600160a01b0380891660009081526020819052604090205487519116908790600290811061070857610708610ded565b6001600160a01b0392831660209182029290920181019190915290891660009081526002909152604090205460ff166107425760fa61075f565b6001600160a01b0388166000908152600260205260409020600101545b8560028151811061077257610772610ded565b602002602001018181525050876001600160a01b031663cfbf4d976040518163ffffffff1660e01b815260040160206040518083038186803b1580156107b757600080fd5b505afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610d17565b8660038151811061080257610802610ded565b6001600160a01b0392831660209182029290920181019190915290891660009081526001909152604090205460ff1661083c5760fa61085a565b6001600160a01b038816600090815260016020819052604090912001545b8560038151811061086d5761086d610ded565b602002602001018181525050505050509250929050565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190610d17565b6001600160a01b0316146109265760405162461bcd60e51b815260040161030490610d34565b6001600160a01b0383811660008181526020819052604080822080546001600160a01b0319169487169485179055517f585dff5ad62b9dc71ff704d3475179461e1846ee542f2e6f940fb3b1f41b24e99190a3505050565b80336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c257600080fd5b505afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190610d17565b6001600160a01b031614610a205760405162461bcd60e51b815260040161030490610d34565b604080518082018252600080825260208083018281526001600160a01b03871680845260018084528685209551865460ff191690151517865591519490910193909355925181815290927f45a926fd99cb5c25b970de6015f5a179dbe5402af5f392232db13f2d40086b84910161037b565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190610d17565b6001600160a01b031614610b345760405162461bcd60e51b815260040161030490610d34565b612710821115610b565760405162461bcd60e51b815260040161030490610d80565b604080518082018252600180825260208083018681526001600160a01b0388166000818152600284528690209451855460ff1916901515178555905193830193909355925185815290927f236d38a8cdac19567ba384c1ea9833c930d1472ea05aa08c93d95e2224f7559391016104b8565b600060208284031215610bda57600080fd5b81356001600160e01b031981168114610bf257600080fd5b9392505050565b6001600160a01b0381168114610c0e57600080fd5b50565b600060208284031215610c2357600080fd5b8135610bf281610bf9565b60008060408385031215610c4157600080fd5b8235610c4c81610bf9565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015610c9c5781516001600160a01b031684529284019290840190600101610c77565b5050508381038285015284518082528583019183019060005b81811015610cd157835183529284019291840191600101610cb5565b5090979650505050505050565b60008060408385031215610cf157600080fd5b8235610cfc81610bf9565b91506020830135610d0c81610bf9565b809150509250929050565b600060208284031215610d2957600080fd5b8151610bf281610bf9565b6020808252602c908201527f4f6e6c7920636f72652061646d696e20666f722073706563696669656420746f60408201526b1ad95b8818dbdb9d1c9858dd60a21b606082015260800190565b6020808252600b908201526a696e76616c69642062707360a81b604082015260600190565b60008060008060808587031215610dbb57600080fd5b8451610dc681610bf9565b6020860151909450610dd781610bf9565b6040860151606090960151949790965092505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610e2b57610e2b610e03565b500390565b6000816000190483118215151615610e4a57610e4a610e03565b50029056fea2646970667358221220fc63a1246ae1627501b3460f661c4b978ed66a8fa6d0ad5453ac9270dcd87ae164736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80639ca7dc7a116100715780639ca7dc7a146101905780639e0d31c2146101b1578063cf9a973c146101c4578063d020306d146100e1578063e6e97118146101d7578063e99f58da146101ea57600080fd5b806301ffc9a7146100b95780631ba1e650146100e15780631d1e569c146100f75780633dfba7ab1461010c5780634d196fab1461011f57806397df364414610163575b600080fd5b6100cc6100c7366004610bc8565b61022b565b60405190151581526020015b60405180910390f35b6100e960fa81565b6040519081526020016100d8565b61010a610105366004610c11565b610262565b005b61010a61011a366004610c2e565b610387565b61014c61012d366004610c11565b6002602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016100d8565b61014c610171366004610c11565b6001602081905260009182526040909120805491015460ff9091169082565b6101a361019e366004610c2e565b6104c5565b6040516100d8929190610c5a565b61010a6101bf366004610cde565b610884565b61010a6101d2366004610c11565b61097e565b61010a6101e5366004610c2e565b610a92565b6102136101f8366004610c11565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b60006001600160e01b03198216634e53ee3d60e11b148061025c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b80336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156102a657600080fd5b505afa1580156102ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102de9190610d17565b6001600160a01b03161461030d5760405162461bcd60e51b815260040161030490610d34565b60405180910390fd5b604080518082018252600080825260208083018281526001600160a01b038716808452600283528584209451855460ff19169015151785559051600190940193909355925181815290927f236d38a8cdac19567ba384c1ea9833c930d1472ea05aa08c93d95e2224f7559391015b60405180910390a35050565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cb57600080fd5b505afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104039190610d17565b6001600160a01b0316146104295760405162461bcd60e51b815260040161030490610d34565b61271082111561044b5760405162461bcd60e51b815260040161030490610d80565b604080518082018252600180825260208083018681526001600160a01b03881660008181528484528690209451855460ff1916901515178555905193830193909355925185815290927f45a926fd99cb5c25b970de6015f5a179dbe5402af5f392232db13f2d40086b8491015b60405180910390a3505050565b60408051600480825260a0820190925260609182919060208201608080368337505060408051600480825260a08201909252929450905060208201608080368337019050509050600080600080876001600160a01b031663a65ff74c886040518263ffffffff1660e01b815260040161054091815260200190565b60806040518083038186803b15801561055857600080fd5b505afa15801561056c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190610da5565b935093509350935083866000815181106105ac576105ac610ded565b6001600160a01b0390921660209283029190910190910152806105d0836064610e19565b6105da9190610e30565b856000815181106105ed576105ed610ded565b602002602001018181525050828660018151811061060d5761060d610ded565b6001600160a01b039092166020928302919091019091015261062f8183610e30565b8560018151811061064257610642610ded565b6020908102919091018101919091526001600160a01b03898116600090815291829052604090912054166106d65760405162461bcd60e51b815260206004820152603560248201527f506c6174666f726d20726f79616c74792061646472657373206d757374206265604482015274081919599a5b995908199bdc8818dbdb9d1c9858dd605a1b6064820152608401610304565b6001600160a01b0380891660009081526020819052604090205487519116908790600290811061070857610708610ded565b6001600160a01b0392831660209182029290920181019190915290891660009081526002909152604090205460ff166107425760fa61075f565b6001600160a01b0388166000908152600260205260409020600101545b8560028151811061077257610772610ded565b602002602001018181525050876001600160a01b031663cfbf4d976040518163ffffffff1660e01b815260040160206040518083038186803b1580156107b757600080fd5b505afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190610d17565b8660038151811061080257610802610ded565b6001600160a01b0392831660209182029290920181019190915290891660009081526001909152604090205460ff1661083c5760fa61085a565b6001600160a01b038816600090815260016020819052604090912001545b8560038151811061086d5761086d610ded565b602002602001018181525050505050509250929050565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190610d17565b6001600160a01b0316146109265760405162461bcd60e51b815260040161030490610d34565b6001600160a01b0383811660008181526020819052604080822080546001600160a01b0319169487169485179055517f585dff5ad62b9dc71ff704d3475179461e1846ee542f2e6f940fb3b1f41b24e99190a3505050565b80336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c257600080fd5b505afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190610d17565b6001600160a01b031614610a205760405162461bcd60e51b815260040161030490610d34565b604080518082018252600080825260208083018281526001600160a01b03871680845260018084528685209551865460ff191690151517865591519490910193909355925181815290927f45a926fd99cb5c25b970de6015f5a179dbe5402af5f392232db13f2d40086b84910161037b565b81336001600160a01b0316816001600160a01b031663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e9190610d17565b6001600160a01b031614610b345760405162461bcd60e51b815260040161030490610d34565b612710821115610b565760405162461bcd60e51b815260040161030490610d80565b604080518082018252600180825260208083018681526001600160a01b0388166000818152600284528690209451855460ff1916901515178555905193830193909355925185815290927f236d38a8cdac19567ba384c1ea9833c930d1472ea05aa08c93d95e2224f7559391016104b8565b600060208284031215610bda57600080fd5b81356001600160e01b031981168114610bf257600080fd5b9392505050565b6001600160a01b0381168114610c0e57600080fd5b50565b600060208284031215610c2357600080fd5b8135610bf281610bf9565b60008060408385031215610c4157600080fd5b8235610c4c81610bf9565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015610c9c5781516001600160a01b031684529284019290840190600101610c77565b5050508381038285015284518082528583019183019060005b81811015610cd157835183529284019291840191600101610cb5565b5090979650505050505050565b60008060408385031215610cf157600080fd5b8235610cfc81610bf9565b91506020830135610d0c81610bf9565b809150509250929050565b600060208284031215610d2957600080fd5b8151610bf281610bf9565b6020808252602c908201527f4f6e6c7920636f72652061646d696e20666f722073706563696669656420746f60408201526b1ad95b8818dbdb9d1c9858dd60a21b606082015260800190565b6020808252600b908201526a696e76616c69642062707360a81b604082015260600190565b60008060008060808587031215610dbb57600080fd5b8451610dc681610bf9565b6020860151909450610dd781610bf9565b6040860151606090960151949790965092505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610e2b57610e2b610e03565b500390565b6000816000190483118215151615610e4a57610e4a610e03565b50029056fea2646970667358221220fc63a1246ae1627501b3460f661c4b978ed66a8fa6d0ad5453ac9270dcd87ae164736f6c63430008090033

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.