ETH Price: $1,895.01 (-0.93%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NounsVisionBatchTransfer

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-10-19
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

interface ERC721Like {
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function setApprovalForAll(address operator, bool approved) external;
}

contract NounsVisionBatchTransfer {
    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      CONSTANTS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    ERC721Like public constant NOUNS_VISION =
        ERC721Like(0xd8e6b954f7d3F42570D3B0adB516f2868729eC4D);

    address public constant NOUNS_DAO =
        0x0BC3807Ec262cB779b38D65b38158acC3bfedE10;

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      STORAGE VARIABLES
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    // Number of allowed Nouns Vision Glasses receiver address can transfer
    mapping(address => uint256) public allowanceFor;

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      ERRORS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    error NotNounsDAO();
    error NotEnoughOwned();
    error NotEnoughAllowance();

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      MODIFIERS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    modifier onlyNounsDAO() {
        if (msg.sender != NOUNS_DAO) revert NotNounsDAO();
        _;
    }

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      VIEW FUNCTIONS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    /// @notice Calculate the first Nouns Vision Glasses token ID owned by Nouns DAO
    /// @dev Will revert NotEnoughOwned() if Nouns DAO has no balance
    /// @return startId The first token ID owned by Nouns DAO
    function getStartId() public view returns (uint256 startId) {
        if (NOUNS_VISION.balanceOf(NOUNS_DAO) == 0) {
            revert NotEnoughOwned();
        }

        // Nouns DAO was sent 500 Nouns Vision Glasses starting at token ID 751
        for (startId = 751; startId <= 1250; startId++) {
            try NOUNS_VISION.ownerOf(startId) returns (address owner) {
                if (owner != NOUNS_DAO) continue;
                break;
            } catch {}
        }
    }

    /// @notice Calculate the first Nouns Vision Glasses token ID owned by Nouns DAO and the maximum batch amount possible from this ID for a receiver
    /// @dev Will revert:
    /// - NotEnoughOwned() if Nouns DAO has no balance
    /// - NotEnoughAllowance() if receiver has no allowance
    /// @param receiver Address to calculate maximum batch amount
    /// @return startId The first token ID owned by Nouns DAO
    /// @return amount The maximum batch amount from the startId for this receiver
    function getStartIdAndBatchAmount(address receiver)
        public
        view
        returns (uint256 startId, uint256 amount)
    {
        if (allowanceFor[receiver] == 0) {
            revert NotEnoughAllowance();
        }

        startId = getStartId();

        uint256 maxAmount = _min(
            allowanceFor[receiver],
            NOUNS_VISION.balanceOf(NOUNS_DAO)
        );

        // If we get this far, Nouns DAO owns at least 1 Nouns Vision Glasses
        for (amount = 1; amount < maxAmount; amount++) {
            try NOUNS_VISION.ownerOf(startId + amount) returns (address owner) {
                if (owner != NOUNS_DAO) break;
            } catch {
                break;
            }
        }
    }

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      OWNER FUNCTIONS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    /// @notice Add an allowance for receiver address to batch send an amount of Nouns Vision Glasses
    /// @param receiver Address to allow
    /// @param amount Batch amount allowed
    function addAllowance(address receiver, uint256 amount)
        external
        onlyNounsDAO
    {
        allowanceFor[receiver] += amount;
    }

    /// @notice Removes all allowance for the receiver address
    /// @param receiver Address to disallow
    function disallow(address receiver) external onlyNounsDAO {
        delete allowanceFor[receiver];
    }

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      receiver FUNCTIONS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    /// @notice Send `msg.sender` a batch `amount` of Nouns Vision Glasses from `startId.` Use `getStartIdAndBatchAmount(address)` to determine these values
    /// @dev See `_subtractFromAllowanceOrRevert(uint256)` for revert cases
    /// @param startId The starting ID of the batch token transfer
    /// @param amount The batch amount of Glasses to be transfered
    function claimGlasses(uint256 startId, uint256 amount) public {
        _subtractFromAllowanceOrRevert(amount);

        for (uint256 i; i < amount; i++) {
            NOUNS_VISION.transferFrom(NOUNS_DAO, msg.sender, startId + i);
        }
    }

    /// @notice Sends a `recipient` Nouns Vision Glasses. Use `getStartId()` to determine the `startId`
    /// @dev See `_subtractFromAllowanceOrRevert(uint256)` for revert cases
    /// @param startId The starting ID of the token transfer
    /// @param recipient Address to receive Nouns Vision Glasses
    function sendGlasses(uint256 startId, address recipient) public {
        _subtractFromAllowanceOrRevert(1);

        NOUNS_VISION.transferFrom(NOUNS_DAO, recipient, startId);
    }

    /// @notice Sends a group of `recipients` Nouns Vision Glasses. Use `getStartId()` to determine the `startId`
    /// @dev See `_subtractFromAllowanceOrRevert(uint256)` for revert cases
    /// @param startId The starting ID of the token transfer
    /// @param recipients Addresses to receive Nouns Vision Glasses
    function sendManyGlasses(uint256 startId, address[] calldata recipients)
        public
    {
        uint256 amount = recipients.length;
        _subtractFromAllowanceOrRevert(amount);

        for (uint256 i; i < amount; i++) {
            NOUNS_VISION.transferFrom(NOUNS_DAO, recipients[i], startId + i);
        }
    }

    /**
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
      INTERNAL FUNCTIONS
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    **/

    /// @notice Checks `msg.sender` allowance against an amount and either subtracts or reverts
    /// @dev Will revert:
    /// - NotEnoughAllowance(): `msg.sender` has not been granted enough allowance
    /// - NotEnoughOwned(): Nouns DAO balance is less than the amount
    /// @param amount Amount that should be removed from `msg.sender` allowance
    function _subtractFromAllowanceOrRevert(uint256 amount) internal {
        uint256 allowance = allowanceFor[msg.sender];

        if (amount > allowance) {
            revert NotEnoughAllowance();
        }

        if (amount > NOUNS_VISION.balanceOf(NOUNS_DAO)) {
            revert NotEnoughOwned();
        }

        allowanceFor[msg.sender] = allowance - amount;
    }

    /// @notice Returns the smaller of two numbers
    function _min(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a < b) return a;
        return b;
    }

    receive() external payable {
        revert();
    }

    fallback() external payable {
        revert();
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"NotEnoughAllowance","type":"error"},{"inputs":[],"name":"NotEnoughOwned","type":"error"},{"inputs":[],"name":"NotNounsDAO","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"NOUNS_DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOUNS_VISION","outputs":[{"internalType":"contract ERC721Like","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowanceFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimGlasses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"disallow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStartId","outputs":[{"internalType":"uint256","name":"startId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"getStartIdAndBatchAmount","outputs":[{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sendGlasses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"sendManyGlasses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50610e18806100206000396000f3fe6080604052600436106100b55760003560e01c8063a295203b11610069578063a9ed9cb81161004e578063a9ed9cb814610210578063f3c40c4b14610230578063f9e9dd441461025057600080fd5b8063a295203b146101d0578063a985014f146101f057600080fd5b8063453947ed1161009a578063453947ed1461014b57806375f33a781461016d57806398119562146101a857600080fd5b80633e4440fb146100c45780634156445f146100fe57600080fd5b366100bf57600080fd5b600080fd5b3480156100d057600080fd5b506100e46100df366004610bcf565b610265565b604080519283526020830191909152015b60405180910390f35b34801561010a57600080fd5b50610126730bc3807ec262cb779b38d65b38158acc3bfede1081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b34801561015757600080fd5b5061016b610166366004610bf3565b61049f565b005b34801561017957600080fd5b5061019a610188366004610bcf565b60006020819052908152604090205481565b6040519081526020016100f5565b3480156101b457600080fd5b5061012673d8e6b954f7d3f42570d3b0adb516f2868729ec4d81565b3480156101dc57600080fd5b5061016b6101eb366004610c15565b610591565b3480156101fc57600080fd5b5061016b61020b366004610c94565b6106ac565b34801561021c57600080fd5b5061016b61022b366004610bcf565b61076e565b34801561023c57600080fd5b5061016b61024b366004610cc4565b6107e2565b34801561025c57600080fd5b5061019a61086d565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054819081036102c5576040517f4fd3af0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102cd61086d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081905260408082205490517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015292945090916103a2919073d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190610cf0565b610a4f565b9050600191505b808210156104995773d8e6b954f7d3f42570d3b0adb516f2868729ec4d636352211e6103d58486610d38565b6040518263ffffffff1660e01b81526004016103f391815260200190565b602060405180830381865afa92505050801561044a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261044791810190610d4b565b60015b156104995773ffffffffffffffffffffffffffffffffffffffff8116730bc3807ec262cb779b38d65b38158acc3bfede10146104865750610499565b508161049181610d68565b9250506103a9565b50915091565b6104a881610a69565b60005b8181101561058c5773d8e6b954f7d3f42570d3b0adb516f2868729ec4d6323b872dd730bc3807ec262cb779b38d65b38158acc3bfede10336104ed8588610d38565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b50505050808061058490610d68565b9150506104ab565b505050565b8061059b81610a69565b60005b818110156106a55773d8e6b954f7d3f42570d3b0adb516f2868729ec4d6323b872dd730bc3807ec262cb779b38d65b38158acc3bfede108686858181106105e7576105e7610da0565b90506020020160208101906105fc9190610bcf565b610606858a610d38565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b50505050808061069d90610d68565b91505061059e565b5050505050565b6106b66001610a69565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015273ffffffffffffffffffffffffffffffffffffffff821660248201526044810183905273d8e6b954f7d3f42570d3b0adb516f2868729ec4d906323b872dd90606401600060405180830381600087803b15801561075257600080fd5b505af1158015610766573d6000803e3d6000fd5b505050505050565b33730bc3807ec262cb779b38d65b38158acc3bfede10146107bb576040517f18c0c68800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040812055565b33730bc3807ec262cb779b38d65b38158acc3bfede101461082f576040517f18c0c68800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610864908490610d38565b90915550505050565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015260009073d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190610cf0565b600003610949576040517ff24b172900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506102ef5b6104e28111610a4c576040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810182905273d8e6b954f7d3f42570d3b0adb516f2868729ec4d90636352211e90602401602060405180830381865afa9250505080156109fa575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109f791810190610d4b565b60015b15610a3a5773ffffffffffffffffffffffffffffffffffffffff8116730bc3807ec262cb779b38d65b38158acc3bfede1014610a365750610a3a565b5090565b80610a4481610d68565b91505061094e565b90565b600081831015610a60575081610a63565b50805b92915050565b3360009081526020819052604090205480821115610ab3576040517f4fd3af0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015273d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190610cf0565b821115610b8c576040517ff24b172900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b968282610dcf565b336000908152602081905260409020555050565b73ffffffffffffffffffffffffffffffffffffffff81168114610bcc57600080fd5b50565b600060208284031215610be157600080fd5b8135610bec81610baa565b9392505050565b60008060408385031215610c0657600080fd5b50508035926020909101359150565b600080600060408486031215610c2a57600080fd5b83359250602084013567ffffffffffffffff80821115610c4957600080fd5b818601915086601f830112610c5d57600080fd5b813581811115610c6c57600080fd5b8760208260051b8501011115610c8157600080fd5b6020830194508093505050509250925092565b60008060408385031215610ca757600080fd5b823591506020830135610cb981610baa565b809150509250929050565b60008060408385031215610cd757600080fd5b8235610ce281610baa565b946020939093013593505050565b600060208284031215610d0257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a6357610a63610d09565b600060208284031215610d5d57600080fd5b8151610bec81610baa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d9957610d99610d09565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610a6357610a63610d0956fea2646970667358221220523623bf8846327371eb3b4107c667d0cc00df30d45338b2204551bdb1f27f9264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106100b55760003560e01c8063a295203b11610069578063a9ed9cb81161004e578063a9ed9cb814610210578063f3c40c4b14610230578063f9e9dd441461025057600080fd5b8063a295203b146101d0578063a985014f146101f057600080fd5b8063453947ed1161009a578063453947ed1461014b57806375f33a781461016d57806398119562146101a857600080fd5b80633e4440fb146100c45780634156445f146100fe57600080fd5b366100bf57600080fd5b600080fd5b3480156100d057600080fd5b506100e46100df366004610bcf565b610265565b604080519283526020830191909152015b60405180910390f35b34801561010a57600080fd5b50610126730bc3807ec262cb779b38d65b38158acc3bfede1081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b34801561015757600080fd5b5061016b610166366004610bf3565b61049f565b005b34801561017957600080fd5b5061019a610188366004610bcf565b60006020819052908152604090205481565b6040519081526020016100f5565b3480156101b457600080fd5b5061012673d8e6b954f7d3f42570d3b0adb516f2868729ec4d81565b3480156101dc57600080fd5b5061016b6101eb366004610c15565b610591565b3480156101fc57600080fd5b5061016b61020b366004610c94565b6106ac565b34801561021c57600080fd5b5061016b61022b366004610bcf565b61076e565b34801561023c57600080fd5b5061016b61024b366004610cc4565b6107e2565b34801561025c57600080fd5b5061019a61086d565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054819081036102c5576040517f4fd3af0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102cd61086d565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081905260408082205490517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015292945090916103a2919073d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190610cf0565b610a4f565b9050600191505b808210156104995773d8e6b954f7d3f42570d3b0adb516f2868729ec4d636352211e6103d58486610d38565b6040518263ffffffff1660e01b81526004016103f391815260200190565b602060405180830381865afa92505050801561044a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261044791810190610d4b565b60015b156104995773ffffffffffffffffffffffffffffffffffffffff8116730bc3807ec262cb779b38d65b38158acc3bfede10146104865750610499565b508161049181610d68565b9250506103a9565b50915091565b6104a881610a69565b60005b8181101561058c5773d8e6b954f7d3f42570d3b0adb516f2868729ec4d6323b872dd730bc3807ec262cb779b38d65b38158acc3bfede10336104ed8588610d38565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b50505050808061058490610d68565b9150506104ab565b505050565b8061059b81610a69565b60005b818110156106a55773d8e6b954f7d3f42570d3b0adb516f2868729ec4d6323b872dd730bc3807ec262cb779b38d65b38158acc3bfede108686858181106105e7576105e7610da0565b90506020020160208101906105fc9190610bcf565b610606858a610d38565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b50505050808061069d90610d68565b91505061059e565b5050505050565b6106b66001610a69565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015273ffffffffffffffffffffffffffffffffffffffff821660248201526044810183905273d8e6b954f7d3f42570d3b0adb516f2868729ec4d906323b872dd90606401600060405180830381600087803b15801561075257600080fd5b505af1158015610766573d6000803e3d6000fd5b505050505050565b33730bc3807ec262cb779b38d65b38158acc3bfede10146107bb576040517f18c0c68800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040812055565b33730bc3807ec262cb779b38d65b38158acc3bfede101461082f576040517f18c0c68800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610864908490610d38565b90915550505050565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015260009073d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190610cf0565b600003610949576040517ff24b172900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506102ef5b6104e28111610a4c576040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810182905273d8e6b954f7d3f42570d3b0adb516f2868729ec4d90636352211e90602401602060405180830381865afa9250505080156109fa575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526109f791810190610d4b565b60015b15610a3a5773ffffffffffffffffffffffffffffffffffffffff8116730bc3807ec262cb779b38d65b38158acc3bfede1014610a365750610a3a565b5090565b80610a4481610d68565b91505061094e565b90565b600081831015610a60575081610a63565b50805b92915050565b3360009081526020819052604090205480821115610ab3576040517f4fd3af0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730bc3807ec262cb779b38d65b38158acc3bfede10600482015273d8e6b954f7d3f42570d3b0adb516f2868729ec4d906370a0823190602401602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190610cf0565b821115610b8c576040517ff24b172900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b968282610dcf565b336000908152602081905260409020555050565b73ffffffffffffffffffffffffffffffffffffffff81168114610bcc57600080fd5b50565b600060208284031215610be157600080fd5b8135610bec81610baa565b9392505050565b60008060408385031215610c0657600080fd5b50508035926020909101359150565b600080600060408486031215610c2a57600080fd5b83359250602084013567ffffffffffffffff80821115610c4957600080fd5b818601915086601f830112610c5d57600080fd5b813581811115610c6c57600080fd5b8760208260051b8501011115610c8157600080fd5b6020830194508093505050509250925092565b60008060408385031215610ca757600080fd5b823591506020830135610cb981610baa565b809150509250929050565b60008060408385031215610cd757600080fd5b8235610ce281610baa565b946020939093013593505050565b600060208284031215610d0257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a6357610a63610d09565b600060208284031215610d5d57600080fd5b8151610bec81610baa565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d9957610d99610d09565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610a6357610a63610d0956fea2646970667358221220523623bf8846327371eb3b4107c667d0cc00df30d45338b2204551bdb1f27f9264736f6c63430008110033

Deployed Bytecode Sourcemap

450:7828:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:8;;;450:7828;;;;;;;;;;;8259:8;;;450:7828;;;;;;;;;;;;;;;;;;;;;8259:8;;;450:7828;;;;;;;;;;;8259:8;;;450:7828;;;;8196:8;;;450:7828;8259:8;;;3396:753;;;;;;;;;;-1:-1:-1;3396:753:0;;;;;:::i;:::-;;:::i;:::-;;;;599:25:1;;;655:2;640:18;;633:34;;;;572:18;3396:753:0;;;;;;;;828:87;;;;;;;;;;;;873:42;828:87;;;;;854:42:1;842:55;;;824:74;;812:2;797:18;828:87:0;678:226:1;5561:252:0;;;;;;;;;;-1:-1:-1;5561:252:0;;;;;:::i;:::-;;:::i;:::-;;1232:47;;;;;;;;;;-1:-1:-1;1232:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1308:25:1;;;1296:2;1281:18;1232:47:0;1162:177:1;714:105:0;;;;;;;;;;;;776:42;714:105;;6647:332;;;;;;;;;;-1:-1:-1;6647:332:0;;;;;:::i;:::-;;:::i;6131:185::-;;;;;;;;;;-1:-1:-1;6131:185:0;;;;;:::i;:::-;;:::i;4844:106::-;;;;;;;;;;-1:-1:-1;4844:106:0;;;;;:::i;:::-;;:::i;4575:152::-;;;;;;;;;;-1:-1:-1;4575:152:0;;;;;:::i;:::-;;:::i;2381:497::-;;;;;;;;;;;;;:::i;3396:753::-;3549:22;;;3496:15;3549:22;;;;;;;;;;;3496:15;;3549:27;;3545:87;;3600:20;;;;;;;;;;;;;;3545:87;3654:12;:10;:12::i;:::-;3718:22;;;3679:17;3718:22;;;;;;;;;;;;3755:33;;;;;873:42;3755:33;;;824:74:1;3644:22:0;;-1:-1:-1;3679:17:0;;3699:100;;3718:22;776:42;;3755:22;;797:18:1;;3755:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3699:4;:100::i;:::-;3679:120;;3905:1;3896:10;;3891:251;3917:9;3908:6;:18;3891:251;;;776:42;3957:20;3978:16;3988:6;3978:7;:16;:::i;:::-;3957:38;;;;;;;;;;;;;1308:25:1;;1296:2;1281:18;;1162:177;3957:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;3957:38:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3953:178;4110:5;3953:178;4043:18;;;873:42;4043:18;4039:29;;4063:5;;;4039:29;3996:88;3928:8;;;;:::i;:::-;;;;3891:251;;;3534:615;3396:753;;;:::o;5561:252::-;5634:38;5665:6;5634:30;:38::i;:::-;5690:9;5685:121;5705:6;5701:1;:10;5685:121;;;776:42;5733:25;873:42;5770:10;5782:11;5792:1;5782:7;:11;:::i;:::-;5733:61;;;;;;;;;;4096:42:1;4165:15;;;5733:61:0;;;4147:34:1;4217:15;;;;4197:18;;;4190:43;4249:18;;;4242:34;4059:18;;5733:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5713:3;;;;;:::i;:::-;;;;5685:121;;;;5561:252;;:::o;6647:332::-;6769:10;6797:38;6769:10;6797:30;:38::i;:::-;6853:9;6848:124;6868:6;6864:1;:10;6848:124;;;776:42;6896:25;873:42;6933:10;;6944:1;6933:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6948:11;6958:1;6948:7;:11;:::i;:::-;6896:64;;;;;;;;;;4096:42:1;4165:15;;;6896:64:0;;;4147:34:1;4217:15;;;;4197:18;;;4190:43;4249:18;;;4242:34;4059:18;;6896:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6876:3;;;;;:::i;:::-;;;;6848:124;;;;6741:238;6647:332;;;:::o;6131:185::-;6206:33;6237:1;6206:30;:33::i;:::-;6252:56;;;;;873:42;6252:56;;;4147:34:1;4096:42;4217:15;;4197:18;;;4190:43;4249:18;;;4242:34;;;776:42:0;;6252:25;;4059:18:1;;6252:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6131:185;;:::o;4844:106::-;1860:10;873:42;1860:23;1856:49;;1892:13;;;;;;;;;;;;;;1856:49;4920:22:::1;;:12;:22:::0;;;::::1;::::0;;;;;;4913:29;4844:106::o;4575:152::-;1860:10;873:42;1860:23;1856:49;;1892:13;;;;;;;;;;;;;;1856:49;4687:22:::1;::::0;::::1;:12;:22:::0;;;::::1;::::0;;;;;;:32;;4713:6;;4687:12;:32:::1;::::0;4713:6;;4687:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;4575:152:0:o;2381:497::-;2456:33;;;;;873:42;2456:33;;;824:74:1;2424:15:0;;776:42;;2456:22;;797:18:1;;2456:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2493:1;2456:38;2452:94;;2518:16;;;;;;;;;;;;;;2452:94;-1:-1:-1;2654:3:0;2639:232;2670:4;2659:7;:15;2639:232;;2706:29;;;;;;;;1308:25:1;;;776:42:0;;2706:20;;1281:18:1;;2706:29:0;;;;;;;;;;;;;;;;;;-1:-1:-1;2706:29:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2702:158;;;2783:18;;;873:42;2783:18;2779:32;;2803:8;;;2779:32;2830:5;2381:497;:::o;2702:158::-;2676:9;;;;:::i;:::-;;;;2639:232;;;2381:497;:::o;8025:125::-;8084:7;8112:1;8108;:5;8104:19;;;-1:-1:-1;8122:1:0;8115:8;;8104:19;-1:-1:-1;8141:1:0;8025:125;;;;;:::o;7579:386::-;7688:10;7655:17;7675:24;;;;;;;;;;;7716:18;;;7712:78;;;7758:20;;;;;;;;;;;;;;7712:78;7815:33;;;;;873:42;7815:33;;;824:74:1;776:42:0;;7815:22;;797:18:1;;7815:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7806:6;:42;7802:98;;;7872:16;;;;;;;;;;;;;;7802:98;7939:18;7951:6;7939:9;:18;:::i;:::-;7925:10;7912:12;:24;;;;;;;;;;:45;-1:-1:-1;;7579:386:0:o;14:154:1:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:247::-;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;:::-;409:5;173:247;-1:-1:-1;;;173:247:1:o;909:248::-;977:6;985;1038:2;1026:9;1017:7;1013:23;1009:32;1006:52;;;1054:1;1051;1044:12;1006:52;-1:-1:-1;;1077:23:1;;;1147:2;1132:18;;;1119:32;;-1:-1:-1;909:248:1:o;1592:683::-;1687:6;1695;1703;1756:2;1744:9;1735:7;1731:23;1727:32;1724:52;;;1772:1;1769;1762:12;1724:52;1808:9;1795:23;1785:33;;1869:2;1858:9;1854:18;1841:32;1892:18;1933:2;1925:6;1922:14;1919:34;;;1949:1;1946;1939:12;1919:34;1987:6;1976:9;1972:22;1962:32;;2032:7;2025:4;2021:2;2017:13;2013:27;2003:55;;2054:1;2051;2044:12;2003:55;2094:2;2081:16;2120:2;2112:6;2109:14;2106:34;;;2136:1;2133;2126:12;2106:34;2189:7;2184:2;2174:6;2171:1;2167:14;2163:2;2159:23;2155:32;2152:45;2149:65;;;2210:1;2207;2200:12;2149:65;2241:2;2237;2233:11;2223:21;;2263:6;2253:16;;;;;1592:683;;;;;:::o;2280:315::-;2348:6;2356;2409:2;2397:9;2388:7;2384:23;2380:32;2377:52;;;2425:1;2422;2415:12;2377:52;2461:9;2448:23;2438:33;;2521:2;2510:9;2506:18;2493:32;2534:31;2559:5;2534:31;:::i;:::-;2584:5;2574:15;;;2280:315;;;;;:::o;2600:::-;2668:6;2676;2729:2;2717:9;2708:7;2704:23;2700:32;2697:52;;;2745:1;2742;2735:12;2697:52;2784:9;2771:23;2803:31;2828:5;2803:31;:::i;:::-;2853:5;2905:2;2890:18;;;;2877:32;;-1:-1:-1;;;2600:315:1:o;2920:184::-;2990:6;3043:2;3031:9;3022:7;3018:23;3014:32;3011:52;;;3059:1;3056;3049:12;3011:52;-1:-1:-1;3082:16:1;;2920:184;-1:-1:-1;2920:184:1:o;3109:::-;3161:77;3158:1;3151:88;3258:4;3255:1;3248:15;3282:4;3279:1;3272:15;3298:125;3363:9;;;3384:10;;;3381:36;;;3397:18;;:::i;3428:251::-;3498:6;3551:2;3539:9;3530:7;3526:23;3522:32;3519:52;;;3567:1;3564;3557:12;3519:52;3599:9;3593:16;3618:31;3643:5;3618:31;:::i;3684:195::-;3723:3;3754:66;3747:5;3744:77;3741:103;;3824:18;;:::i;:::-;-1:-1:-1;3871:1:1;3860:13;;3684:195::o;4287:184::-;4339:77;4336:1;4329:88;4436:4;4433:1;4426:15;4460:4;4457:1;4450:15;4476:128;4543:9;;;4564:11;;;4561:37;;;4578:18;;:::i

Swarm Source

ipfs://523623bf8846327371eb3b4107c667d0cc00df30d45338b2204551bdb1f27f92

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

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.