FTM Price: $0.67 (-2.43%)
Gas: 13 GWei

Contract

0x9076C96e01F6F13e1eC4832354dF970d245e124F
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Unlock795421422024-04-17 21:22:183 hrs ago1713388938IN
PaintSwap: Art Gallery
0 FTM0.0009793119.79851529
Unlock795401812024-04-17 20:47:544 hrs ago1713386874IN
PaintSwap: Art Gallery
0 FTM0.002580420.48089877
Unlock795295372024-04-17 17:31:257 hrs ago1713375085IN
PaintSwap: Art Gallery
0 FTM0.0018912629.20922556
Unlock795258432024-04-17 16:24:338 hrs ago1713371073IN
PaintSwap: Art Gallery
0 FTM0.0039109130.48065625
Unlock795254952024-04-17 16:18:428 hrs ago1713370722IN
PaintSwap: Art Gallery
0 FTM0.0017438326.93219378
Unlock795136662024-04-17 10:57:5714 hrs ago1713351477IN
PaintSwap: Art Gallery
0 FTM0.000939316.77324353
Unlock795129362024-04-17 10:26:3414 hrs ago1713349594IN
PaintSwap: Art Gallery
0 FTM0.0009897717.6745014
Unlock795117012024-04-17 9:44:5615 hrs ago1713347096IN
PaintSwap: Art Gallery
0 FTM0.0018043423.00610732
Unlock795115032024-04-17 9:38:4115 hrs ago1713346721IN
PaintSwap: Art Gallery
0 FTM0.0014696913.54645977
Unlock795079512024-04-17 7:07:0117 hrs ago1713337621IN
PaintSwap: Art Gallery
0 FTM0.001352423
Unlock795050902024-04-17 5:06:2119 hrs ago1713330381IN
PaintSwap: Art Gallery
0 FTM0.0008184916.54728782
Unlock795028062024-04-17 3:28:5421 hrs ago1713324534IN
PaintSwap: Art Gallery
0 FTM0.0012237418
Unlock795001252024-04-17 1:44:1223 hrs ago1713318252IN
PaintSwap: Art Gallery
0 FTM0.0035527248.33775689
Unlock794853982024-04-16 19:10:4629 hrs ago1713294646IN
PaintSwap: Art Gallery
0 FTM0.0025249745.08887696
Unlock794835412024-04-16 18:45:0430 hrs ago1713293104IN
PaintSwap: Art Gallery
0 FTM0.0021240837.93014948
Unlock794830442024-04-16 18:36:4830 hrs ago1713292608IN
PaintSwap: Art Gallery
0 FTM0.0023664636.54828013
Unlock794820312024-04-16 18:18:5230 hrs ago1713291532IN
PaintSwap: Art Gallery
0 FTM0.0020768337.08635444
Unlock794728992024-04-16 15:32:0433 hrs ago1713281524IN
PaintSwap: Art Gallery
0 FTM0.0027568232.42490011
Unlock794569282024-04-16 7:41:3941 hrs ago1713253299IN
PaintSwap: Art Gallery
0 FTM0.0048119627
Unlock794485772024-04-16 3:01:5446 hrs ago1713236514IN
PaintSwap: Art Gallery
0 FTM0.0015072423.2783232
Unlock794483352024-04-16 2:50:4546 hrs ago1713235845IN
PaintSwap: Art Gallery
0 FTM0.001411224
Unlock794405132024-04-15 23:22:012 days ago1713223321IN
PaintSwap: Art Gallery
0 FTM0.002375942.42696225
Unlock793836992024-04-15 5:47:452 days ago1713160065IN
PaintSwap: Art Gallery
0 FTM0.0026751947.7713733
Unlock793827492024-04-15 5:11:342 days ago1713157894IN
PaintSwap: Art Gallery
0 FTM0.0039836976
Unlock793789152024-04-15 2:26:552 days ago1713148015IN
PaintSwap: Art Gallery
0 FTM0.0012468625.20757763
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
77637322021-05-26 16:24:181057 days ago1622046258  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArtGallery

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at ftmscan.com on 2021-05-26
*/

// SPDX-License-Identifier: GPL-3.0-or-later Or MIT
pragma solidity >=0.8.0 <0.9.0;

interface IArtGallery {
	function lock (address _painter, uint256 amount) external;
}







interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address _owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}







/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) { // payable
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


contract ArtGallery is IArtGallery, Ownable {
    struct ArtEntry {
        uint256 amount; // How much to lock
        uint256 unlockTime; // When it is unlocked
    }

    // A wrapper around a mapping, enabling FIFO
    struct Collection {
        mapping(uint256 => ArtEntry) queue;
        uint256 first;
        uint256 count;
    }

    IBEP20 private immutable brush;
    uint256 public immutable lockDuration;

    mapping(address => Collection) private lockedUp;

    constructor(address _brush, uint256 _lockDuration) {
        brush = IBEP20(_brush);
        lockDuration = _lockDuration;
    }

    function lock(address _painter, uint256 _amount)
        external
        override
        onlyOwner
    {
        require(_amount > 0);
        Collection storage collection = lockedUp[_painter];
        collection.queue[collection.count] = ArtEntry({
            amount: _amount,
            unlockTime: block.timestamp + lockDuration
        });
        ++collection.count;
    }

    function isUnlockable(uint256 _unlockTime) public view returns (bool) {
        return block.timestamp >= _unlockTime;
    }

    // Always use inspect() first to avoid spending gas without any unlocks
    function unlock() external {
        uint256 unlockedAmount;

        Collection storage collection = lockedUp[msg.sender];
        uint256 count = collection.count;
        while (collection.first < count) {
            ArtEntry storage entry = collection.queue[collection.first];
            if (!isUnlockable(entry.unlockTime)) {
                break;
            }
            unlockedAmount += entry.amount;
            delete collection.queue[collection.first];
            ++collection.first;
        }

        if (unlockedAmount > 0) {
            safeBrushTransfer(msg.sender, unlockedAmount);
        }
    }

    function inspect(address _painter)
        public
        view
        returns (
            uint256 lockedCount, // How many art pieces are locked
            uint256 lockedAmount, // How much is locked in total
            uint256 unlockableCount,
            uint256 unlockableAmount,
            uint256 nextUnlockTime, // 0 if nothing locked; does not represent an immediate unlockable
            uint256 nextUnlockAmount
        )
    {
        Collection storage collection = lockedUp[_painter];
        for (uint256 i = collection.first; i < collection.count; ++i) {
            ArtEntry storage entry = collection.queue[i];
            if (isUnlockable(entry.unlockTime)) {
                ++unlockableCount;
                unlockableAmount += entry.amount;
            } else {
                ++lockedCount;
                lockedAmount += entry.amount;
                if (lockedCount == 1) {
                    nextUnlockTime = entry.unlockTime;
                    nextUnlockAmount = entry.amount;
                }
            }
        }
    }

    // Safe brush transfer function, just in case if rounding error causes the gallery to not have enough BRUSHs.
    function safeBrushTransfer(address _to, uint256 _amount) internal {
        require(_amount > 0);
        uint256 brushBal = brush.balanceOf(address(this));
        if (_amount > brushBal) {
            brush.transfer(_to, brushBal);
        } else {
            brush.transfer(_to, _amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_brush","type":"address"},{"internalType":"uint256","name":"_lockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_painter","type":"address"}],"name":"inspect","outputs":[{"internalType":"uint256","name":"lockedCount","type":"uint256"},{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"unlockableCount","type":"uint256"},{"internalType":"uint256","name":"unlockableAmount","type":"uint256"},{"internalType":"uint256","name":"nextUnlockTime","type":"uint256"},{"internalType":"uint256","name":"nextUnlockAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unlockTime","type":"uint256"}],"name":"isUnlockable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_painter","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b5060405161093338038061093383398101604081905261002f9161008b565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060609190911b6001600160601b03191660805260a0526100c3565b6000806040838503121561009d578182fd5b82516001600160a01b03811681146100b3578283fd5b6020939093015192949293505050565b60805160601c60a0516108346100ff60003960008181609201526102a801526000818161052c015281816105de015261068601526108346000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610124578063a51270b41461013f578063a69df4b514610163578063f2fde38b1461016b57600080fd5b8063045544431461008d578063065b1c3c146100c7578063282d3fdf14610107578063715018a61461011c575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100da6100d53660046106e6565b61017e565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016100be565b61011a610115366004610707565b610238565b005b61011a61030a565b6000546040516001600160a01b0390911681526020016100be565b61015361014d366004610750565b42101590565b60405190151581526020016100be565b61011a61037e565b61011a6101793660046106e6565b61041d565b6001600160a01b038116600090815260016020819052604082209081015482918291829182918291905b816002015481101561022d576000818152602083905260409020600181015442106101ec576101d6876107cd565b81549097506101e590876107b5565b955061021c565b6101f5896107cd565b815490995061020490896107b5565b9750886001141561021c576001810154815490955093505b50610226816107cd565b90506101a8565b505091939550919395565b6000546001600160a01b0316331461026b5760405162461bcd60e51b815260040161026290610780565b60405180910390fd5b6000811161027857600080fd5b6001600160a01b0382166000908152600160209081526040918290208251808401909352838352919081016102cd7f0000000000000000000000000000000000000000000000000000000000000000426107b5565b90526002820180546000908152602084815260408220845181559301516001909301929092558054909190610301906107cd565b90915550505050565b6000546001600160a01b031633146103345760405162461bcd60e51b815260040161026290610780565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b33600090815260016020526040812060028101545b8082600101541015610408576001828101546000908152602084905260409020908101544210156103c45750610408565b80546103d090856107b5565b6001808501805460009081526020879052604081208181559092018290558054929650916103fd906107cd565b909155506103939050565b8215610418576104183384610507565b505050565b6000546001600160a01b031633146104475760405162461bcd60e51b815260040161026290610780565b6001600160a01b0381166104ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610262565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000811161051457600080fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561057657600080fd5b505afa15801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ae9190610768565b9050808211156106605760405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065a9190610730565b50505050565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b15801561062257600080fd5b80356001600160a01b03811681146106e157600080fd5b919050565b6000602082840312156106f7578081fd5b610700826106ca565b9392505050565b60008060408385031215610719578081fd5b610722836106ca565b946020939093013593505050565b600060208284031215610741578081fd5b81518015158114610700578182fd5b600060208284031215610761578081fd5b5035919050565b600060208284031215610779578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156107c8576107c86107e8565b500190565b60006000198214156107e1576107e16107e8565b5060010190565b634e487b7160e01b600052601160045260246000fdfea264697066735822122095b1e3fccf0f0a901a738f52060b267c4e9a6a03af35546a6b26429dcd97c52364736f6c6343000804003300000000000000000000000085dec8c4b2680793661bca91a8f129607571863d00000000000000000000000000000000000000000000000000000000006ebe00

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610124578063a51270b41461013f578063a69df4b514610163578063f2fde38b1461016b57600080fd5b8063045544431461008d578063065b1c3c146100c7578063282d3fdf14610107578063715018a61461011c575b600080fd5b6100b47f00000000000000000000000000000000000000000000000000000000006ebe0081565b6040519081526020015b60405180910390f35b6100da6100d53660046106e6565b61017e565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016100be565b61011a610115366004610707565b610238565b005b61011a61030a565b6000546040516001600160a01b0390911681526020016100be565b61015361014d366004610750565b42101590565b60405190151581526020016100be565b61011a61037e565b61011a6101793660046106e6565b61041d565b6001600160a01b038116600090815260016020819052604082209081015482918291829182918291905b816002015481101561022d576000818152602083905260409020600181015442106101ec576101d6876107cd565b81549097506101e590876107b5565b955061021c565b6101f5896107cd565b815490995061020490896107b5565b9750886001141561021c576001810154815490955093505b50610226816107cd565b90506101a8565b505091939550919395565b6000546001600160a01b0316331461026b5760405162461bcd60e51b815260040161026290610780565b60405180910390fd5b6000811161027857600080fd5b6001600160a01b0382166000908152600160209081526040918290208251808401909352838352919081016102cd7f00000000000000000000000000000000000000000000000000000000006ebe00426107b5565b90526002820180546000908152602084815260408220845181559301516001909301929092558054909190610301906107cd565b90915550505050565b6000546001600160a01b031633146103345760405162461bcd60e51b815260040161026290610780565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b33600090815260016020526040812060028101545b8082600101541015610408576001828101546000908152602084905260409020908101544210156103c45750610408565b80546103d090856107b5565b6001808501805460009081526020879052604081208181559092018290558054929650916103fd906107cd565b909155506103939050565b8215610418576104183384610507565b505050565b6000546001600160a01b031633146104475760405162461bcd60e51b815260040161026290610780565b6001600160a01b0381166104ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610262565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000811161051457600080fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000085dec8c4b2680793661bca91a8f129607571863d6001600160a01b0316906370a082319060240160206040518083038186803b15801561057657600080fd5b505afa15801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ae9190610768565b9050808211156106605760405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f00000000000000000000000085dec8c4b2680793661bca91a8f129607571863d169063a9059cbb90604401602060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065a9190610730565b50505050565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f00000000000000000000000085dec8c4b2680793661bca91a8f129607571863d169063a9059cbb90604401602060405180830381600087803b15801561062257600080fd5b80356001600160a01b03811681146106e157600080fd5b919050565b6000602082840312156106f7578081fd5b610700826106ca565b9392505050565b60008060408385031215610719578081fd5b610722836106ca565b946020939093013593505050565b600060208284031215610741578081fd5b81518015158114610700578182fd5b600060208284031215610761578081fd5b5035919050565b600060208284031215610779578081fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156107c8576107c86107e8565b500190565b60006000198214156107e1576107e16107e8565b5060010190565b634e487b7160e01b600052601160045260246000fdfea264697066735822122095b1e3fccf0f0a901a738f52060b267c4e9a6a03af35546a6b26429dcd97c52364736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000085dec8c4b2680793661bca91a8f129607571863d00000000000000000000000000000000000000000000000000000000006ebe00

-----Decoded View---------------
Arg [0] : _brush (address): 0x85dec8c4B2680793661bCA91a8F129607571863d
Arg [1] : _lockDuration (uint256): 7257600

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000085dec8c4b2680793661bca91a8f129607571863d
Arg [1] : 00000000000000000000000000000000000000000000000000000000006ebe00


Deployed Bytecode Sourcemap

6426:3425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6820:37;;;;;;;;2951:25:1;;;2939:2;2924:18;6820:37:0;;;;;;;;8320:1089;;;;;;:::i;:::-;;:::i;:::-;;;;3274:25:1;;;3330:2;3315:18;;3308:34;;;;3358:18;;;3351:34;;;;3416:2;3401:18;;3394:34;3459:3;3444:19;;3437:35;3503:3;3488:19;;3481:35;3261:3;3246:19;8320:1089:0;3228:294:1;7061:394:0;;;;;;:::i;:::-;;:::i;:::-;;5870:148;;;:::i;5228:79::-;5266:7;5293:6;5228:79;;-1:-1:-1;;;;;5293:6:0;;;1504:51:1;;1492:2;1477:18;5228:79:0;1459:102:1;7463:126:0;;;;;;:::i;:::-;7551:15;:30;;;7463:126;;;;2010:14:1;;2003:22;1985:41;;1973:2;1958:18;7463:126:0;1940:92:1;7674:638:0;;;:::i;6173:244::-;;;;;;:::i;:::-;;:::i;8320:1089::-;-1:-1:-1;;;;;8816:18:0;;8417:19;8816:18;;;:8;:18;;;;;;;8862:16;;;;8417:19;;;;;;;;;;8816:18;8845:557;8884:10;:16;;;8880:1;:20;8845:557;;;8922:22;8947:19;;;;;;;;;;8998:16;;;;7551:15;:30;8981:410;;9036:17;;;:::i;:::-;9092:12;;9036:17;;-1:-1:-1;9072:32:0;;;;:::i;:::-;;;8981:410;;;9145:13;;;:::i;:::-;9193:12;;9145:13;;-1:-1:-1;9177:28:0;;;;:::i;:::-;;;9228:11;9243:1;9228:16;9224:152;;;9286:16;;;;9344:12;;9286:16;;-1:-1:-1;9344:12:0;-1:-1:-1;9224:152:0;-1:-1:-1;8902:3:0;;;:::i;:::-;;;8845:557;;;;8320:1089;;;;;;;;:::o;7061:394::-;5440:6;;-1:-1:-1;;;;;5440:6:0;3952:10;5440:22;5432:67;;;;-1:-1:-1;;;5432:67:0;;;;;;;:::i;:::-;;;;;;;;;7199:1:::1;7189:7;:11;7181:20;;;::::0;::::1;;-1:-1:-1::0;;;;;7244:18:0;::::1;7212:29;7244:18:::0;;;:8:::1;:18;::::0;;;;;;;;7310:108;;;;::::1;::::0;;;;;;7244:18;7310:108;;::::1;7376:30;7394:12;7376:15;:30;:::i;:::-;7310:108:::0;;7290:16:::1;::::0;::::1;::::0;;7273::::1;:34:::0;;;::::1;::::0;;;;;;:145;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;7429:18;;7290:16;;7273;7429:18:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;7061:394:0:o;5870:148::-;5440:6;;-1:-1:-1;;;;;5440:6:0;3952:10;5440:22;5432:67;;;;-1:-1:-1;;;5432:67:0;;;;;;;:::i;:::-;5977:1:::1;5961:6:::0;;5940:40:::1;::::0;-1:-1:-1;;;;;5961:6:0;;::::1;::::0;5940:40:::1;::::0;5977:1;;5940:40:::1;6008:1;5991:19:::0;;-1:-1:-1;;;;;;5991:19:0::1;::::0;;5870:148::o;7674:638::-;7788:10;7712:22;7779:20;;;:8;:20;;;;;7826:16;;;;7853:344;7879:5;7860:10;:16;;;:24;7853:344;;;7943:16;;;;;7901:22;7926:34;;;;;;;;;;7993:16;;;;7551:15;:30;;7975:77;;8031:5;;;7975:77;8084:12;;8066:30;;;;:::i;:::-;8135:16;;;;;;8118;:34;;;;;;;;;;8111:41;;;;;;;;;8167:18;;8066:30;;-1:-1:-1;8135:16:0;8167:18;;;:::i;:::-;;;;-1:-1:-1;7853:344:0;;-1:-1:-1;7853:344:0;;8213:18;;8209:96;;8248:45;8266:10;8278:14;8248:17;:45::i;:::-;7674:638;;;:::o;6173:244::-;5440:6;;-1:-1:-1;;;;;5440:6:0;3952:10;5440:22;5432:67;;;;-1:-1:-1;;;5432:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6262:22:0;::::1;6254:73;;;::::0;-1:-1:-1;;;6254:73:0;;2239:2:1;6254:73:0::1;::::0;::::1;2221:21:1::0;2278:2;2258:18;;;2251:30;2317:34;2297:18;;;2290:62;-1:-1:-1;;;2368:18:1;;;2361:36;2414:19;;6254:73:0::1;2211:228:1::0;6254:73:0::1;6364:6;::::0;;6343:38:::1;::::0;-1:-1:-1;;;;;6343:38:0;;::::1;::::0;6364:6;::::1;::::0;6343:38:::1;::::0;::::1;6392:6;:17:::0;;-1:-1:-1;;;;;;6392:17:0::1;-1:-1:-1::0;;;;;6392:17:0;;;::::1;::::0;;;::::1;::::0;;6173:244::o;9532:316::-;9627:1;9617:7;:11;9609:20;;;;;;9659:30;;-1:-1:-1;;;9659:30:0;;9683:4;9659:30;;;1504:51:1;9640:16:0;;9659:5;-1:-1:-1;;;;;9659:15:0;;;;1477:18:1;;9659:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9640:49;;9714:8;9704:7;:18;9700:141;;;9739:29;;-1:-1:-1;;;9739:29:0;;-1:-1:-1;;;;;1758:32:1;;;9739:29:0;;;1740:51:1;1807:18;;;1800:34;;;9739:5:0;:14;;;;1713:18:1;;9739:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7674:638;;;:::o;9700:141::-;9801:28;;-1:-1:-1;;;9801:28:0;;-1:-1:-1;;;;;1758:32:1;;;9801:28:0;;;1740:51:1;1807:18;;;1800:34;;;9801:5:0;:14;;;;1713:18:1;;9801:28:0;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;:::-;343:39;262:126;-1:-1:-1;;;262:126:1:o;393:264::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;647:2;632:18;;;;619:32;;-1:-1:-1;;;480:177:1:o;662:297::-;729:6;782:2;770:9;761:7;757:23;753:32;750:2;;;803:6;795;788:22;750:2;840:9;834:16;893:5;886:13;879:21;872:5;869:32;859:2;;920:6;912;905:22;964:190;1023:6;1076:2;1064:9;1055:7;1051:23;1047:32;1044:2;;;1097:6;1089;1082:22;1044:2;-1:-1:-1;1125:23:1;;1034:120;-1:-1:-1;1034:120:1:o;1159:194::-;1229:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:2;;;1303:6;1295;1288:22;1250:2;-1:-1:-1;1331:16:1;;1240:113;-1:-1:-1;1240:113:1:o;2444:356::-;2646:2;2628:21;;;2665:18;;;2658:30;2724:34;2719:2;2704:18;;2697:62;2791:2;2776:18;;2618:182::o;3527:128::-;3567:3;3598:1;3594:6;3591:1;3588:13;3585:2;;;3604:18;;:::i;:::-;-1:-1:-1;3640:9:1;;3575:80::o;3660:135::-;3699:3;-1:-1:-1;;3720:17:1;;3717:2;;;3740:18;;:::i;:::-;-1:-1:-1;3787:1:1;3776:13;;3707:88::o;3800:127::-;3861:10;3856:3;3852:20;3849:1;3842:31;3892:4;3889:1;3882:15;3916:4;3913:1;3906:15

Swarm Source

ipfs://95b1e3fccf0f0a901a738f52060b267c4e9a6a03af35546a6b26429dcd97c523

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

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