POL Price: $0.717241 (-0.59%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add_registry_han...585953742024-06-25 16:16:22162 days ago1719332182IN
0x1FE2a06c...b37976369
0 POL0.0015400630.00897862
Add_registry_han...585953212024-06-25 16:14:30162 days ago1719332070IN
0x1FE2a06c...b37976369
0 POL0.0015400730.00918993
Add_registry_han...585953162024-06-25 16:14:20162 days ago1719332060IN
0x1FE2a06c...b37976369
0 POL0.001540130.00976543
Add_registry_han...585953112024-06-25 16:14:08162 days ago1719332048IN
0x1FE2a06c...b37976369
0 POL0.0015400730.00933728
Update_registry_...572273752024-05-21 15:51:22197 days ago1716306682IN
0x1FE2a06c...b37976369
0 POL0.0011461636.56131139
Add_registry_han...570802082024-05-17 18:43:08201 days ago1715971388IN
0x1FE2a06c...b37976369
0 POL0.001539630.00006991
Add_registry_han...570802052024-05-17 18:42:58201 days ago1715971378IN
0x1FE2a06c...b37976369
0 POL0.001539630.00006956
Add_registry_han...570802022024-05-17 18:42:52201 days ago1715971372IN
0x1FE2a06c...b37976369
0 POL0.002052630.00007634

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurveMetaRegistry

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# pragma version 0.3.10
"""
@title CurveMetaRegistry
"""

# ---- interfaces ---- #
interface AddressProvider:
    def admin() -> address: view


# registry and registry handlers are considered to be the same here.
# registry handlers are just wrapper contracts that simplify/fix underlying registries
# for integrating it into the Metaregistry.
interface RegistryHandler:
    def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: view
    def get_admin_balances(_pool: address) -> uint256[MAX_COINS]: view
    def get_balances(_pool: address) -> uint256[MAX_COINS]: view
    def get_base_pool(_pool: address) -> address: view
    def get_coins(_pool: address) -> address[MAX_COINS]: view
    def get_coin_indices(_pool: address, _from: address, _to: address) -> (int128, int128, bool): view
    def get_decimals(_pool: address) -> uint256[MAX_COINS]: view
    def get_fees(_pool: address) -> uint256[10]: view
    def get_lp_token(_pool: address) -> address: view
    def get_n_coins(_pool: address) -> uint256: view
    def get_n_underlying_coins(_pool: address) -> uint256: view
    def get_pool_asset_type(_pool: address) -> uint256: view
    def get_pool_from_lp_token(_lp_token: address) -> address: view
    def get_pool_name(_pool: address) -> String[64]: view
    def get_pool_params(_pool: address) -> uint256[20]: view
    def get_underlying_balances(_pool: address) -> uint256[MAX_COINS]: view
    def get_underlying_coins(_pool: address) -> address[MAX_COINS]: view
    def get_underlying_decimals(_pool: address) -> uint256[MAX_COINS]: view
    def is_meta(_pool: address) -> bool: view
    def is_registered(_pool: address) -> bool: view
    def pool_count() -> uint256: view
    def pool_list(_index: uint256) -> address: view
    def get_virtual_price_from_lp_token(_addr: address) -> uint256: view
    def base_registry() -> address: view

interface GaugeFactory:
    def get_gauge_from_lp_token(_lp_token: address) -> address: view


# ---- events ---- #
event CommitNewAdmin:
    deadline: indexed(uint256)
    admin: indexed(address)

event NewAdmin:
    admin: indexed(address)


# ---- constants ---- #
MAX_REGISTRIES: constant(uint256) = 10
MAX_COINS: constant(uint256) = 8
MAX_POOL_PARAMS: constant(uint256) = 20
ADMIN_ACTIONS_DELAY: constant(uint256) = 3 * 86400


# ---- storage variables ---- #
admin: public(address)
future_admin: public(address)

# get registry/registry_handler by index, index starts at 0:
get_registry: public(HashMap[uint256, address])
registry_length: public(uint256)
gauge_factory: public(GaugeFactory)
gauge_type: public(int128)


# ---- constructor ---- #
@external
def __init__(_gauge_factory: address, _gauge_type: int128):
    self.admin = msg.sender
    self.gauge_factory = GaugeFactory(_gauge_factory)
    self.gauge_type = _gauge_type


# ---- internal methods ---- #
@internal
def _update_single_registry(_index: uint256, _registry_handler: address):
    assert _index <= self.registry_length

    if _index == self.registry_length:
        self.registry_length += 1

    self.get_registry[_index] = _registry_handler


@internal
@view
def _get_pool_from_lp_token(_token: address) -> address:
    for i in range(MAX_REGISTRIES):
        if i == self.registry_length:
            break
        handler: address = self.get_registry[i]
        pool: address = RegistryHandler(handler).get_pool_from_lp_token(_token)
        if pool != empty(address):
            return pool
    return empty(address)


@internal
@view
def _get_registry_handlers_from_pool(_pool: address) -> address[MAX_REGISTRIES]:
    """
    @notice Get registry handler that handles the registry api for a pool
    @dev sometimes a factory pool can be registered in a manual registry
         because of this, we always take the last registry a pool is
         registered in and not the first, as manual registries are first
         and factories come later
    @param _pool address of the pool
    @return registry_handlers: address[MAX_REGISTRIES]
    """

    pool_registry_handler: address[MAX_REGISTRIES] = empty(address[MAX_REGISTRIES])
    c: uint256 = 0
    for i in range(MAX_REGISTRIES):

        if i == self.registry_length:
            break
        handler: address = self.get_registry[i]

        if RegistryHandler(handler).is_registered(_pool):
            pool_registry_handler[c] = handler
            c += 1

    if pool_registry_handler[0] == empty(address):
        raise "no registry"
    return pool_registry_handler


# ---- most used methods: Admin / DAO privileged methods ---- #
@external
def add_registry_handler(_registry_handler: address):
    """
    @notice Adds a registry from the address provider entry
    @param _registry_handler Address of the handler contract
    """
    assert msg.sender == self.admin  # dev: only admin

    self._update_single_registry(self.registry_length, _registry_handler)


@external
def update_registry_handler(_index: uint256, _registry_handler: address):
    """
    @notice Updates the contract used to handle a registry
    @param _index The index of the registry in get_registry
    @param _registry_handler Address of the new handler contract
    """
    assert msg.sender == self.admin  # dev: only admin
    assert _index < self.registry_length

    self._update_single_registry(_index, _registry_handler)


@external
def update_gauge_data(_gauge_factory: address, _gauge_type: int128):
    assert msg.sender == self.admin
    self.gauge_factory = GaugeFactory(_gauge_factory)
    self.gauge_type = _gauge_type


# ---- view methods (API) of the contract ---- #


@external
@view
def get_registry_handlers_from_pool(_pool: address) -> address[MAX_REGISTRIES]:
    """
    @notice Get the registry handlers associated with a pool
    @param _pool Pool address
    @return List of registry handlers
    """
    return self._get_registry_handlers_from_pool(_pool)


@external
@view
def get_base_registry(registry_handler: address) -> address:
    """
    @notice Get the registry associated with a registry handler
    @param registry_handler Registry Handler address
    @return Address of base registry
    """
    return RegistryHandler(registry_handler).base_registry()


@view
@external
def find_pool_for_coins(
    _from: address, _to: address, i: uint256 = 0
) -> address:
    """
    @notice Find the ith available pool containing the input pair
    @param _from Address of coin to be sent
    @param _to Address of coin to be received
    @param i Index of the pool to return
    @return Pool address
    """
    pools_found: uint256 = 0
    pool: address = empty(address)
    registry: address = empty(address)

    for registry_index in range(MAX_REGISTRIES):

        registry = self.get_registry[registry_index]
        if registry == empty(address):
            break

        for j in range(0, 65536):

            pool = RegistryHandler(registry).find_pool_for_coins(_from, _to, j)
            if pool == empty(address):
                break
            pools_found += 1
            if pools_found > i:
                return pool

    return pool


@view
@external
def find_pools_for_coins(_from: address, _to: address) -> DynArray[address, 1000]:
    """
    @notice Find all pools that contain the input pair
    @param _from Address of coin to be sent
    @param _to Address of coin to be received
    @return Pool addresses
    """
    pools_found: DynArray[address, 1000]= empty(DynArray[address, 1000])
    pool: address = empty(address)
    registry: address = empty(address)

    for registry_index in range(MAX_REGISTRIES):

        registry = self.get_registry[registry_index]
        if registry == empty(address):
            break

        for j in range(0, 65536):

            pool = RegistryHandler(registry).find_pool_for_coins(_from, _to, j)
            if pool == empty(address):
                break
            pools_found.append(pool)

    return pools_found


@external
@view
def get_admin_balances(_pool: address, _handler_id: uint256 = 0) -> uint256[MAX_COINS]:
    """
    @notice Get the current admin balances (uncollected fees) for a pool
    @dev _handler_id < 1 if pool is registry in one handler, more than 0 otherwise
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return List of uint256 admin balances
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_admin_balances(_pool)


@external
@view
def get_balances(_pool: address, _handler_id: uint256 = 0)  -> uint256[MAX_COINS]:
    """
    @notice Get balances for each coin within a pool
    @dev For metapools, these are the wrapped coin balances
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return uint256 list of balances
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_balances(_pool)


@external
@view
def get_base_pool(_pool: address, _handler_id: uint256 = 0) -> address:
    """
    @notice Get the base pool for a given factory metapool
    @dev Will return empty(address) if pool is not a metapool
    @param _pool Metapool address
    @param _handler_id id of registry handler
    @return Address of base pool
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_base_pool(_pool)


@view
@external
def get_coin_indices(_pool: address, _from: address, _to: address, _handler_id: uint256 = 0) -> (int128, int128, bool):
    """
    @notice Convert coin addresses to indices for use with pool methods
    @param _pool Pool address
    @param _from Coin address to be used as `i` within a pool
    @param _to Coin address to be used as `j` within a pool
    @param _handler_id id of registry handler
    @return from index, to index, is the market underlying ?
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_coin_indices(_pool, _from, _to)


@external
@view
def get_coins(_pool: address, _handler_id: uint256 = 0) -> address[MAX_COINS]:
    """
    @notice Get the coins within a pool
    @dev For metapools, these are the wrapped coin addresses
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return List of coin addresses
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_coins(_pool)


@external
@view
def get_decimals(_pool: address, _handler_id: uint256 = 0) -> uint256[MAX_COINS]:
    """
    @notice Get decimal places for each coin within a pool
    @dev For metapools, these are the wrapped coin decimal places
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return uint256 list of decimals
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_decimals(_pool)


@external
@view
def get_fees(_pool: address, _handler_id: uint256 = 0) -> uint256[10]:
    """
    @notice Get pool fees
    @dev Fees are expressed as integers
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return Pool fee as uint256 with 1e10 precision
            Admin fee as 1e10 percentage of pool fee
            Mid fee
            Out fee
            6 blank spots for future use cases
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_fees(_pool)


@external
@view
def get_gauge(_pool: address, gauge_idx: uint256 = 0, _handler_id: uint256 = 0) -> address:
    """
    @notice Get a single liquidity gauge contract associated with a pool
    @param _pool Pool address
    @param gauge_idx Index of gauge to return
    @param _handler_id id of registry handler
    @return Address of gauge
    """
    lp_token: address = RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_lp_token(_pool)
    return self.gauge_factory.get_gauge_from_lp_token(lp_token)


@external
@view
def get_gauge_type(_pool: address, gauge_idx: uint256 = 0, _handler_id: uint256 = 0) -> int128:
    """
    @notice Get gauge_type of a single liquidity gauge contract associated with a pool
    @param _pool Pool address
    @param gauge_idx Index of gauge to return
    @param _handler_id id of registry handler
    @return Address of gauge
    """
    return self.gauge_type


@external
@view
def get_lp_token(_pool: address, _handler_id: uint256 = 0) -> address:
    """
    @notice Get the address of the LP token of a pool
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return Address of the LP token
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_lp_token(_pool)


@external
@view
def get_n_coins(_pool: address, _handler_id: uint256 = 0) -> uint256:
    """
    @notice Get the number of coins in a pool
    @dev For metapools, it is tokens + wrapping/lending token (no underlying)
    @param _pool Pool address
    @return Number of coins
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_n_coins(_pool)


@external
@view
def get_n_underlying_coins(_pool: address, _handler_id: uint256 = 0) -> uint256:
    """
    @notice Get the number of underlying coins in a pool
    @dev For non metapools, returns the same as get_n_coins
    @param _pool Pool address
    @return Number of coins
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_n_underlying_coins(_pool)


@external
@view
def get_pool_asset_type(_pool: address, _handler_id: uint256 = 0) -> uint256:
    """
    @notice Query the asset type of `_pool`
    @param _pool Pool Address
    @return The asset type as an unstripped string
    @dev 0 : USD, 1: ETH, 2: BTC, 3: Other, 4: CryptoSwap
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_pool_asset_type(_pool)


@external
@view
def get_pool_from_lp_token(_token: address, _handler_id: uint256 = 0) -> address:
    """
    @notice Get the pool associated with an LP token
    @param _token LP token address
    @return Pool address
    """
    return self._get_pool_from_lp_token(_token)


@external
@view
def get_pool_params(_pool: address, _handler_id: uint256 = 0) -> uint256[MAX_POOL_PARAMS]:
    """
    @notice Get the parameters of a pool
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return Pool parameters
    """
    registry_handler: address = self._get_registry_handlers_from_pool(_pool)[_handler_id]
    return RegistryHandler(registry_handler).get_pool_params(_pool)


@external
@view
def get_pool_name(_pool: address, _handler_id: uint256 = 0) -> String[64]:
    """
    @notice Get the given name for a pool
    @param _pool Pool address
    @return The name of a pool
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_pool_name(_pool)


@external
@view
def get_underlying_balances(_pool: address, _handler_id: uint256 = 0) -> uint256[MAX_COINS]:
    """
    @notice Get balances for each underlying coin within a pool
    @dev For non metapools, returns the same value as `get_balances`
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return uint256 List of underlyingbalances
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_underlying_balances(_pool)


@external
@view
def get_underlying_coins(_pool: address, _handler_id: uint256 = 0) -> address[MAX_COINS]:
    """
    @notice Get the underlying coins within a pool
    @dev For non metapools, returns the same value as `get_coins`
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return List of coin addresses
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_underlying_coins(_pool)


@external
@view
def get_underlying_decimals(_pool: address, _handler_id: uint256 = 0) -> uint256[MAX_COINS]:
    """
    @notice Get decimal places for each underlying coin within a pool
    @dev For non metapools, returns the same value as `get_decimals`
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return uint256 list of decimals
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).get_underlying_decimals(_pool)


@external
@view
def get_virtual_price_from_lp_token(_token: address, _handler_id: uint256 = 0) -> uint256:
    """
    @notice Get the virtual price of a pool LP token
    @param _token LP token address
    @param _handler_id id of registry handler
    @return uint256 Virtual price
    """
    pool: address = self._get_pool_from_lp_token(_token)
    registry_handler: address = self._get_registry_handlers_from_pool(pool)[_handler_id]
    return RegistryHandler(registry_handler).get_virtual_price_from_lp_token(_token)


@external
@view
def is_meta(_pool: address, _handler_id: uint256 = 0) -> bool:
    """
    @notice Verify `_pool` is a metapool
    @param _pool Pool address
    @param _handler_id id of registry handler
    @return True if `_pool` is a metapool
    """
    return RegistryHandler(self._get_registry_handlers_from_pool(_pool)[_handler_id]).is_meta(_pool)


@external
@view
def is_registered(_pool: address, _handler_id: uint256 = 0) -> bool:
    """
    @notice Check if a pool is in the metaregistry using get_n_coins
    @param _pool The address of the pool
    @param _handler_id id of registry handler
    @return A bool corresponding to whether the pool belongs or not
    """
    return self._get_registry_handlers_from_pool(_pool)[_handler_id] != empty(address)


@external
@view
def pool_count() -> uint256:
    """
    @notice Return the total number of pools tracked by the metaregistry
    @return uint256 The number of pools in the metaregistry
    """
    total_pools: uint256 = 0
    for i in range(MAX_REGISTRIES):
        if i == self.registry_length:
            break
        handler: address = self.get_registry[i]
        total_pools += RegistryHandler(handler).pool_count()
    return total_pools


@external
@view
def pool_list(_index: uint256) -> address:
    """
    @notice Return the pool at a given index in the metaregistry
    @param _index The index of the pool in the metaregistry
    @return The address of the pool at the given index
    """
    pools_skip: uint256 = 0
    for i in range(MAX_REGISTRIES):
        if i == self.registry_length:
            break
        handler: address = self.get_registry[i]
        count: uint256 = RegistryHandler(handler).pool_count()
        if _index - pools_skip < count:
            return RegistryHandler(handler).pool_list(_index - pools_skip)
        pools_skip += count
    return empty(address)


@external
def commit_transfer_ownership(_addr: address):
    """
    @notice Transfer ownership of this contract to `addr`
    @param _addr Address of the new owner
    """
    assert msg.sender == self.admin  # dev: admin only
    self.future_admin = _addr


@external
def accept_transfer_ownership():
    """
    @notice Accept a pending ownership transfer
    @dev Only callable by the new owner
    """
    _admin: address = self.future_admin
    assert msg.sender == _admin  # dev: future admin only

    self.admin = _admin
    self.future_admin = empty(address)

Contract Security Audit

Contract ABI

[{"name":"CommitNewAdmin","inputs":[{"name":"deadline","type":"uint256","indexed":true},{"name":"admin","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"name":"admin","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_gauge_factory","type":"address"},{"name":"_gauge_type","type":"int128"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_registry_handler","inputs":[{"name":"_registry_handler","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_registry_handler","inputs":[{"name":"_index","type":"uint256"},{"name":"_registry_handler","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_gauge_data","inputs":[{"name":"_gauge_factory","type":"address"},{"name":"_gauge_type","type":"int128"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_registry_handlers_from_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[10]"}]},{"stateMutability":"view","type":"function","name":"get_base_registry","inputs":[{"name":"registry_handler","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"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":"find_pools_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"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_admin_balances","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_balances","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_base_pool","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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":"int128"},{"name":"","type":"int128"},{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"int128"},{"name":"","type":"int128"},{"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_coins","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_decimals","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_fees","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256[10]"}]},{"stateMutability":"view","type":"function","name":"get_gauge","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_gauge","inputs":[{"name":"_pool","type":"address"},{"name":"gauge_idx","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_gauge","inputs":[{"name":"_pool","type":"address"},{"name":"gauge_idx","type":"uint256"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_gauge_type","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"get_gauge_type","inputs":[{"name":"_pool","type":"address"},{"name":"gauge_idx","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"get_gauge_type","inputs":[{"name":"_pool","type":"address"},{"name":"gauge_idx","type":"uint256"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_coins","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_n_underlying_coins","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_asset_type","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"_token","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_pool_params","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[20]"}]},{"stateMutability":"view","type":"function","name":"get_pool_params","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256[20]"}]},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"outputs":[{"name":"","type":"string"}]},{"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_balances","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_coins","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_underlying_decimals","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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":"get_virtual_price_from_lp_token","inputs":[{"name":"_token","type":"address"},{"name":"_handler_id","type":"uint256"}],"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_meta","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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":"is_registered","inputs":[{"name":"_pool","type":"address"},{"name":"_handler_id","type":"uint256"}],"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":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_registry","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"registry_length","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauge_type","inputs":[],"outputs":[{"name":"","type":"int128"}]}]

3461004f576020611bbe5f395f518060a01c61004f576040526020611bde5f395f5180600f0b811861004f57606052335f55604051600455606051600555611b5661005361000039611b56610000f35b5f80fd5f3560e01c6002603b820660011b611ae001601e395f51565b63f851a44081186100335734611adc575f5460405260206040f35b633a1d5d8e81186118c157602436103417611adc575f6040525f600a905b806060526003546060511861006557610146565b60026060516020525f5260405f205460805260805163956aae3a60c052602060c0600460dc845afa610099573d5f5f3e3d5ffd5b60203d10611adc5760c090505160a05260a051600435604051808203828111611adc579050905010156101245750506020608051633a1d5d8e60c052600435604051808203828111611adc579050905060e052602060c0602460dc845afa610103573d5f5f3e3d5ffd5b60203d10611adc5760c0518060a01c611adc57610100526101009050610151565b60405160a051808201828110611adc5790509050604052600101818118610051575b50505f606052602060605bf36118c1565b6317f7182a81186101735734611adc5760015460405260206040f35b63e8980c6e81186118c15734611adc5760045460405260206040f36118c1565b63913d9b4d81186101c057602436103417611adc5760026004356020525f5260405f205460405260206040f35b63c9c4f3ec81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526101fe6102a061199f565b6102a06102805160098111611adc5760051b810190505115156103e05260206103e0f36118c1565b63083297d281186102425734611adc5760035460405260206040f35b63eb85226d811861026157606436103417611adc575f6102c0526109d9565b63e5ea47b881186118c15734611adc576001546040526040513318611adc576040515f555f600155006118c1565b6352b7e8a181186102ab5734611adc5760055460405260206040f35b6366d3966c81186118c157602436103417611adc575f6102805261151a566118c1565b6322f595c8811861030f57602436103417611adc576004358060a01c611adc576080525f543318611adc5760035460405260805160605261030d6118c5565b005b636f20d6dd81186118c157602436103417611adc575f61028052610c38566118c1565b630dbdc9ff811861037f57604436103417611adc576024358060a01c611adc576080525f543318611adc576003546004351015611adc5760043560405260805160605261037d6118c5565b005b635c91174181186118c157602436103417611adc575f6102805261166c566118c1565b63bbfbf4ac81186103eb57604436103417611adc576004358060a01c611adc5760405260243580600f0b8118611adc576060525f543318611adc57604051600455606051600555005b6384e1710d811861044e57602436103417611adc576004358060a01c611adc57604052602060405163b229777c606052602060606004607c845afa610432573d5f5f3e3d5ffd5b60203d10611adc576060518060a01c611adc5760a05260a09050f35b63622d64f481186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526101006102605160405261048f6102a061199f565b6102a06102805160098111611adc5760051b8101905051634cb088f16103e05261026051610400526101006103e060246103fc845afa6104d1573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f36118c1565b63308d1b6d81186118c157602436103417611adc576004358060a01c611adc57610260526101406102605160405261051e61028061199f565b610280f36118c1565b63a87df06c811861054557604436103417611adc575f608052610605565b63a64485a181186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020610260516040526105856102a061199f565b6102a06102805160098111611adc5760051b810190505163e4d332a96103e052610260516104005260206103e060246103fc845afa6105c6573d5f5f3e3d5ffd5b60203d10611adc576103e0518060011c611adc57610420526104209050f36118c1565b636982eb0b811861071157606436103417611adc576044356080525b6004358060a01c611adc576040526024358060a01c611adc5760605260603660a0375f600a905b80610100526002610100516020525f5260405f205460e05260e05161065057610708565b5f62010000905b806101205260e051636982eb0b610140526040516101605260605161018052610120516101a0526020610140606461015c845afa610697573d5f5f3e3d5ffd5b60203d10611adc57610140518060a01c611adc576101c0526101c090505160c05260c0516106c4576106fb565b60a05160018101818110611adc57905060a05260805160a05111156106f05750505050602060c061070f565b600101818118610657575b505060010181811861062c575b5050602060c05bf35b634cb088f181186118c157602436103417611adc575f6102805261046b566118c1565b63a064072b81186118c157604436103417611adc576004358060a01c611adc576040526024358060a01c611adc576060525f6080525f617da0525f617dc0525f600a905b80617de0526002617de0516020525f5260405f2054617dc052617dc05161079e5761084d565b5f62010000905b80617e0052617dc051636982eb0b617e2052604051617e4052606051617e6052617e0051617e80526020617e206064617e3c845afa6107e6573d5f5f3e3d5ffd5b60203d10611adc57617e20518060a01c611adc57617ea052617ea0905051617da052617da05161081557610840565b6080516103e78111611adc57617da0518160051b60a0015260018101608052506001018181186107a5575b5050600101818118610778575b5050602080617de05280617de0015f6080518083528060051b5f826103e88111611adc57801561089657905b8060051b60a001518160051b602088010152600101818118610879575b50508201602001915050905081019050617de0f36118c1565b63c11e45b881186108ce57602436103417611adc575f61028052610946565b637c51db5581186108f257604436103417611adc576024356060525f608052611252565b636b441a4081186118c157602436103417611adc576004358060a01c611adc576040525f543318611adc57604051600155006118c1565b63c0bf4cbf81186109bc57604436103417611adc57602435610280525b6004358060a01c611adc57610260526101006102605160405261096a6102a061199f565b6102a06102805160098111611adc5760051b810190505163c11e45b86103e05261026051610400526101006103e060246103fc845afa6109ac573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b6363fb3ddb81186118c157608436103417611adc576064356102c0525b6004358060a01c611adc57610260526024358060a01c611adc57610280526044358060a01c611adc576102a052606061026051604052610a1a6102e061199f565b6102e06102c05160098111611adc5760051b810190505163eb85226d61042052610260516104405261028051610460526102a051610480526060610420606461043c845afa610a6b573d5f5f3e3d5ffd5b60603d10611adc576104205180600f0b8118611adc576104a0526104405180600f0b8118611adc576104c052610460518060011c611adc576104e0526104a09050f36118c1565b6392e3cc2d8118610ad157602436103417611adc575f61028052610b11565b639ac90d3d81186118c157602436103417611adc575f61028052610cd8566118c1565b63aa85169c8118610b8757604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610b356102a061199f565b6102a06102805160098111611adc5760051b81019050516392e3cc2d6103e05261026051610400526101006103e060246103fc845afa610b77573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b6311d8127981186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052602061026051604052610bc76102a061199f565b6102a06102805160098111611adc5760051b810190505163940494f16103e052610260516104005260206103e060246103fc845afa610c08573d5f5f3e3d5ffd5b60203d10611adc576103e09050f36118c1565b63a54e3ade8118610cbb57604436103417611adc57602435610280525b6004358060a01c611adc5761026052602061026051604052610c5b6102a061199f565b6102a06102805160098111611adc5760051b8101905051636f20d6dd6103e052610260516104005260206103e060246103fc845afa610c9c573d5f5f3e3d5ffd5b60203d10611adc576103e0518060a01c611adc57610420526104209050f35b636ebe51fc81186118c157604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610cfc6102a061199f565b6102a06102805160098111611adc5760051b8101905051639ac90d3d6103e05261026051610400526101006103e060246103fc845afa610d3e573d5f5f3e3d5ffd5b6101003d10611adc576103e0518060a01c611adc5761050052610400518060a01c611adc5761052052610420518060a01c611adc5761054052610440518060a01c611adc5761056052610460518060a01c611adc5761058052610480518060a01c611adc576105a0526104a0518060a01c611adc576105c0526104c0518060a01c611adc576105e0526105009050f36118c1565b6352b515558118610df157602436103417611adc575f61028052610e52565b63daf297b98118610e1257602436103417611adc57604036610280376110a8565b63bdf475c381186118c157602436103417611adc575f61014052611034566118c1565b63403f502f8118610ec857604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610e766102a061199f565b6102a06102805160098111611adc5760051b81019050516352b515556103e05261026051610400526101006103e060246103fc845afa610eb8573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b63956aae3a81186118c15734611adc575f6040525f600a905b8060605260035460605118610ef557610f55565b60026060516020525f5260405f205460805260405160805163956aae3a60a052602060a0600460bc845afa610f2c573d5f5f3e3d5ffd5b60203d10611adc5760a0905051808201828110611adc5790509050604052600101818118610ee1575b505060206040f36118c1565b637cdb72b081186118c157602436103417611adc575f61028052610fa1566118c1565b630ed5a427811861101757604436103417611adc57602435610280525b6004358060a01c611adc576102605261014061026051604052610fc56102a061199f565b6102a06102805160098111611adc5760051b8101905051637cdb72b06103e05261026051610400526101406103e060246103fc845afa611007573d5f5f3e3d5ffd5b6101403d10611adc576103e09050f35b6336678b8081186118c157604436103417611adc57602435610140525b6004358060a01c611adc5761012052602061012051604052611057610160611903565b610160f36118c1565b63e408122081186118c157604436103417611adc57602435610280525f6102a0526110a8566118c1565b63773fb7e381186118c157606436103417611adc5760406024610280375b6004358060a01c611adc5761026052610260516040526110c96102e061199f565b6102e06102a05160098111611adc5760051b810190505163379510496104205261026051610440526020610420602461043c845afa61110a573d5f5f3e3d5ffd5b60203d10611adc57610420518060a01c611adc57610460526104609050516102c0526020600454635d95c65e6102e0526102c0516103005260206102e060246102fc845afa61115b573d5f5f3e3d5ffd5b60203d10611adc576102e0518060a01c611adc57610320526103209050f36118c1565b6325fa5d13811861119e57602436103417611adc57604036606037611252565b63876112e681186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610100610260516040526111df6102a061199f565b6102a06102805160098111611adc5760051b81019050516359f4f3516103e05261026051610400526101006103e060246103fc845afa611221573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f36118c1565b63f8b661e281186118c157606436103417611adc57604060246060375b6004358060a01c611adc5760405260055460a052602060a0f36118c1565b6337951049811861128f57602436103417611adc575f61028052611381565b630a700c0881186112ae57602436103417611adc575f61028052611467565b634460f66f81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526112ec6102c0611903565b6102c0516102a0526102a0516040526113066102e061199f565b6102e06102805160098111611adc5760051b81019050516102c05260206102c05163c5b7074a6102e052610260516103005260206102e060246102fc845afa611351573d5f5f3e3d5ffd5b60203d10611adc576102e09050f36118c1565b630881715f81186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020610260516040526113a46102a061199f565b6102a06102805160098111611adc5760051b810190505163379510496103e052610260516104005260206103e060246103fc845afa6113e5573d5f5f3e3d5ffd5b60203d10611adc576103e0518060a01c611adc57610420526104209050f36118c1565b63940494f1811861142757602436103417611adc575f61028052610ba4565b63c5b7074a81186118c157602436103417611adc575f610280526112cb566118c1565b63decdf68f81186114da57604436103417611adc57602435610280525b6004358060a01c611adc576102605260206102605160405261148a6102a061199f565b6102a06102805160098111611adc5760051b8101905051630a700c086103e052610260516104005260206103e060246103fc845afa6114cb573d5f5f3e3d5ffd5b60203d10611adc576103e09050f35b63a77576ef81186118c157602436103417611adc575f610280526117a8566118c1565b6390d1dd2d811861158d57604436103417611adc57602435610280525b6004358060a01c611adc576102605260206102605160405261153d6102a061199f565b6102a06102805160098111611adc5760051b81019050516366d3966c6103e052610260516104005260206103e060246103fc845afa61157e573d5f5f3e3d5ffd5b60203d10611adc576103e09050f35b637a65d2dd81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526115cb6102c061199f565b6102c06102805160098111611adc5760051b81019050516102a0526102806102a05163688532aa6102c052610260516102e0526102806102c060246102dc845afa611618573d5f5f3e3d5ffd5b6102803d10611adc576102c09050f36118c1565b63688532aa81186118c157602436103417611adc575f610280526115aa566118c1565b6392234f4581186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020806104e052610260516040526116946102a061199f565b6102a06102805160098111611adc5760051b8101905051635c9117416103e052610260516104005260806103e060246103fc845afa6116d5573d5f5f3e3d5ffd5b60403d10611adc576103e0516103e0016040815111611adc57602081510180610480828460045afa5050506104809050816104e00160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506104e0f36118c1565b6359f4f351811861176857602436103417611adc575f610280526111bb565b63619ea80681186118c157602436103417611adc575f610280526101dd566118c1565b632fc90bcf81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610100610260516040526117cc6102a061199f565b6102a06102805160098111611adc5760051b810190505163a77576ef6103e05261026051610400526101006103e060246103fc845afa61180e573d5f5f3e3d5ffd5b6101003d10611adc576103e0518060a01c611adc5761050052610400518060a01c611adc5761052052610420518060a01c611adc5761054052610440518060a01c611adc5761056052610460518060a01c611adc5761058052610480518060a01c611adc576105a0526104a0518060a01c611adc576105c0526104c0518060a01c611adc576105e0526105009050f36118c1565b63e4d332a981186118c157602436103417611adc575f61028052610562565b5f5ffd5b60035460405111611adc57600354604051186118ef5760035460018101818110611adc5790506003555b60605160026040516020525f5260405f2055565b5f600a905b806060526003546060511861191c57611996565b60026060516020525f5260405f205460805260805163bdf475c360c05260405160e052602060c0602460dc845afa611956573d5f5f3e3d5ffd5b60203d10611adc5760c0518060a01c611adc576101005261010090505160a05260a0511561198b5760a051835250505061199d565b600101818118611908575b50505f8152505b565b610160366060375f600a905b806101c0526003546101c051186119c157611a5d565b60026101c0516020525f5260405f20546101e0526101e05163619ea80661020052604051610220526020610200602461021c845afa611a02573d5f5f3e3d5ffd5b60203d10611adc57610200518060011c611adc576102405261024090505115611a52576101e0516101a05160098111611adc5760051b606001526101a05160018101818110611adc5790506101a0525b6001018181186119ab575b5050606051611acb57600b6101c0527f6e6f2072656769737472790000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b61014081610140606060045afa5050565b5f80fd0e3518c118c114fd015702ce18c10c1b106018c1140818c118c1162c136403a218c118c105270dd2144a18c118c108af04e5019318c11270022605e90ab2033218c118c118a2108a18c10f840af418c118c1028f117e123518c118c1174918c10929178b164f18c118c118c118c10f61001818c1073484191b5681187600a16576797065728300030a0015000000000000000000000000abc000d88f23bb45525e447528dbf656a9d55bf50000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x5f3560e01c6002603b820660011b611ae001601e395f51565b63f851a44081186100335734611adc575f5460405260206040f35b633a1d5d8e81186118c157602436103417611adc575f6040525f600a905b806060526003546060511861006557610146565b60026060516020525f5260405f205460805260805163956aae3a60c052602060c0600460dc845afa610099573d5f5f3e3d5ffd5b60203d10611adc5760c090505160a05260a051600435604051808203828111611adc579050905010156101245750506020608051633a1d5d8e60c052600435604051808203828111611adc579050905060e052602060c0602460dc845afa610103573d5f5f3e3d5ffd5b60203d10611adc5760c0518060a01c611adc57610100526101009050610151565b60405160a051808201828110611adc5790509050604052600101818118610051575b50505f606052602060605bf36118c1565b6317f7182a81186101735734611adc5760015460405260206040f35b63e8980c6e81186118c15734611adc5760045460405260206040f36118c1565b63913d9b4d81186101c057602436103417611adc5760026004356020525f5260405f205460405260206040f35b63c9c4f3ec81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526101fe6102a061199f565b6102a06102805160098111611adc5760051b810190505115156103e05260206103e0f36118c1565b63083297d281186102425734611adc5760035460405260206040f35b63eb85226d811861026157606436103417611adc575f6102c0526109d9565b63e5ea47b881186118c15734611adc576001546040526040513318611adc576040515f555f600155006118c1565b6352b7e8a181186102ab5734611adc5760055460405260206040f35b6366d3966c81186118c157602436103417611adc575f6102805261151a566118c1565b6322f595c8811861030f57602436103417611adc576004358060a01c611adc576080525f543318611adc5760035460405260805160605261030d6118c5565b005b636f20d6dd81186118c157602436103417611adc575f61028052610c38566118c1565b630dbdc9ff811861037f57604436103417611adc576024358060a01c611adc576080525f543318611adc576003546004351015611adc5760043560405260805160605261037d6118c5565b005b635c91174181186118c157602436103417611adc575f6102805261166c566118c1565b63bbfbf4ac81186103eb57604436103417611adc576004358060a01c611adc5760405260243580600f0b8118611adc576060525f543318611adc57604051600455606051600555005b6384e1710d811861044e57602436103417611adc576004358060a01c611adc57604052602060405163b229777c606052602060606004607c845afa610432573d5f5f3e3d5ffd5b60203d10611adc576060518060a01c611adc5760a05260a09050f35b63622d64f481186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526101006102605160405261048f6102a061199f565b6102a06102805160098111611adc5760051b8101905051634cb088f16103e05261026051610400526101006103e060246103fc845afa6104d1573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f36118c1565b63308d1b6d81186118c157602436103417611adc576004358060a01c611adc57610260526101406102605160405261051e61028061199f565b610280f36118c1565b63a87df06c811861054557604436103417611adc575f608052610605565b63a64485a181186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020610260516040526105856102a061199f565b6102a06102805160098111611adc5760051b810190505163e4d332a96103e052610260516104005260206103e060246103fc845afa6105c6573d5f5f3e3d5ffd5b60203d10611adc576103e0518060011c611adc57610420526104209050f36118c1565b636982eb0b811861071157606436103417611adc576044356080525b6004358060a01c611adc576040526024358060a01c611adc5760605260603660a0375f600a905b80610100526002610100516020525f5260405f205460e05260e05161065057610708565b5f62010000905b806101205260e051636982eb0b610140526040516101605260605161018052610120516101a0526020610140606461015c845afa610697573d5f5f3e3d5ffd5b60203d10611adc57610140518060a01c611adc576101c0526101c090505160c05260c0516106c4576106fb565b60a05160018101818110611adc57905060a05260805160a05111156106f05750505050602060c061070f565b600101818118610657575b505060010181811861062c575b5050602060c05bf35b634cb088f181186118c157602436103417611adc575f6102805261046b566118c1565b63a064072b81186118c157604436103417611adc576004358060a01c611adc576040526024358060a01c611adc576060525f6080525f617da0525f617dc0525f600a905b80617de0526002617de0516020525f5260405f2054617dc052617dc05161079e5761084d565b5f62010000905b80617e0052617dc051636982eb0b617e2052604051617e4052606051617e6052617e0051617e80526020617e206064617e3c845afa6107e6573d5f5f3e3d5ffd5b60203d10611adc57617e20518060a01c611adc57617ea052617ea0905051617da052617da05161081557610840565b6080516103e78111611adc57617da0518160051b60a0015260018101608052506001018181186107a5575b5050600101818118610778575b5050602080617de05280617de0015f6080518083528060051b5f826103e88111611adc57801561089657905b8060051b60a001518160051b602088010152600101818118610879575b50508201602001915050905081019050617de0f36118c1565b63c11e45b881186108ce57602436103417611adc575f61028052610946565b637c51db5581186108f257604436103417611adc576024356060525f608052611252565b636b441a4081186118c157602436103417611adc576004358060a01c611adc576040525f543318611adc57604051600155006118c1565b63c0bf4cbf81186109bc57604436103417611adc57602435610280525b6004358060a01c611adc57610260526101006102605160405261096a6102a061199f565b6102a06102805160098111611adc5760051b810190505163c11e45b86103e05261026051610400526101006103e060246103fc845afa6109ac573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b6363fb3ddb81186118c157608436103417611adc576064356102c0525b6004358060a01c611adc57610260526024358060a01c611adc57610280526044358060a01c611adc576102a052606061026051604052610a1a6102e061199f565b6102e06102c05160098111611adc5760051b810190505163eb85226d61042052610260516104405261028051610460526102a051610480526060610420606461043c845afa610a6b573d5f5f3e3d5ffd5b60603d10611adc576104205180600f0b8118611adc576104a0526104405180600f0b8118611adc576104c052610460518060011c611adc576104e0526104a09050f36118c1565b6392e3cc2d8118610ad157602436103417611adc575f61028052610b11565b639ac90d3d81186118c157602436103417611adc575f61028052610cd8566118c1565b63aa85169c8118610b8757604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610b356102a061199f565b6102a06102805160098111611adc5760051b81019050516392e3cc2d6103e05261026051610400526101006103e060246103fc845afa610b77573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b6311d8127981186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052602061026051604052610bc76102a061199f565b6102a06102805160098111611adc5760051b810190505163940494f16103e052610260516104005260206103e060246103fc845afa610c08573d5f5f3e3d5ffd5b60203d10611adc576103e09050f36118c1565b63a54e3ade8118610cbb57604436103417611adc57602435610280525b6004358060a01c611adc5761026052602061026051604052610c5b6102a061199f565b6102a06102805160098111611adc5760051b8101905051636f20d6dd6103e052610260516104005260206103e060246103fc845afa610c9c573d5f5f3e3d5ffd5b60203d10611adc576103e0518060a01c611adc57610420526104209050f35b636ebe51fc81186118c157604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610cfc6102a061199f565b6102a06102805160098111611adc5760051b8101905051639ac90d3d6103e05261026051610400526101006103e060246103fc845afa610d3e573d5f5f3e3d5ffd5b6101003d10611adc576103e0518060a01c611adc5761050052610400518060a01c611adc5761052052610420518060a01c611adc5761054052610440518060a01c611adc5761056052610460518060a01c611adc5761058052610480518060a01c611adc576105a0526104a0518060a01c611adc576105c0526104c0518060a01c611adc576105e0526105009050f36118c1565b6352b515558118610df157602436103417611adc575f61028052610e52565b63daf297b98118610e1257602436103417611adc57604036610280376110a8565b63bdf475c381186118c157602436103417611adc575f61014052611034566118c1565b63403f502f8118610ec857604436103417611adc57602435610280525b6004358060a01c611adc576102605261010061026051604052610e766102a061199f565b6102a06102805160098111611adc5760051b81019050516352b515556103e05261026051610400526101006103e060246103fc845afa610eb8573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f35b63956aae3a81186118c15734611adc575f6040525f600a905b8060605260035460605118610ef557610f55565b60026060516020525f5260405f205460805260405160805163956aae3a60a052602060a0600460bc845afa610f2c573d5f5f3e3d5ffd5b60203d10611adc5760a0905051808201828110611adc5790509050604052600101818118610ee1575b505060206040f36118c1565b637cdb72b081186118c157602436103417611adc575f61028052610fa1566118c1565b630ed5a427811861101757604436103417611adc57602435610280525b6004358060a01c611adc576102605261014061026051604052610fc56102a061199f565b6102a06102805160098111611adc5760051b8101905051637cdb72b06103e05261026051610400526101406103e060246103fc845afa611007573d5f5f3e3d5ffd5b6101403d10611adc576103e09050f35b6336678b8081186118c157604436103417611adc57602435610140525b6004358060a01c611adc5761012052602061012051604052611057610160611903565b610160f36118c1565b63e408122081186118c157604436103417611adc57602435610280525f6102a0526110a8566118c1565b63773fb7e381186118c157606436103417611adc5760406024610280375b6004358060a01c611adc5761026052610260516040526110c96102e061199f565b6102e06102a05160098111611adc5760051b810190505163379510496104205261026051610440526020610420602461043c845afa61110a573d5f5f3e3d5ffd5b60203d10611adc57610420518060a01c611adc57610460526104609050516102c0526020600454635d95c65e6102e0526102c0516103005260206102e060246102fc845afa61115b573d5f5f3e3d5ffd5b60203d10611adc576102e0518060a01c611adc57610320526103209050f36118c1565b6325fa5d13811861119e57602436103417611adc57604036606037611252565b63876112e681186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610100610260516040526111df6102a061199f565b6102a06102805160098111611adc5760051b81019050516359f4f3516103e05261026051610400526101006103e060246103fc845afa611221573d5f5f3e3d5ffd5b6101003d10611adc576103e09050f36118c1565b63f8b661e281186118c157606436103417611adc57604060246060375b6004358060a01c611adc5760405260055460a052602060a0f36118c1565b6337951049811861128f57602436103417611adc575f61028052611381565b630a700c0881186112ae57602436103417611adc575f61028052611467565b634460f66f81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526112ec6102c0611903565b6102c0516102a0526102a0516040526113066102e061199f565b6102e06102805160098111611adc5760051b81019050516102c05260206102c05163c5b7074a6102e052610260516103005260206102e060246102fc845afa611351573d5f5f3e3d5ffd5b60203d10611adc576102e09050f36118c1565b630881715f81186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020610260516040526113a46102a061199f565b6102a06102805160098111611adc5760051b810190505163379510496103e052610260516104005260206103e060246103fc845afa6113e5573d5f5f3e3d5ffd5b60203d10611adc576103e0518060a01c611adc57610420526104209050f36118c1565b63940494f1811861142757602436103417611adc575f61028052610ba4565b63c5b7074a81186118c157602436103417611adc575f610280526112cb566118c1565b63decdf68f81186114da57604436103417611adc57602435610280525b6004358060a01c611adc576102605260206102605160405261148a6102a061199f565b6102a06102805160098111611adc5760051b8101905051630a700c086103e052610260516104005260206103e060246103fc845afa6114cb573d5f5f3e3d5ffd5b60203d10611adc576103e09050f35b63a77576ef81186118c157602436103417611adc575f610280526117a8566118c1565b6390d1dd2d811861158d57604436103417611adc57602435610280525b6004358060a01c611adc576102605260206102605160405261153d6102a061199f565b6102a06102805160098111611adc5760051b81019050516366d3966c6103e052610260516104005260206103e060246103fc845afa61157e573d5f5f3e3d5ffd5b60203d10611adc576103e09050f35b637a65d2dd81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610260516040526115cb6102c061199f565b6102c06102805160098111611adc5760051b81019050516102a0526102806102a05163688532aa6102c052610260516102e0526102806102c060246102dc845afa611618573d5f5f3e3d5ffd5b6102803d10611adc576102c09050f36118c1565b63688532aa81186118c157602436103417611adc575f610280526115aa566118c1565b6392234f4581186118c157604436103417611adc57602435610280525b6004358060a01c611adc57610260526020806104e052610260516040526116946102a061199f565b6102a06102805160098111611adc5760051b8101905051635c9117416103e052610260516104005260806103e060246103fc845afa6116d5573d5f5f3e3d5ffd5b60403d10611adc576103e0516103e0016040815111611adc57602081510180610480828460045afa5050506104809050816104e00160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506104e0f36118c1565b6359f4f351811861176857602436103417611adc575f610280526111bb565b63619ea80681186118c157602436103417611adc575f610280526101dd566118c1565b632fc90bcf81186118c157604436103417611adc57602435610280525b6004358060a01c611adc5761026052610100610260516040526117cc6102a061199f565b6102a06102805160098111611adc5760051b810190505163a77576ef6103e05261026051610400526101006103e060246103fc845afa61180e573d5f5f3e3d5ffd5b6101003d10611adc576103e0518060a01c611adc5761050052610400518060a01c611adc5761052052610420518060a01c611adc5761054052610440518060a01c611adc5761056052610460518060a01c611adc5761058052610480518060a01c611adc576105a0526104a0518060a01c611adc576105c0526104c0518060a01c611adc576105e0526105009050f36118c1565b63e4d332a981186118c157602436103417611adc575f61028052610562565b5f5ffd5b60035460405111611adc57600354604051186118ef5760035460018101818110611adc5790506003555b60605160026040516020525f5260405f2055565b5f600a905b806060526003546060511861191c57611996565b60026060516020525f5260405f205460805260805163bdf475c360c05260405160e052602060c0602460dc845afa611956573d5f5f3e3d5ffd5b60203d10611adc5760c0518060a01c611adc576101005261010090505160a05260a0511561198b5760a051835250505061199d565b600101818118611908575b50505f8152505b565b610160366060375f600a905b806101c0526003546101c051186119c157611a5d565b60026101c0516020525f5260405f20546101e0526101e05163619ea80661020052604051610220526020610200602461021c845afa611a02573d5f5f3e3d5ffd5b60203d10611adc57610200518060011c611adc576102405261024090505115611a52576101e0516101a05160098111611adc5760051b606001526101a05160018101818110611adc5790506101a0525b6001018181186119ab575b5050606051611acb57600b6101c0527f6e6f2072656769737472790000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b61014081610140606060045afa5050565b5f80fd0e3518c118c114fd015702ce18c10c1b106018c1140818c118c1162c136403a218c118c105270dd2144a18c118c108af04e5019318c11270022605e90ab2033218c118c118a2108a18c10f840af418c118c1028f117e123518c118c1174918c10929178b164f18c118c118c118c10f61001818c10734

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

000000000000000000000000abc000d88f23bb45525e447528dbf656a9d55bf50000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : _gauge_factory (address): 0xabC000d88f23Bb45525E447528DBF656A9D55bf5
Arg [1] : _gauge_type (int128): 2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc000d88f23bb45525e447528dbf656a9d55bf5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000002


Block Transaction 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
[ 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.