ETH Price: $3,133.66 (+0.32%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
New Vault253537012025-01-21 21:59:09327 days ago1737496749IN
Yearn: Release Registry
0 ETH0.00000220.00155272
New Vault235726852024-12-11 16:31:57368 days ago1733934717IN
Yearn: Release Registry
0 ETH0.000014080.03104838
Transfer Ownersh...33494412023-08-31 13:23:49836 days ago1693488229IN
Yearn: Release Registry
0 ETH0.000037590.11662551
New Vault33478722023-08-31 12:31:31836 days ago1693485091IN
Yearn: Release Registry
0 ETH0.000112270.11247196
New Release32647722023-08-29 14:21:31838 days ago1693318891IN
Yearn: Release Registry
0 ETH0.000087130.12441604

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
253537012025-01-21 21:59:09327 days ago1737496749
Yearn: Release Registry
 Contract Creation0 ETH
235726852024-12-11 16:31:57368 days ago1733934717
Yearn: Release Registry
 Contract Creation0 ETH
211553312024-10-16 17:33:29424 days ago1729100009
Yearn: Release Registry
 Contract Creation0 ETH
200375672024-09-20 20:34:41450 days ago1726864481
Yearn: Release Registry
 Contract Creation0 ETH
186536042024-08-19 19:42:35482 days ago1724096555
Yearn: Release Registry
 Contract Creation0 ETH
154680912024-06-07 1:58:49556 days ago1717725529
Yearn: Release Registry
 Contract Creation0 ETH
154680912024-06-07 1:58:49556 days ago1717725529
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
124383312024-03-28 22:46:49626 days ago1711666009
Yearn: Release Registry
 Contract Creation0 ETH
91199742024-01-12 3:14:55702 days ago1705029295
Yearn: Release Registry
 Contract Creation0 ETH
88816832024-01-06 14:51:53708 days ago1704552713
Yearn: Release Registry
 Contract Creation0 ETH
83746252023-12-25 21:09:57720 days ago1703538597
Yearn: Release Registry
 Contract Creation0 ETH
63571032023-11-09 4:19:13766 days ago1699503553
Yearn: Release Registry
 Contract Creation0 ETH
63570972023-11-09 4:19:01766 days ago1699503541
Yearn: Release Registry
 Contract Creation0 ETH
38047422023-09-11 2:20:31826 days ago1694398831
Yearn: Release Registry
 Contract Creation0 ETH
38047382023-09-11 2:20:23826 days ago1694398823
Yearn: Release Registry
 Contract Creation0 ETH
38045812023-09-11 2:15:09826 days ago1694398509
Yearn: Release Registry
 Contract Creation0 ETH
34043502023-09-01 19:54:07835 days ago1693598047
Yearn: Release Registry
 Contract Creation0 ETH
34043462023-09-01 19:53:59835 days ago1693598039
Yearn: Release Registry
 Contract Creation0 ETH
34043242023-09-01 19:53:15835 days ago1693597995
Yearn: Release Registry
 Contract Creation0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ReleaseRegistry

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.15;
import "@openzeppelin/contracts/access/Ownable.sol";

import "./IVault.sol";

contract ReleaseRegistry is Ownable {
    /// @notice Number of vault releases in this registry.
    uint256 public numReleases;

    /// @notice Address of a given vault release index.
    mapping(uint256 => address) public releases;

    event NewRelease(
        uint256 indexed releaseId,
        address template,
        string apiVersion
    );

    event NewClone(address indexed vault);

    /**
    @notice Returns the api version of the latest release.
    @dev Throws if no releases are registered yet.
    @return The api version of the latest release.
    */
    function latestRelease() external view returns (string memory) {
        return IVault(releases[numReleases - 1]).apiVersion(); // dev: no release
    }

    /**
    @notice
        Add a previously deployed Vault as the template contract for the latest release,
        to be used by further "forwarder-style" delegatecall proxy contracts that can be
        deployed from the registry through other methods (to save gas).
    @dev
        Throws if caller isn't owner.
        Throws if the api version is the same as the previous release.
        Emits a NewRelease event.
    @param _vault The vault that will be used as the template contract for the next release.
    */
    function newRelease(address _vault) external onlyOwner {
        // Check if the release is different from the current one
        // NOTE: This doesn't check for strict semver-style linearly increasing release versions
        uint256 releaseId = numReleases; // Next id in series
        if (releaseId > 0) {
            require(
                keccak256(
                    bytes(IVault(releases[releaseId - 1]).apiVersion())
                ) != keccak256(bytes(IVault(_vault).apiVersion())),
                "same api version"
            );
        }
        // Update latest release
        releases[releaseId] = _vault;
        numReleases = releaseId + 1;
        // Log the release for external listeners (e.g. Graph)
        emit NewRelease(releaseId, _vault, IVault(_vault).apiVersion());
    }

    function _newProxyVault(
        address _token,
        address _governance,
        address _rewards,
        address _guardian,
        string memory _name,
        string memory _symbol,
        uint256 _releaseTarget
    ) internal returns (address) {
        address vault;
        {
            address release = releases[_releaseTarget];
            require(release != address(0), "unknown release");
            vault = _clone(release);
            emit NewClone(vault);
        }
        // NOTE: Must initialize the Vault atomically with deploying it
        IVault(vault).initialize(
            _token,
            _governance,
            _rewards,
            _name,
            _symbol,
            _guardian
        );
        return vault;
    }

    /// @notice Deploy a new vault with the latest vault release.
    /// @dev See other newVault() function for more details.
    function newVault(
        address _token,
        address _guardian,
        address _rewards,
        string calldata _name,
        string calldata _symbol
    ) external returns (address) {
        return
            newVault(
                _token,
                msg.sender,
                _guardian,
                _rewards,
                _name,
                _symbol,
                0
            );
    }

    /**
    @notice
        Create a new vault for the given token using the latest release in the registry,
        as a simple "forwarder-style" delegatecall proxy to the latest release.
    @dev
        Throws if no releases are registered yet. Note that this vault will not be automatically endorsed.
    @param _token The token that may be deposited into the new Vault.
    @param _governance vault governance
    @param _guardian The address authorized for guardian interactions in the new Vault.
    @param _rewards The address to use for collecting rewards in the new Vault
    @param _name Specify a custom Vault name. Set to empty string for default choice.
    @param _symbol Specify a custom Vault symbol name. Set to empty string for default choice.
    @param _releaseDelta Specify the number of releases prior to the latest to use as a target. Default is latest.
    @return The address of the newly-deployed vault
     */
    function newVault(
        address _token,
        address _governance,
        address _guardian,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        uint256 _releaseDelta
    ) public returns (address) {
        // NOTE: Underflow if no releases created yet, or targeting prior to release history
        uint256 releaseTarget = numReleases - 1 - _releaseDelta; // dev: no releases
        address vault = _newProxyVault(
            _token,
            _governance,
            _rewards,
            _guardian,
            _name,
            _symbol,
            releaseTarget
        );

        return vault;
    }

    function _clone(address _target) internal returns (address _newVault) {
        // Copied from https://github.com/optionality/clone-factory/blob/master/contracts/CloneFactory.sol
        bytes20 addressBytes = bytes20(address(_target));

        assembly {
            // EIP-1167 bytecode
            let clone_code := mload(0x40)
            mstore(
                clone_code,
                0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000
            )
            mstore(add(clone_code, 0x14), addressBytes)
            mstore(
                add(clone_code, 0x28),
                0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000
            )
            _newVault := create(0, clone_code, 0x37)
        }
    }
}

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.15;

interface IVault {
    function token() external view returns (address);

    function apiVersion() external view returns (string memory);

    function governance() external view returns (address);

    function initialize(
        address _token,
        address _governance,
        address _rewards,
        string calldata _name,
        string calldata _symbol,
        address _guardian
    ) external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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 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) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"}],"name":"NewClone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"releaseId","type":"uint256"},{"indexed":false,"internalType":"address","name":"template","type":"address"},{"indexed":false,"internalType":"string","name":"apiVersion","type":"string"}],"name":"NewRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"latestRelease","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"newRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numReleases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"releases","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"}]

608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610be08061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637be0ca5e116100665780637be0ca5e146100fc5780638da5cb5b14610111578063b6a9f40f14610122578063e1c6ba5d1461014b578063f2fde38b1461015e57600080fd5b8063108ca11e1461009857806333990d4b146100c857806356e0a94b146100dd578063715018a6146100f4575b600080fd5b6100ab6100a6366004610824565b610171565b6040516001600160a01b0390911681526020015b60405180910390f35b6100db6100d63660046108c6565b610191565b005b6100e660015481565b6040519081526020016100bf565b6100db6103cd565b6101046103e1565b6040516100bf9190610938565b6000546001600160a01b03166100ab565b6100ab61013036600461094b565b6002602052600090815260409020546001600160a01b031681565b6100ab610159366004610964565b610481565b6100db61016c3660046108c6565b61053b565b600061018588338989898989896000610481565b98975050505050505050565b6101996105b4565b60015480156102f257816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102089190810190610a34565b80516020909101206002600061021f600185610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561027e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a69190810190610a34565b80519060200120036102f25760405162461bcd60e51b815260206004820152601060248201526f39b0b6b29030b834903b32b939b4b7b760811b60448201526064015b60405180910390fd5b600081815260026020526040902080546001600160a01b0319166001600160a01b038416179055610324816001610b10565b600181905550807fa6fbd216b6734f34092f1be6b7247e1551a6d4f2d5000c53721cfdc119a5b7cf83846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561038b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103b39190810190610a34565b6040516103c1929190610b23565b60405180910390a25050565b6103d56105b4565b6103df600061060e565b565b606060026000600180546103f59190610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047c9190810190610a34565b905090565b60008082600180546104939190610af7565b61049d9190610af7565b9050600061052b8c8c8b8d8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061065e915050565b9c9b505050505050505050505050565b6105436105b4565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e9565b6105b18161060e565b50565b6000546001600160a01b031633146103df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526002602052604081205481906001600160a01b0316806106b75760405162461bcd60e51b815260206004820152600f60248201526e756e6b6e6f776e2072656c6561736560881b60448201526064016102e9565b6106c08161076d565b6040519092506001600160a01b038316907fcc1e9c890bc4f4943c457abb8d17f97703b9f7144e1f4a69e50c6e4988ef38b790600090a25060405163a5b81fdf60e01b81526001600160a01b0382169063a5b81fdf9061072e908c908c908c908b908b908e90600401610b4f565b600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b50929b9a5050505050505050505050565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f0949350505050565b80356001600160a01b03811681146107d657600080fd5b919050565b60008083601f8401126107ed57600080fd5b50813567ffffffffffffffff81111561080557600080fd5b60208301915083602082850101111561081d57600080fd5b9250929050565b600080600080600080600060a0888a03121561083f57600080fd5b610848886107bf565b9650610856602089016107bf565b9550610864604089016107bf565b9450606088013567ffffffffffffffff8082111561088157600080fd5b61088d8b838c016107db565b909650945060808a01359150808211156108a657600080fd5b506108b38a828b016107db565b989b979a50959850939692959293505050565b6000602082840312156108d857600080fd5b6108e1826107bf565b9392505050565b60005b838110156109035781810151838201526020016108eb565b50506000910152565b600081518084526109248160208601602086016108e8565b601f01601f19169290920160200192915050565b6020815260006108e1602083018461090c565b60006020828403121561095d57600080fd5b5035919050565b600080600080600080600080600060e08a8c03121561098257600080fd5b61098b8a6107bf565b985061099960208b016107bf565b97506109a760408b016107bf565b96506109b560608b016107bf565b955060808a013567ffffffffffffffff808211156109d257600080fd5b6109de8d838e016107db565b909750955060a08c01359150808211156109f757600080fd5b50610a048c828d016107db565b9a9d999c50979a9699959894979660c00135949350505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610a4657600080fd5b815167ffffffffffffffff80821115610a5e57600080fd5b818401915084601f830112610a7257600080fd5b815181811115610a8457610a84610a1e565b604051601f8201601f19908116603f01168101908382118183101715610aac57610aac610a1e565b81604052828152876020848701011115610ac557600080fd5b610ad68360208301602088016108e8565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b0a57610b0a610ae1565b92915050565b80820180821115610b0a57610b0a610ae1565b6001600160a01b0383168152604060208201819052600090610b479083018461090c565b949350505050565b600060018060a01b0380891683528088166020840152808716604084015260c06060840152610b8160c084018761090c565b8381036080850152610b93818761090c565b92505080841660a08401525097965050505050505056fea2646970667358221220f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c520791064736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637be0ca5e116100665780637be0ca5e146100fc5780638da5cb5b14610111578063b6a9f40f14610122578063e1c6ba5d1461014b578063f2fde38b1461015e57600080fd5b8063108ca11e1461009857806333990d4b146100c857806356e0a94b146100dd578063715018a6146100f4575b600080fd5b6100ab6100a6366004610824565b610171565b6040516001600160a01b0390911681526020015b60405180910390f35b6100db6100d63660046108c6565b610191565b005b6100e660015481565b6040519081526020016100bf565b6100db6103cd565b6101046103e1565b6040516100bf9190610938565b6000546001600160a01b03166100ab565b6100ab61013036600461094b565b6002602052600090815260409020546001600160a01b031681565b6100ab610159366004610964565b610481565b6100db61016c3660046108c6565b61053b565b600061018588338989898989896000610481565b98975050505050505050565b6101996105b4565b60015480156102f257816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102089190810190610a34565b80516020909101206002600061021f600185610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561027e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a69190810190610a34565b80519060200120036102f25760405162461bcd60e51b815260206004820152601060248201526f39b0b6b29030b834903b32b939b4b7b760811b60448201526064015b60405180910390fd5b600081815260026020526040902080546001600160a01b0319166001600160a01b038416179055610324816001610b10565b600181905550807fa6fbd216b6734f34092f1be6b7247e1551a6d4f2d5000c53721cfdc119a5b7cf83846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561038b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103b39190810190610a34565b6040516103c1929190610b23565b60405180910390a25050565b6103d56105b4565b6103df600061060e565b565b606060026000600180546103f59190610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047c9190810190610a34565b905090565b60008082600180546104939190610af7565b61049d9190610af7565b9050600061052b8c8c8b8d8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061065e915050565b9c9b505050505050505050505050565b6105436105b4565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e9565b6105b18161060e565b50565b6000546001600160a01b031633146103df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526002602052604081205481906001600160a01b0316806106b75760405162461bcd60e51b815260206004820152600f60248201526e756e6b6e6f776e2072656c6561736560881b60448201526064016102e9565b6106c08161076d565b6040519092506001600160a01b038316907fcc1e9c890bc4f4943c457abb8d17f97703b9f7144e1f4a69e50c6e4988ef38b790600090a25060405163a5b81fdf60e01b81526001600160a01b0382169063a5b81fdf9061072e908c908c908c908b908b908e90600401610b4f565b600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b50929b9a5050505050505050505050565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f0949350505050565b80356001600160a01b03811681146107d657600080fd5b919050565b60008083601f8401126107ed57600080fd5b50813567ffffffffffffffff81111561080557600080fd5b60208301915083602082850101111561081d57600080fd5b9250929050565b600080600080600080600060a0888a03121561083f57600080fd5b610848886107bf565b9650610856602089016107bf565b9550610864604089016107bf565b9450606088013567ffffffffffffffff8082111561088157600080fd5b61088d8b838c016107db565b909650945060808a01359150808211156108a657600080fd5b506108b38a828b016107db565b989b979a50959850939692959293505050565b6000602082840312156108d857600080fd5b6108e1826107bf565b9392505050565b60005b838110156109035781810151838201526020016108eb565b50506000910152565b600081518084526109248160208601602086016108e8565b601f01601f19169290920160200192915050565b6020815260006108e1602083018461090c565b60006020828403121561095d57600080fd5b5035919050565b600080600080600080600080600060e08a8c03121561098257600080fd5b61098b8a6107bf565b985061099960208b016107bf565b97506109a760408b016107bf565b96506109b560608b016107bf565b955060808a013567ffffffffffffffff808211156109d257600080fd5b6109de8d838e016107db565b909750955060a08c01359150808211156109f757600080fd5b50610a048c828d016107db565b9a9d999c50979a9699959894979660c00135949350505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610a4657600080fd5b815167ffffffffffffffff80821115610a5e57600080fd5b818401915084601f830112610a7257600080fd5b815181811115610a8457610a84610a1e565b604051601f8201601f19908116603f01168101908382118183101715610aac57610aac610a1e565b81604052828152876020848701011115610ac557600080fd5b610ad68360208301602088016108e8565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b0a57610b0a610ae1565b92915050565b80820180821115610b0a57610b0a610ae1565b6001600160a01b0383168152604060208201819052600090610b479083018461090c565b949350505050565b600060018060a01b0380891683528088166020840152808716604084015260c06060840152610b8160c084018761090c565b8381036080850152610b93818761090c565b92505080841660a08401525097965050505050505056fea2646970667358221220f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c520791064736f6c63430008110033

Deployed Bytecode Sourcemap

140:5763:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3107:422;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1659:32:4;;;1641:51;;1629:2;1614:18;3107:422:3;;;;;;;;1397:808;;;;;;:::i;:::-;;:::i;:::-;;241:26;;;;;;;;;2040:25:4;;;2028:2;2013:18;241:26:3;1894:177:4;1831:101:0;;;:::i;717:152:3:-;;;:::i;:::-;;;;;;;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;330:43:3;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;330:43:3;;;4473:665;;;;;;:::i;:::-;;:::i;2081:198:0:-;;;;;;:::i;:::-;;:::i;3107:422:3:-;3290:7;3328:194;3354:6;3378:10;3406:9;3433:8;3459:5;;3482:7;;3507:1;3328:8;:194::i;:::-;3309:213;3107:422;-1:-1:-1;;;;;;;;3107:422:3:o;1397:808::-;1094:13:0;:11;:13::i;:::-;1645:11:3::1;::::0;1691:13;;1687:268:::1;;1872:6;-1:-1:-1::0;;;;;1865:25:3::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1865:27:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1849:45:::0;;::::1;::::0;;::::1;::::0;1789:8:::1;:23;1798:13;1810:1;1798:9:::0;:13:::1;:::i;:::-;1789:23;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;1789:23:3::1;-1:-1:-1::0;;;;;1782:42:3::1;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1782:44:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1745:100;;;;;;:149:::0;1720:224:::1;;;::::0;-1:-1:-1;;;1720:224:3;;5612:2:4;1720:224:3::1;::::0;::::1;5594:21:4::0;5651:2;5631:18;;;5624:30;-1:-1:-1;;;5670:18:4;;;5663:46;5726:18;;1720:224:3::1;;;;;;;;;1997:19;::::0;;;:8:::1;:19;::::0;;;;:28;;-1:-1:-1;;;;;;1997:28:3::1;-1:-1:-1::0;;;;;1997:28:3;::::1;;::::0;;2049:13:::1;1997:19:::0;-1:-1:-1;2049:13:3::1;:::i;:::-;2035:11;:27;;;;2151:9;2140:58;2162:6;2177;-1:-1:-1::0;;;;;2170:25:3::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;2170:27:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;2140:58;;;;;;;:::i;:::-;;;;;;;;1452:753;1397:808:::0;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;717:152:3:-;765:13;804:8;:25;827:1;813:11;;:15;;;;:::i;:::-;804:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;804:25:3;-1:-1:-1;;;;;797:44:3;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;797:46:3;;;;;;;;;;;;:::i;:::-;790:53;;717:152;:::o;4473:665::-;4714:7;4826:21;4868:13;4864:1;4850:11;;:15;;;;:::i;:::-;:31;;;;:::i;:::-;4826:55;;4911:13;4927:181;4955:6;4975:11;5000:8;5022:9;5045:5;;4927:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5064:7;;4927:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5085:13:3;;-1:-1:-1;4927:14:3;;-1:-1:-1;;4927:181:3:i;:::-;4911:197;4473:665;-1:-1:-1;;;;;;;;;;;;4473:665:3:o;2081:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:0;;6409:2:4;2161:73:0::1;::::0;::::1;6391:21:4::0;6448:2;6428:18;;;6421:30;6487:34;6467:18;;;6460:62;-1:-1:-1;;;6538:18:4;;;6531:36;6584:19;;2161:73:0::1;6207:402:4::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:1;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;6816:2:4;1414:68:0;;;6798:21:4;;;6835:18;;;6828:30;6894:34;6874:18;;;6867:62;6946:18;;1414:68:0;6614:356:4;2433:187:0;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2211:763:3:-;2457:7;2531:24;;;:8;:24;;;;;;2457:7;;-1:-1:-1;;;;;2531:24:3;;2569:49;;;;-1:-1:-1;;;2569:49:3;;7177:2:4;2569:49:3;;;7159:21:4;7216:2;7196:18;;;7189:30;-1:-1:-1;;;7235:18:4;;;7228:45;7290:18;;2569:49:3;6975:339:4;2569:49:3;2640:15;2647:7;2640:6;:15::i;:::-;2674;;2632:23;;-1:-1:-1;;;;;;2674:15:3;;;;;;;;-1:-1:-1;2781:164:3;;-1:-1:-1;;;2781:164:3;;-1:-1:-1;;;;;2781:24:3;;;;;:164;;2819:6;;2839:11;;2864:8;;2886:5;;2905:7;;2926:9;;2781:164;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2962:5:3;;2211:763;-1:-1:-1;;;;;;;;;;;2211:763:3:o;5144:757::-;5195:17;5331:20;5370:7;5354:25;;5331:48;;5470:4;5464:11;-1:-1:-1;;;5512:10:3;5488:132;5663:12;5656:4;5644:10;5640:21;5633:43;-1:-1:-1;;;5729:4:3;5717:10;5713:21;5689:143;5880:4;5868:10;5865:1;5858:27;5845:40;5144:757;-1:-1:-1;;;;5144:757:3:o;14:173:4:-;82:20;;-1:-1:-1;;;;;131:31:4;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:348::-;244:8;254:6;308:3;301:4;293:6;289:17;285:27;275:55;;326:1;323;316:12;275:55;-1:-1:-1;349:20:4;;392:18;381:30;;378:50;;;424:1;421;414:12;378:50;461:4;453:6;449:17;437:29;;513:3;506:4;497:6;489;485:19;481:30;478:39;475:59;;;530:1;527;520:12;475:59;192:348;;;;;:::o;545:945::-;664:6;672;680;688;696;704;712;765:3;753:9;744:7;740:23;736:33;733:53;;;782:1;779;772:12;733:53;805:29;824:9;805:29;:::i;:::-;795:39;;853:38;887:2;876:9;872:18;853:38;:::i;:::-;843:48;;910:38;944:2;933:9;929:18;910:38;:::i;:::-;900:48;;999:2;988:9;984:18;971:32;1022:18;1063:2;1055:6;1052:14;1049:34;;;1079:1;1076;1069:12;1049:34;1118:59;1169:7;1160:6;1149:9;1145:22;1118:59;:::i;:::-;1196:8;;-1:-1:-1;1092:85:4;-1:-1:-1;1284:3:4;1269:19;;1256:33;;-1:-1:-1;1301:16:4;;;1298:36;;;1330:1;1327;1320:12;1298:36;;1369:61;1422:7;1411:8;1400:9;1396:24;1369:61;:::i;:::-;545:945;;;;-1:-1:-1;545:945:4;;-1:-1:-1;545:945:4;;;;1343:87;;-1:-1:-1;;;545:945:4:o;1703:186::-;1762:6;1815:2;1803:9;1794:7;1790:23;1786:32;1783:52;;;1831:1;1828;1821:12;1783:52;1854:29;1873:9;1854:29;:::i;:::-;1844:39;1703:186;-1:-1:-1;;;1703:186:4:o;2076:250::-;2161:1;2171:113;2185:6;2182:1;2179:13;2171:113;;;2261:11;;;2255:18;2242:11;;;2235:39;2207:2;2200:10;2171:113;;;-1:-1:-1;;2318:1:4;2300:16;;2293:27;2076:250::o;2331:271::-;2373:3;2411:5;2405:12;2438:6;2433:3;2426:19;2454:76;2523:6;2516:4;2511:3;2507:14;2500:4;2493:5;2489:16;2454:76;:::i;:::-;2584:2;2563:15;-1:-1:-1;;2559:29:4;2550:39;;;;2591:4;2546:50;;2331:271;-1:-1:-1;;2331:271:4:o;2607:220::-;2756:2;2745:9;2738:21;2719:4;2776:45;2817:2;2806:9;2802:18;2794:6;2776:45;:::i;2832:180::-;2891:6;2944:2;2932:9;2923:7;2919:23;2915:32;2912:52;;;2960:1;2957;2950:12;2912:52;-1:-1:-1;2983:23:4;;2832:180;-1:-1:-1;2832:180:4:o;3017:1089::-;3154:6;3162;3170;3178;3186;3194;3202;3210;3218;3271:3;3259:9;3250:7;3246:23;3242:33;3239:53;;;3288:1;3285;3278:12;3239:53;3311:29;3330:9;3311:29;:::i;:::-;3301:39;;3359:38;3393:2;3382:9;3378:18;3359:38;:::i;:::-;3349:48;;3416:38;3450:2;3439:9;3435:18;3416:38;:::i;:::-;3406:48;;3473:38;3507:2;3496:9;3492:18;3473:38;:::i;:::-;3463:48;;3562:3;3551:9;3547:19;3534:33;3586:18;3627:2;3619:6;3616:14;3613:34;;;3643:1;3640;3633:12;3613:34;3682:59;3733:7;3724:6;3713:9;3709:22;3682:59;:::i;:::-;3760:8;;-1:-1:-1;3656:85:4;-1:-1:-1;3848:3:4;3833:19;;3820:33;;-1:-1:-1;3865:16:4;;;3862:36;;;3894:1;3891;3884:12;3862:36;;3933:61;3986:7;3975:8;3964:9;3960:24;3933:61;:::i;:::-;3017:1089;;;;-1:-1:-1;3017:1089:4;;;;;;;;4013:8;4095:3;4080:19;4067:33;;3017:1089;-1:-1:-1;;;;3017:1089:4:o;4111:127::-;4172:10;4167:3;4163:20;4160:1;4153:31;4203:4;4200:1;4193:15;4227:4;4224:1;4217:15;4243:897;4323:6;4376:2;4364:9;4355:7;4351:23;4347:32;4344:52;;;4392:1;4389;4382:12;4344:52;4425:9;4419:16;4454:18;4495:2;4487:6;4484:14;4481:34;;;4511:1;4508;4501:12;4481:34;4549:6;4538:9;4534:22;4524:32;;4594:7;4587:4;4583:2;4579:13;4575:27;4565:55;;4616:1;4613;4606:12;4565:55;4645:2;4639:9;4667:2;4663;4660:10;4657:36;;;4673:18;;:::i;:::-;4748:2;4742:9;4716:2;4802:13;;-1:-1:-1;;4798:22:4;;;4822:2;4794:31;4790:40;4778:53;;;4846:18;;;4866:22;;;4843:46;4840:72;;;4892:18;;:::i;:::-;4932:10;4928:2;4921:22;4967:2;4959:6;4952:18;5007:7;5002:2;4997;4993;4989:11;4985:20;4982:33;4979:53;;;5028:1;5025;5018:12;4979:53;5041:68;5106:2;5101;5093:6;5089:15;5084:2;5080;5076:11;5041:68;:::i;:::-;5128:6;4243:897;-1:-1:-1;;;;;;;4243:897:4:o;5145:127::-;5206:10;5201:3;5197:20;5194:1;5187:31;5237:4;5234:1;5227:15;5261:4;5258:1;5251:15;5277:128;5344:9;;;5365:11;;;5362:37;;;5379:18;;:::i;:::-;5277:128;;;;:::o;5755:125::-;5820:9;;;5841:10;;;5838:36;;;5854:18;;:::i;5885:317::-;-1:-1:-1;;;;;6062:32:4;;6044:51;;6131:2;6126;6111:18;;6104:30;;;-1:-1:-1;;6151:45:4;;6177:18;;6169:6;6151:45;:::i;:::-;6143:53;5885:317;-1:-1:-1;;;;5885:317:4:o;7319:745::-;7591:4;7637:1;7633;7628:3;7624:11;7620:19;7678:2;7670:6;7666:15;7655:9;7648:34;7730:2;7722:6;7718:15;7713:2;7702:9;7698:18;7691:43;7782:2;7774:6;7770:15;7765:2;7754:9;7750:18;7743:43;7822:3;7817:2;7806:9;7802:18;7795:31;7849:46;7890:3;7879:9;7875:19;7867:6;7849:46;:::i;:::-;7944:9;7936:6;7932:22;7926:3;7915:9;7911:19;7904:51;7972:33;7998:6;7990;7972:33;:::i;:::-;7964:41;;;8054:2;8046:6;8042:15;8036:3;8025:9;8021:19;8014:44;;7319:745;;;;;;;;;:::o

Swarm Source

ipfs://f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c5207910

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

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.