ETH Price: $2,686.95 (-2.38%)

Contract

0x30a4249C42be05215b6063691949710592859697
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60206113174774622023-06-14 10:02:35439 days ago1686736955IN
 Create: CurveTricryptoFactoryHandler
0 ETH0.016072214.20067992

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurveTricryptoFactoryHandler

Compiler Version
vyper:0.3.9

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.9

"""
@title CurveTricryptoFactoryHandler
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved
@notice A Registry Handler for the MetaRegistry
"""

interface BaseRegistry:
    def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: view
    def get_coin_indices(_pool: address, _from: address, _to: address) -> (uint256, uint256): view
    def get_balances(_pool: address) -> uint256[MAX_COINS]: view
    def get_coins(_pool: address) -> address[MAX_COINS]: view
    def get_decimals(_pool: address) -> uint256[MAX_COINS]: view
    def get_gauge(_pool: address) -> address: view
    def get_n_coins(_pool: address) -> uint256: view
    def get_token(_pool: address) -> address: view
    def pool_count() -> uint256: view
    def pool_list(pool_id: uint256) -> address: view

interface CurvePool:
    def adjustment_step() -> uint256: view
    def admin_fee() -> uint256: view
    def allowed_extra_profit() -> uint256: view
    def A() -> uint256: view
    def balances(i: uint256) -> uint256: view
    def D() -> uint256: view
    def fee() -> uint256: view
    def fee_gamma() -> uint256: view
    def gamma() -> uint256: view
    def get_virtual_price() -> uint256: view
    def ma_half_time() -> uint256: view
    def mid_fee() -> uint256: view
    def out_fee() -> uint256: view
    def virtual_price() -> uint256: view
    def xcp_profit() -> uint256: view
    def xcp_profit_a() -> uint256: view

interface ERC20:
    def name() -> String[64]: view
    def balanceOf(_addr: address) -> uint256: view
    def totalSupply() -> uint256: view
    def decimals() -> uint256: view

interface GaugeController:
    def gauge_types(gauge: address) -> int128: view
    def gauges(i: uint256) -> address: view

interface Gauge:
    def is_killed() -> bool: view


# ---- constants ---- #
GAUGE_CONTROLLER: constant(address) = 0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB
MAX_COINS: constant(uint256) = 3
MAX_METAREGISTRY_COINS: constant(uint256) = 8
MAX_POOLS: constant(uint256) = 65536
N_COINS: constant(uint256) = 3


# ---- storage variables ---- #
base_registry: public(BaseRegistry)


# ---- constructor ---- #
@external
def __init__(_registry_address: address):
    self.base_registry = BaseRegistry(_registry_address)


# ---- internal methods ---- #
@internal
@view
def _pad_uint_array(_array: uint256[MAX_COINS]) -> uint256[MAX_METAREGISTRY_COINS]:
    _padded_array: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS])
    for i in range(MAX_COINS):
        _padded_array[i] = _array[i]
    return _padded_array


@internal
@view
def _get_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    return self._pad_uint_array(self.base_registry.get_balances(_pool))


@internal
@view
def _get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    _coins: address[MAX_COINS] = self.base_registry.get_coins(_pool)
    _padded_coins: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS])
    for i in range(MAX_COINS):
        _padded_coins[i] = _coins[i]
    return _padded_coins


@internal
@view
def _get_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    return self._pad_uint_array(self.base_registry.get_decimals(_pool))


@internal
@view
def _get_n_coins(_pool: address) -> uint256:

    if (self.base_registry.get_coins(_pool)[0] != empty(address)):
        return N_COINS
    return 0


@internal
@view
def _get_gauge_type(_gauge: address) -> int128:

    # try to get gauge type registered in gauge controller
    success: bool = False
    response: Bytes[32] = b""
    success, response = raw_call(
        GAUGE_CONTROLLER,
        concat(
            method_id("gauge_type(address)"),
            convert(_gauge, bytes32),
        ),
        max_outsize=32,
        revert_on_failure=False,
        is_static_call=True
    )

    if success and not Gauge(_gauge).is_killed():
        return convert(response, int128)

    # if we are here, the call to get gauge_type failed.
    # in such a case, return a default value.
    # ethereum: mainnet crypto pools have gauge type 5
    return 5


@internal
@view
def _is_registered(_pool: address) -> bool:
    return self._get_n_coins(_pool) > 0


# ---- view methods (API) of the contract ---- #
@external
@view
def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address:
    """
    @notice checks if either of the two coins are in a base pool and then checks
            if the basepool lp token and the other coin have a pool.
            This is done because the factory does not have `underlying` methods in
            pools that have a basepool lp token in them
    @param _from Address of the _from coin
    @param _to Address of the _to coin
    @param i Index of the pool to return
    @return Address of the pool
    """
    return self.base_registry.find_pool_for_coins(_from, _to, i)


@external
@view
def get_admin_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the balances of the admin tokens of the given pool
    @dev Cryptoswap pools do not store admin fees in the form of
         admin token balances. Instead, the admin fees are computed
         at the time of claim iff sufficient profits have been made.
         These fees are allocated to the admin by minting LP tokens
         (dilution). The logic to calculate fees are derived from
         cryptopool._claim_admin_fees() method.
    @param _pool Address of the pool
    @return uint256[MAX_METAREGISTRY_COINS] Array of admin balances
    """

    xcp_profit: uint256 = CurvePool(_pool).xcp_profit()
    xcp_profit_a: uint256 = CurvePool(_pool).xcp_profit_a()
    admin_fee: uint256 = CurvePool(_pool).admin_fee()
    admin_balances: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS])

    # admin balances are non zero if pool has made more than allowed profits:
    if xcp_profit > xcp_profit_a:

        # calculate admin fees in lp token amounts:
        fees: uint256 = (xcp_profit - xcp_profit_a) * admin_fee / (2 * 10**10)
        if fees > 0:
            vprice: uint256 = CurvePool(_pool).virtual_price()
            frac: uint256 = vprice * 10**18 / (vprice - fees) - 10**18

            # the total supply of lp token is current supply + claimable:
            lp_token_total_supply: uint256 = ERC20(_pool).totalSupply()
            d_supply: uint256 = lp_token_total_supply * frac / 10**18
            lp_token_total_supply += d_supply
            admin_lp_frac: uint256 = d_supply * 10 ** 18 / lp_token_total_supply

            # get admin balances in individual assets:
            reserves: uint256[MAX_METAREGISTRY_COINS] = self._get_balances(_pool)
            for i in range(MAX_METAREGISTRY_COINS):
                admin_balances[i] = admin_lp_frac * reserves[i] / 10 ** 18

    return admin_balances


@external
@view
def get_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the balances of the tokens of the given pool
    @param _pool Address of the pool
    @return uint256[MAX_METAREGISTRY_COINS] Array of balances
    """
    return self._get_balances(_pool)


@external
@view
def get_base_pool(_pool: address) -> address:
    """
    @notice Returns the base pool of the given pool
    @dev Returns empty(address) if the pool isn't a metapool
    @param _pool Address of the pool
    @return Address of the base pool
    """
    return empty(address)


@external
@view
def get_coin_indices(_pool: address, _from: address, _to: address) -> (uint256, uint256, bool):
    """
    @notice Convert coin addresses to indices for use with pool methods
    @param _pool Address of the pool
    @param _from Address of the from coin
    @param _to Address of the to coin
    @return (uint256, uint256, bool) Tuple of indices of the coins in the pool,
            and whether the market is an underlying market or not.
    """
    i: uint256 = 0
    j: uint256 = 0

    (i, j) = self.base_registry.get_coin_indices(_pool, _from, _to)

    return (i, j, False)


@external
@view
def get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the coins of the given pool
    @param _pool Address of the pool
    @return address[MAX_METAREGISTRY_COINS] Array of coins
    """
    return self._get_coins(_pool)


@external
@view
def get_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the decimals of the coins in a given pool
    @param _pool Address of the pool
    @return uint256[MAX_METAREGISTRY_COINS] Array of decimals
    """
    return self._get_decimals(_pool)


@external
@view
def get_fees(_pool: address) -> uint256[10]:
    """
    @notice Returns the fees of the given pool
    @param _pool Address of the pool
    @return uint256[10] Array of fees. Fees are arranged as:
            1. swap fee (or `fee`)
            2. admin fee
            3. mid fee (fee when cryptoswap pool is pegged)
            4. out fee (fee when cryptoswap pool depegs)
    """
    fees: uint256[10] = empty(uint256[10])
    pool_fees: uint256[4] = [CurvePool(_pool).fee(), CurvePool(_pool).admin_fee(), CurvePool(_pool).mid_fee(), CurvePool(_pool).out_fee()]
    for i in range(4):
        fees[i] = pool_fees[i]
    return fees


@external
@view
def get_gauges(_pool: address) -> (address[10], int128[10]):
    """
    @notice Returns the gauges of the given pool
    @param _pool Address of the pool
    @return (address[10], int128[10]) Tuple of gauges. Gauges are arranged as:
            1. gauge addresses
            2. gauge types
    """
    gauges: address[10] = empty(address[10])
    types: int128[10] = empty(int128[10])
    gauges[0] = self.base_registry.get_gauge(_pool)
    types[0] = self._get_gauge_type(gauges[0])
    return (gauges, types)


@external
@view
def get_lp_token(_pool: address) -> address:
    """
    @notice Returns the Liquidity Provider token of the given pool
    @param _pool Address of the pool
    @return Address of the Liquidity Provider token
    """
    return _pool


@external
@view
def get_n_coins(_pool: address) -> uint256:
    """
    @notice Returns the number of coins in the given pool
    @param _pool Address of the pool
    @return uint256 Number of coins
    """
    return self._get_n_coins(_pool)


@external
@view
def get_n_underlying_coins(_pool: address) -> uint256:
    """
    @notice Get the number of underlying coins in a pool
    @param _pool Address of the pool
    @return uint256 Number of underlying coins
    """
    _coins: address[MAX_METAREGISTRY_COINS] = self._get_coins(_pool)

    for i in range(MAX_METAREGISTRY_COINS):
        if _coins[i] == empty(address):
            return i
    raise

@external
@view
def get_pool_asset_type(_pool: address) -> uint256:
    """
    @notice Returns the asset type of the given pool
    @dev Returns 4: 0 = USD, 1 = ETH, 2 = BTC, 3 = Other
    @param _pool Address of the pool
    @return uint256 Asset type
    """
    return 3


@external
@view
def get_pool_from_lp_token(_lp_token: address) -> address:
    """
    @notice Returns the pool of the given Liquidity Provider token
    @param _lp_token Address of the Liquidity Provider token
    @return Address of the pool
    """
    if self._get_n_coins(_lp_token) > 0:
        return _lp_token
    return empty(address)


@external
@view
def get_pool_name(_pool: address) -> String[64]:
    """
    @notice Returns the name of the given pool
    @param _pool Address of the pool
    @return String[64] Name of the pool
    """
    return ERC20(self.base_registry.get_token(_pool)).name()

@external
@view
def get_pool_params(_pool: address) -> uint256[20]:
    """
    @notice returns pool params given a cryptopool address
    @dev contains all settable parameter that alter the pool's performance
    @dev only applicable for cryptopools
    @param _pool Address of the pool for which data is being queried.
    """
    pool_params: uint256[20] = empty(uint256[20])
    pool_params[0] = CurvePool(_pool).A()
    pool_params[1] = CurvePool(_pool).D()
    pool_params[2] = CurvePool(_pool).gamma()
    pool_params[3] = CurvePool(_pool).allowed_extra_profit()
    pool_params[4] = CurvePool(_pool).fee_gamma()
    pool_params[5] = CurvePool(_pool).adjustment_step()
    pool_params[6] = CurvePool(_pool).ma_half_time()
    return pool_params


@external
@view
def get_underlying_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the underlying balances of the given pool
    @param _pool Address of the pool
    @return uint256[MAX_METAREGISTRY_COINS] Array of underlying balances
    """
    return self._get_balances(_pool)


@external
@view
def get_underlying_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the underlying coins of the given pool
    @param _pool Address of the pool
    @return address[MAX_METAREGISTRY_COINS] Array of underlying coins
    """
    return self._get_coins(_pool)


@external
@view
def get_underlying_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]:
    """
    @notice Returns the underlying decimals of the given pool
    @param _pool Address of the pool
    @return uint256[MAX_METAREGISTRY_COINS] Array of underlying decimals
    """
    return self._get_decimals(_pool)


@external
@view
def get_virtual_price_from_lp_token(_token: address) -> uint256:
    """
    @notice Returns the virtual price of the given Liquidity Provider token
    @param _token Address of the Liquidity Provider token
    @return uint256 Virtual price
    """
    return CurvePool(_token).get_virtual_price()


@external
@view
def is_meta(_pool: address) -> bool:
    """
    @notice Returns whether the given pool is a meta pool
    @param _pool Address of the pool
    @return bool Whether the pool is a meta pool
    """
    return False


@external
@view
def is_registered(_pool: address) -> bool:
    """
    @notice Check if a pool belongs to the registry using get_n_coins
    @param _pool The address of the pool
    @return A bool corresponding to whether the pool belongs or not
    """
    return self._get_n_coins(_pool) > 0


@external
@view
def pool_count() -> uint256:
    """
    @notice Returns the number of pools in the registry
    @return uint256 Number of pools
    """
    return self.base_registry.pool_count()


@external
@view
def pool_list(_index: uint256) -> address:
    """
    @notice Returns the address of the pool at the given index
    @param _index Index of the pool
    @return Address of the pool
    """
    return self.base_registry.pool_list(_index)

Contract Security Audit

Contract ABI

[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_registry_address","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_admin_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_base_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_fees","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[10]"}]},{"stateMutability":"view","type":"function","name":"get_gauges","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[10]"},{"name":"","type":"int128[10]"}]},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_n_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_asset_type","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"_lp_token","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"get_pool_params","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[20]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_virtual_price_from_lp_token","inputs":[{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"is_meta","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_registered","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"_index","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"base_registry","inputs":[],"outputs":[{"name":"","type":"address"}]}]

602061134a5f395f518060a01c6113465760405234611346576040515f5561131661002f61000039611316610000f36003361161000c57610e79565b5f3560e01c346113055763b229777c811861002c575f5460405260206040f35b63a87df06c81186100485760443610611305575f608052610062565b636982eb0b81186100d25760643610611305576044356080525b6004358060a01c611305576040526024358060a01c6113055760605260205f54636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa6100b4573d5f5f3e3d5ffd5b60203d106113055760a0518060a01c61130557610120526101209050f35b63c11e45b8811861040a5760243610611305576004358060a01c611305576103605261036051637ba1a74d6103a05260206103a060046103bc845afa61011a573d5f5f3e3d5ffd5b60203d10611305576103a09050516103805261036051630b7b594b6103c05260206103c060046103dc845afa610152573d5f5f3e3d5ffd5b60203d10611305576103c09050516103a0526103605163fee3f7f96103e05260206103e060046103fc845afa61018a573d5f5f3e3d5ffd5b60203d10611305576103e09050516103c052610100366103e0376103a05161038051111561040257610380516103a05180820382811161130557905090506103c05180820281158383830414171561130557905090506404a817c800810490506104e0526104e051156104025761036051630c46b72a610520526020610520600461053c845afa61021d573d5f5f3e3d5ffd5b60203d10611305576105209050516105005261050051670de0b6b3a7640000810281670de0b6b3a7640000820418611305579050610500516104e051808203828111611305579050905080156113055780820490509050670de0b6b3a7640000810381811161130557905061052052610360516318160ddd610560526020610560600461057c845afa6102b2573d5f5f3e3d5ffd5b60203d10611305576105609050516105405261054051610520518082028115838383041417156113055790509050670de0b6b3a76400008104905061056052610540516105605180820182811061130557905090506105405261056051670de0b6b3a7640000810281670de0b6b3a7640000820418611305579050610540518015611305578082049050905061058052610360516101c0526103556106a0610f05565b6106a080516105a05260208101516105c05260408101516105e05260608101516106005260808101516106205260a08101516106405260c08101516106605260e081015161068052505f6008905b806106a052610580516106a051600781116113055760051b6105a001518082028115838383041417156113055790509050670de0b6b3a7640000810490506106a051600781116113055760051b6103e001526001018181186103a35750505b6101006103e0f35b6392e3cc2d81186104475760243610611305576004358060a01c6113055761036052610100610360516101c052610442610380610f05565b610380f35b636f20d6dd81186104725760243610611305576004358060a01c611305576040525f60605260206060f35b63eb85226d811861051d5760643610611305576004358060a01c611305576040526024358060a01c611305576060526044358060a01c6113055760805260403660a0375f5463eb85226d60e052604051610100526060516101205260805161014052604060e0606460fc845afa6104eb573d5f5f3e3d5ffd5b60403d106113055760e09050805160a052602081015160c0525060a05160e05260c051610100525f61012052606060e0f35b639ac90d3d81186105595760243610611305576004358060a01c611305576101e0526101006101e051604052610554610200610fb0565b610200f35b6352b5155581186105965760243610611305576004358060a01c6113055761036052610100610360516101c0526105916103806110b1565b610380f35b637cdb72b081186106de5760243610611305576004358060a01c611305576040526101403660603760405163ddca3f43610220526020610220600461023c845afa6105e3573d5f5f3e3d5ffd5b60203d10611305576102209050516101a05260405163fee3f7f9610260526020610260600461027c845afa61061a573d5f5f3e3d5ffd5b60203d10611305576102609050516101c0526040516392526c0c6102a05260206102a060046102bc845afa610651573d5f5f3e3d5ffd5b60203d10611305576102a09050516101e05260405163ee8de6756102e05260206102e060046102fc845afa610688573d5f5f3e3d5ffd5b60203d10611305576102e0905051610200525f6004905b806102205261022051600381116113055760051b6101a0015161022051600981116113055760051b6060015260010181811861069f5750506101406060f35b6356059ffb81186108185760243610611305576004358060a01c611305576101a052610280366101c0375f5463daf297b9610440526101a051610460526020610440602461045c845afa610734573d5f5f3e3d5ffd5b60203d1061130557610440518060a01c61130557610480526104809050516101c0526101c0516040526107686104406111d2565b61044051610300526101c051610440526101e051610460526102005161048052610220516104a052610240516104c052610260516104e05261028051610500526102a051610520526102c051610540526102e051610560526103005161058052610320516105a052610340516105c052610360516105e05261038051610600526103a051610620526103c051610640526103e051610660526104005161068052610420516106a052610280610440f35b6337951049811861083f5760243610611305576004358060a01c6113055760405260206040f35b63940494f1811861087a5760243610611305576004358060a01c611305576101405260206101405160405261087561016061115c565b610160f35b630a700c0881186109375760243610611305576004358060a01c611305576101e0526101e0516040526108ae610300610fb0565b61030080516102005260208101516102205260408101516102405260608101516102605260808101516102805260a08101516102a05260c08101516102c05260e08101516102e052505f6008905b806103005261030051600781116113055760051b61020001516109255750506020610300610935565b6001018181186108fc5750505f5ffd5bf35b6366d3966c81186109635760243610611305576004358060a01c61130557604052600360605260206060f35b63bdf475c381186109b75760243610611305576004358060a01c61130557610140526101405160405261099761016061115c565b61016051156109aa5760206101406109b5565b5f6101605260206101605bf35b635c9117418118610abf5760243610611305576004358060a01c611305576040526020806101c0525f5463977d9122606052604051608052602060606024607c845afa610a06573d5f5f3e3d5ffd5b60203d10611305576060518060a01c6113055760a05260a09050516306fdde0360c052608060c0600460dc845afa610a40573d5f5f3e3d5ffd5b60403d106113055760c05160c00160408151116113055780516020820181610180838360045afa5050806101605250506101609050816101c001815160208301602083018281848460045afa505050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506101c0f35b63688532aa8118610c6a5760243610611305576004358060a01c611305576040526102803660603760405163f446c1d06102e05260206102e060046102fc845afa610b0c573d5f5f3e3d5ffd5b60203d10611305576102e0905051606052604051630f529ba26102e05260206102e060046102fc845afa610b42573d5f5f3e3d5ffd5b60203d10611305576102e090505160805260405163b13739296102e05260206102e060046102fc845afa610b78573d5f5f3e3d5ffd5b60203d10611305576102e090505160a0526040516349fe9e776102e05260206102e060046102fc845afa610bae573d5f5f3e3d5ffd5b60203d10611305576102e090505160c0526040516372d4f0e26102e05260206102e060046102fc845afa610be4573d5f5f3e3d5ffd5b60203d10611305576102e090505160e05260405163083812e56102e05260206102e060046102fc845afa610c1a573d5f5f3e3d5ffd5b60203d10611305576102e09050516101005260405163662b62746102e05260206102e060046102fc845afa610c51573d5f5f3e3d5ffd5b60203d10611305576102e0905051610120526102806060f35b6359f4f3518118610ca75760243610611305576004358060a01c6113055761036052610100610360516101c052610ca2610380610f05565b610380f35b63a77576ef8118610ce35760243610611305576004358060a01c611305576101e0526101006101e051604052610cde610200610fb0565b610200f35b634cb088f18118610d205760243610611305576004358060a01c6113055761036052610100610360516101c052610d1b6103806110b1565b610380f35b63c5b7074a8118610d735760243610611305576004358060a01c61130557604052602060405163bb7b8b80606052602060606004607c845afa610d65573d5f5f3e3d5ffd5b60203d106113055760609050f35b63e4d332a98118610d9e5760243610611305576004358060a01c611305576040525f60605260206060f35b63619ea8068118610de35760243610611305576004358060a01c611305576101405261014051604052610dd261016061115c565b610160511515610180526020610180f35b63956aae3a8118610e1f5760205f5463956aae3a604052602060406004605c845afa610e11573d5f5f3e3d5ffd5b60203d106113055760409050f35b633a1d5d8e8118610e7757602436106113055760205f54633a1d5d8e604052600435606052602060406024605c845afa610e5b573d5f5f3e3d5ffd5b60203d10611305576040518060a01c6113055760805260809050f35b505b5f5ffd5b6101003660a0375f6003905b806101a0526101a051600281116113055760051b604001516101a051600781116113055760051b60a00152600101818118610e8957505060a051815260c051602082015260e05160408201526101005160608201526101205160808201526101405160a08201526101605160c08201526101805160e082015250565b5f546392e3cc2d6101e0526101c0516102005260606101e060246101fc845afa610f31573d5f5f3e3d5ffd5b60603d10611305576101e0905080516040526020810151606052604081015160805250610f5f610260610e7d565b610260805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b5f54639ac90d3d60c05260405160e052606060c0602460dc845afa610fd7573d5f5f3e3d5ffd5b60603d106113055760c0518060a01c611305576101405260e0518060a01c6113055761016052610100518060a01c6113055761018052610140905080516060526020810151608052604081015160a052506101003660c0375f6003905b806101c0526101c051600281116113055760051b606001516101c051600781116113055760051b60c0015260010181811861103457505060c051815260e05160208201526101005160408201526101205160608201526101405160808201526101605160a08201526101805160c08201526101a05160e082015250565b5f546352b515556101e0526101c0516102005260606101e060246101fc845afa6110dd573d5f5f3e3d5ffd5b60603d10611305576101e090508051604052602081015160605260408101516080525061110b610260610e7d565b610260805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b5f54639ac90d3d606052604051608052606060606024607c845afa611183573d5f5f3e3d5ffd5b60603d10611305576060518060a01c6113055760e0526080518060a01c611305576101005260a0518060a01c611305576101205260e0905051156111cb5760038152506111d0565b5f8152505b565b5f6060525f60c05260c080518060805250505f600460c0527f1e4274770000000000000000000000000000000000000000000000000000000060e05260c080516020820183610120018151815250508083019250505060405181610120015260208101905080610100526101005050602061018061010051610120732f50d538606fa9edd2b11e2446beb18c9d5846bb5afa6060523d602081183d602010021861016052610160805160208201805160a05250806080525050606051611298575f6112d9565b604051639c868ac060c052602060c0600460dc845afa6112ba573d5f5f3e3d5ffd5b60203d106113055760c0518060011c6113055761010052610100905051155b156112fd5760a05160805160200360031b1d80600f0b811861130557815250611303565b60058152505b565b5f80fda165767970657283000309000b005b5f80fd0000000000000000000000000c0e5f2ff0ff18a3be9b835635039256dc4b4963

Deployed Bytecode

0x6003361161000c57610e79565b5f3560e01c346113055763b229777c811861002c575f5460405260206040f35b63a87df06c81186100485760443610611305575f608052610062565b636982eb0b81186100d25760643610611305576044356080525b6004358060a01c611305576040526024358060a01c6113055760605260205f54636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa6100b4573d5f5f3e3d5ffd5b60203d106113055760a0518060a01c61130557610120526101209050f35b63c11e45b8811861040a5760243610611305576004358060a01c611305576103605261036051637ba1a74d6103a05260206103a060046103bc845afa61011a573d5f5f3e3d5ffd5b60203d10611305576103a09050516103805261036051630b7b594b6103c05260206103c060046103dc845afa610152573d5f5f3e3d5ffd5b60203d10611305576103c09050516103a0526103605163fee3f7f96103e05260206103e060046103fc845afa61018a573d5f5f3e3d5ffd5b60203d10611305576103e09050516103c052610100366103e0376103a05161038051111561040257610380516103a05180820382811161130557905090506103c05180820281158383830414171561130557905090506404a817c800810490506104e0526104e051156104025761036051630c46b72a610520526020610520600461053c845afa61021d573d5f5f3e3d5ffd5b60203d10611305576105209050516105005261050051670de0b6b3a7640000810281670de0b6b3a7640000820418611305579050610500516104e051808203828111611305579050905080156113055780820490509050670de0b6b3a7640000810381811161130557905061052052610360516318160ddd610560526020610560600461057c845afa6102b2573d5f5f3e3d5ffd5b60203d10611305576105609050516105405261054051610520518082028115838383041417156113055790509050670de0b6b3a76400008104905061056052610540516105605180820182811061130557905090506105405261056051670de0b6b3a7640000810281670de0b6b3a7640000820418611305579050610540518015611305578082049050905061058052610360516101c0526103556106a0610f05565b6106a080516105a05260208101516105c05260408101516105e05260608101516106005260808101516106205260a08101516106405260c08101516106605260e081015161068052505f6008905b806106a052610580516106a051600781116113055760051b6105a001518082028115838383041417156113055790509050670de0b6b3a7640000810490506106a051600781116113055760051b6103e001526001018181186103a35750505b6101006103e0f35b6392e3cc2d81186104475760243610611305576004358060a01c6113055761036052610100610360516101c052610442610380610f05565b610380f35b636f20d6dd81186104725760243610611305576004358060a01c611305576040525f60605260206060f35b63eb85226d811861051d5760643610611305576004358060a01c611305576040526024358060a01c611305576060526044358060a01c6113055760805260403660a0375f5463eb85226d60e052604051610100526060516101205260805161014052604060e0606460fc845afa6104eb573d5f5f3e3d5ffd5b60403d106113055760e09050805160a052602081015160c0525060a05160e05260c051610100525f61012052606060e0f35b639ac90d3d81186105595760243610611305576004358060a01c611305576101e0526101006101e051604052610554610200610fb0565b610200f35b6352b5155581186105965760243610611305576004358060a01c6113055761036052610100610360516101c0526105916103806110b1565b610380f35b637cdb72b081186106de5760243610611305576004358060a01c611305576040526101403660603760405163ddca3f43610220526020610220600461023c845afa6105e3573d5f5f3e3d5ffd5b60203d10611305576102209050516101a05260405163fee3f7f9610260526020610260600461027c845afa61061a573d5f5f3e3d5ffd5b60203d10611305576102609050516101c0526040516392526c0c6102a05260206102a060046102bc845afa610651573d5f5f3e3d5ffd5b60203d10611305576102a09050516101e05260405163ee8de6756102e05260206102e060046102fc845afa610688573d5f5f3e3d5ffd5b60203d10611305576102e0905051610200525f6004905b806102205261022051600381116113055760051b6101a0015161022051600981116113055760051b6060015260010181811861069f5750506101406060f35b6356059ffb81186108185760243610611305576004358060a01c611305576101a052610280366101c0375f5463daf297b9610440526101a051610460526020610440602461045c845afa610734573d5f5f3e3d5ffd5b60203d1061130557610440518060a01c61130557610480526104809050516101c0526101c0516040526107686104406111d2565b61044051610300526101c051610440526101e051610460526102005161048052610220516104a052610240516104c052610260516104e05261028051610500526102a051610520526102c051610540526102e051610560526103005161058052610320516105a052610340516105c052610360516105e05261038051610600526103a051610620526103c051610640526103e051610660526104005161068052610420516106a052610280610440f35b6337951049811861083f5760243610611305576004358060a01c6113055760405260206040f35b63940494f1811861087a5760243610611305576004358060a01c611305576101405260206101405160405261087561016061115c565b610160f35b630a700c0881186109375760243610611305576004358060a01c611305576101e0526101e0516040526108ae610300610fb0565b61030080516102005260208101516102205260408101516102405260608101516102605260808101516102805260a08101516102a05260c08101516102c05260e08101516102e052505f6008905b806103005261030051600781116113055760051b61020001516109255750506020610300610935565b6001018181186108fc5750505f5ffd5bf35b6366d3966c81186109635760243610611305576004358060a01c61130557604052600360605260206060f35b63bdf475c381186109b75760243610611305576004358060a01c61130557610140526101405160405261099761016061115c565b61016051156109aa5760206101406109b5565b5f6101605260206101605bf35b635c9117418118610abf5760243610611305576004358060a01c611305576040526020806101c0525f5463977d9122606052604051608052602060606024607c845afa610a06573d5f5f3e3d5ffd5b60203d10611305576060518060a01c6113055760a05260a09050516306fdde0360c052608060c0600460dc845afa610a40573d5f5f3e3d5ffd5b60403d106113055760c05160c00160408151116113055780516020820181610180838360045afa5050806101605250506101609050816101c001815160208301602083018281848460045afa505050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506101c0f35b63688532aa8118610c6a5760243610611305576004358060a01c611305576040526102803660603760405163f446c1d06102e05260206102e060046102fc845afa610b0c573d5f5f3e3d5ffd5b60203d10611305576102e0905051606052604051630f529ba26102e05260206102e060046102fc845afa610b42573d5f5f3e3d5ffd5b60203d10611305576102e090505160805260405163b13739296102e05260206102e060046102fc845afa610b78573d5f5f3e3d5ffd5b60203d10611305576102e090505160a0526040516349fe9e776102e05260206102e060046102fc845afa610bae573d5f5f3e3d5ffd5b60203d10611305576102e090505160c0526040516372d4f0e26102e05260206102e060046102fc845afa610be4573d5f5f3e3d5ffd5b60203d10611305576102e090505160e05260405163083812e56102e05260206102e060046102fc845afa610c1a573d5f5f3e3d5ffd5b60203d10611305576102e09050516101005260405163662b62746102e05260206102e060046102fc845afa610c51573d5f5f3e3d5ffd5b60203d10611305576102e0905051610120526102806060f35b6359f4f3518118610ca75760243610611305576004358060a01c6113055761036052610100610360516101c052610ca2610380610f05565b610380f35b63a77576ef8118610ce35760243610611305576004358060a01c611305576101e0526101006101e051604052610cde610200610fb0565b610200f35b634cb088f18118610d205760243610611305576004358060a01c6113055761036052610100610360516101c052610d1b6103806110b1565b610380f35b63c5b7074a8118610d735760243610611305576004358060a01c61130557604052602060405163bb7b8b80606052602060606004607c845afa610d65573d5f5f3e3d5ffd5b60203d106113055760609050f35b63e4d332a98118610d9e5760243610611305576004358060a01c611305576040525f60605260206060f35b63619ea8068118610de35760243610611305576004358060a01c611305576101405261014051604052610dd261016061115c565b610160511515610180526020610180f35b63956aae3a8118610e1f5760205f5463956aae3a604052602060406004605c845afa610e11573d5f5f3e3d5ffd5b60203d106113055760409050f35b633a1d5d8e8118610e7757602436106113055760205f54633a1d5d8e604052600435606052602060406024605c845afa610e5b573d5f5f3e3d5ffd5b60203d10611305576040518060a01c6113055760805260809050f35b505b5f5ffd5b6101003660a0375f6003905b806101a0526101a051600281116113055760051b604001516101a051600781116113055760051b60a00152600101818118610e8957505060a051815260c051602082015260e05160408201526101005160608201526101205160808201526101405160a08201526101605160c08201526101805160e082015250565b5f546392e3cc2d6101e0526101c0516102005260606101e060246101fc845afa610f31573d5f5f3e3d5ffd5b60603d10611305576101e0905080516040526020810151606052604081015160805250610f5f610260610e7d565b610260805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b5f54639ac90d3d60c05260405160e052606060c0602460dc845afa610fd7573d5f5f3e3d5ffd5b60603d106113055760c0518060a01c611305576101405260e0518060a01c6113055761016052610100518060a01c6113055761018052610140905080516060526020810151608052604081015160a052506101003660c0375f6003905b806101c0526101c051600281116113055760051b606001516101c051600781116113055760051b60c0015260010181811861103457505060c051815260e05160208201526101005160408201526101205160608201526101405160808201526101605160a08201526101805160c08201526101a05160e082015250565b5f546352b515556101e0526101c0516102005260606101e060246101fc845afa6110dd573d5f5f3e3d5ffd5b60603d10611305576101e090508051604052602081015160605260408101516080525061110b610260610e7d565b610260805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b5f54639ac90d3d606052604051608052606060606024607c845afa611183573d5f5f3e3d5ffd5b60603d10611305576060518060a01c6113055760e0526080518060a01c611305576101005260a0518060a01c611305576101205260e0905051156111cb5760038152506111d0565b5f8152505b565b5f6060525f60c05260c080518060805250505f600460c0527f1e4274770000000000000000000000000000000000000000000000000000000060e05260c080516020820183610120018151815250508083019250505060405181610120015260208101905080610100526101005050602061018061010051610120732f50d538606fa9edd2b11e2446beb18c9d5846bb5afa6060523d602081183d602010021861016052610160805160208201805160a05250806080525050606051611298575f6112d9565b604051639c868ac060c052602060c0600460dc845afa6112ba573d5f5f3e3d5ffd5b60203d106113055760c0518060011c6113055761010052610100905051155b156112fd5760a05160805160200360031b1d80600f0b811861130557815250611303565b60058152505b565b5f80fda165767970657283000309000b

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

0000000000000000000000000c0e5f2ff0ff18a3be9b835635039256dc4b4963

-----Decoded View---------------
Arg [0] : _registry_address (address): 0x0c0e5f2fF0ff18a3be9b835635039256dC4B4963

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c0e5f2ff0ff18a3be9b835635039256dc4b4963


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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