Contract 0x8F942C20D02bEfc377D41445793068908E2250D0

 
 
Txn Hash
Method
Block
From
To
Value
0x243c0828ec97851ec66ca4048edb7772d1e569238daa59d62bda6109db2cef0aAdd_pool139877582022-01-12 1:18:10382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.06013352 118.84894346
0x5c31e71c704d05616595360a92f74f3ce315e870cbb0bbf8846eb4617f9dd72eAdd_pool139877582022-01-12 1:18:10382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.06047319 118.84894346
0x1d2bc9f1acf391a14926a864155afd70f6bb7492a755a95c36922b7f022bcd34Add_pool139877572022-01-12 1:17:57382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.06110879 115.11478628
0xdd4207274114753dfd3b8703a6b99174405d77baa695e9353f6af03eea3e6734Add_pool139877532022-01-12 1:17:33382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.0607008 120
0x2ac3b4763ab4bdb6c212c73f2e37ea0513c83d821c82ac7cdda5b24084a1386fAdd_pool139877532022-01-12 1:17:33382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.06069576 120
0x575dcc31c7abb61a92f24ce0b6fa37d4d5bfb7dc3a44a249e9a8a4d0e2659795Add_pool139877532022-01-12 1:17:33382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.06774408 120
0x88411c4c97765be427d337bcc9604dbb86dd7b16f4ef9083470dd1dd71086cbeAdd_pool139877532022-01-12 1:17:33382 days 20 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.07077252 120
0x8afa64d3d390770e6e53ed307a7e014f379ab150196477cd2d0bbf54495da1ccAdd_pool139870122022-01-11 22:42:02382 days 23 hrs ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  0x8f942c20d02befc377d41445793068908e2250d00 Ether0.11241148 119.70180315
0x925d12d9d1e072e6503f6a9b22240381ab5de5d0c05bd8fede34d17c8d72f80a0x6f7fffff139867522022-01-11 21:44:11383 days 18 mins ago0x7eeac6cddbd1d0b8af061742d41877d7f707289a IN  Create: Vyper_contract0 Ether0.27321298 127.78133726
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.0

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.0
"""
@title Curve CryptoSwap Registry
@license MIT
@author Curve.Fi
"""

MAX_COINS: constant(int128) = 8
CALC_INPUT_SIZE: constant(int128) = 100


struct CoinInfo:
    index: uint256
    register_count: uint256
    swap_count: uint256
    swap_for: address[MAX_INT128]

struct PoolArray:
    location: uint256
    decimals: uint256
    coins: address[MAX_COINS]
    n_coins: uint256
    name: String[64]


interface AddressProvider:
    def admin() -> address: view
    def get_address(_id: uint256) -> address: view
    def get_registry() -> address: view

interface ERC20:
    def balanceOf(_addr: address) -> uint256: view
    def decimals() -> uint256: view
    def totalSupply() -> uint256: view

interface CurvePool:
    def token() -> address: view
    def coins(i: uint256) -> address: view
    def A() -> uint256: view
    def gamma() -> uint256: view
    def fee() -> uint256: view
    def get_virtual_price() -> uint256: view
    def mid_fee() -> uint256: view
    def out_fee() -> uint256: view
    def admin_fee() -> uint256: view
    def balances(i: uint256) -> uint256: view
    def D() -> uint256: view

interface LiquidityGauge:
    def lp_token() -> address: view

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


event PoolAdded:
    pool: indexed(address)

event PoolRemoved:
    pool: indexed(address)


address_provider: public(AddressProvider)
pool_list: public(address[65536])   # master list of pools
pool_count: public(uint256)         # actual length of pool_list

pool_data: HashMap[address, PoolArray]

coin_count: public(uint256)  # total unique coins registered
coins: HashMap[address, CoinInfo]
get_coin: public(address[65536])  # unique list of registered coins
# bitwise_xor(coina, coinb) -> (coina_pos, coinb_pos) sorted
# stored as uint128[2]
coin_swap_indexes: HashMap[uint256, uint256]

# lp token -> pool
get_pool_from_lp_token: public(HashMap[address, address])

# pool -> lp token
get_lp_token: public(HashMap[address, address])

# mapping of coins -> pools for trading
# a mapping key is generated for each pair of addresses via
# `bitwise_xor(convert(a, uint256), convert(b, uint256))`
markets: HashMap[uint256, address[65536]]
market_counts: HashMap[uint256, uint256]

liquidity_gauges: HashMap[address, address[10]]

# mapping of pool -> deposit/exchange zap
get_zap: public(HashMap[address, address])

last_updated: public(uint256)


@external
def __init__(_address_provider: AddressProvider):
    """
    @notice Constructor function
    """
    self.address_provider = _address_provider

# internal functionality for getters

@view
@internal
def _get_balances(_pool: address) -> uint256[MAX_COINS]:
    balances: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
    for i in range(MAX_COINS):
        if self.pool_data[_pool].coins[i] == ZERO_ADDRESS:
            assert i != 0
            break

        balances[i] = CurvePool(_pool).balances(i)

    return balances


# targetted external getters, optimized for on-chain calls

@view
@external
def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address:
    """
    @notice Find an available pool for exchanging two coins
    @param _from Address of coin to be sent
    @param _to Address of coin to be received
    @param i Index value. When multiple pools are available
            this value is used to return the n'th address.
    @return Pool address
    """
    key: uint256 = bitwise_xor(convert(_from, uint256), convert(_to, uint256))
    return self.markets[key][i]


@view
@external
def get_n_coins(_pool: address) -> uint256:
    """
    @notice Get the number of coins in a pool
    @dev For non-metapools, both returned values are identical
         even when the pool does not use wrapping/lending
    @param _pool Pool address
    @return Number of wrapped coins, number of underlying coins
    """
    return self.pool_data[_pool].n_coins


@view
@external
def get_coins(_pool: address) -> address[MAX_COINS]:
    """
    @notice Get the coins within a pool
    @dev For pools using lending, these are the wrapped coin addresses
    @param _pool Pool address
    @return List of coin addresses
    """
    coins: address[MAX_COINS] = empty(address[MAX_COINS])
    n_coins: uint256 = self.pool_data[_pool].n_coins
    for i in range(MAX_COINS):
        if i == n_coins:
            break
        coins[i] = self.pool_data[_pool].coins[i]

    return coins


@view
@external
def get_decimals(_pool: address) -> uint256[MAX_COINS]:
    """
    @notice Get decimal places for each coin within a pool
    @dev For pools using lending, these are the wrapped coin decimal places
    @param _pool Pool address
    @return uint256 list of decimals
    """

    # decimals are tightly packed as a series of uint8 within a little-endian bytes32
    # the packed value is stored as uint256 to simplify unpacking via shift and modulo
    packed: uint256 = self.pool_data[_pool].decimals
    decimals: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
    n_coins: int128 = convert(self.pool_data[_pool].n_coins, int128)
    for i in range(MAX_COINS):
        if i == n_coins:
            break
        decimals[i] = shift(packed, -8 * i) % 256

    return decimals


@view
@external
def get_gauges(_pool: address) -> (address[10], int128[10]):
    """
    @notice Get a list of LiquidityGauge contracts associated with a pool
    @param _pool Pool address
    @return address[10] of gauge addresses, int128[10] of gauge types
    """
    liquidity_gauges: address[10] = empty(address[10])
    gauge_types: int128[10] = empty(int128[10])
    for i in range(10):
        gauge: address = self.liquidity_gauges[_pool][i]
        if gauge == ZERO_ADDRESS:
            break
        liquidity_gauges[i] = gauge

    return liquidity_gauges, gauge_types


@view
@external
def get_balances(_pool: address) -> uint256[MAX_COINS]:
    """
    @notice Get balances for each coin within a pool
    @dev For pools using lending, these are the wrapped coin balances
    @param _pool Pool address
    @return uint256 list of balances
    """
    return self._get_balances(_pool)


@view
@external
def get_virtual_price_from_lp_token(_token: address) -> uint256:
    """
    @notice Get the virtual price of a pool LP token
    @param _token LP token address
    @return uint256 Virtual price
    """
    return CurvePool(self.get_pool_from_lp_token[_token]).get_virtual_price()


@view
@external
def get_A(_pool: address) -> uint256:
    return CurvePool(_pool).A()


@view
@external
def get_D(_pool: address) -> uint256:
    return CurvePool(_pool).D()


@view
@external
def get_gamma(_pool: address) -> uint256:
    return CurvePool(_pool).gamma()


@view
@external
def get_fees(_pool: address) -> uint256[4]:
    """
    @notice Get the fees for a pool
    @dev Fees are expressed as integers
    @return Pool fee as uint256 with 1e10 precision
            Admin fee as 1e10 percentage of pool fee
            Mid fee
            Out fee
    """
    return [CurvePool(_pool).fee(), CurvePool(_pool).admin_fee(), CurvePool(_pool).mid_fee(), CurvePool(_pool).out_fee()]


@view
@external
def get_admin_balances(_pool: address) -> uint256[MAX_COINS]:
    """
    @notice Get the current admin balances (uncollected fees) for a pool
    @param _pool Pool address
    @return List of uint256 admin balances
    """
    balances: uint256[MAX_COINS] = self._get_balances(_pool)
    n_coins: uint256 = self.pool_data[_pool].n_coins
    for i in range(MAX_COINS):
        coin: address = self.pool_data[_pool].coins[i]
        if i == n_coins:
            break
        if coin == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE:
            balances[i] = _pool.balance - balances[i]
        else:
            balances[i] = ERC20(coin).balanceOf(_pool) - balances[i]

    return balances


@view
@external
def get_coin_indices(
    _pool: address,
    _from: address,
    _to: address
) -> (uint256, uint256):
    """
    @notice Convert coin addresses to indices for use with pool methods
    @param _from Coin address to be used as `i` within a pool
    @param _to Coin address to be used as `j` within a pool
    @return int128 `i`, int128 `j`, boolean indicating if `i` and `j` are underlying coins
    """
    # the return value is stored as `uint256[3]` to reduce gas costs
    # from index, to index, is the market underlying?
    result: uint256[2] = empty(uint256[2])

    found_market: bool = False

    # check coin markets
    for x in range(MAX_COINS):
        coin: address = self.pool_data[_pool].coins[x]
        if coin == ZERO_ADDRESS:
            # if we reach the end of the coins, reset `found_market` and try again
            # with the underlying coins
            found_market = False
            break
        if coin == _from:
            result[0] = x
        elif coin == _to:
            result[1] = x
        else:
            continue
        if found_market:
            # the second time we find a match, break out of the loop
            return result[0], result[1]
        # the first time we find a match, set `found_market` to True
        found_market = True

    raise "No available market"


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


@view
@external
def get_coin_swap_count(_coin: address) -> uint256:
    """
    @notice Get the number of unique coins available to swap `_coin` against
    @param _coin Coin address
    @return The number of unique coins available to swap for
    """
    return self.coins[_coin].swap_count


@view
@external
def get_coin_swap_complement(_coin: address, _index: uint256) -> address:
    """
    @notice Get the coin available to swap against `_coin` at `_index`
    @param _coin Coin address
    @param _index An index in the `_coin`'s set of available counter
        coin's
    @return Address of a coin available to swap against `_coin`
    """
    return self.coins[_coin].swap_for[_index]


# internal functionality used in admin setters


@internal
def _register_coin(_coin: address):
    if self.coins[_coin].register_count == 0:
        coin_count: uint256 = self.coin_count
        self.coins[_coin].index = coin_count
        self.get_coin[coin_count] = _coin
        self.coin_count += 1
    self.coins[_coin].register_count += 1


@internal
def _register_coin_pair(_coina: address, _coinb: address, _key: uint256):
    # register _coinb in _coina's array of coins
    coin_b_pos: uint256 = self.coins[_coina].swap_count
    self.coins[_coina].swap_for[coin_b_pos] = _coinb
    self.coins[_coina].swap_count += 1
    # register _coina in _coinb's array of coins
    coin_a_pos: uint256 = self.coins[_coinb].swap_count
    self.coins[_coinb].swap_for[coin_a_pos] = _coina
    self.coins[_coinb].swap_count += 1
    # register indexes (coina pos in coinb array, coinb pos in coina array)
    if convert(_coina, uint256) < convert(_coinb, uint256):
        self.coin_swap_indexes[_key] = shift(coin_a_pos, 128) + coin_b_pos
    else:
        self.coin_swap_indexes[_key] = shift(coin_b_pos, 128) + coin_a_pos


@internal
def _unregister_coin(_coin: address):
    self.coins[_coin].register_count -= 1

    if self.coins[_coin].register_count == 0:
        self.coin_count -= 1
        coin_count: uint256 = self.coin_count
        location: uint256 = self.coins[_coin].index

        if location < coin_count:
            coin_b: address = self.get_coin[coin_count]
            self.get_coin[location] = coin_b
            self.coins[coin_b].index = location

        self.coins[_coin].index = 0
        self.get_coin[coin_count] = ZERO_ADDRESS


@internal
def _unregister_coin_pair(_coina: address, _coinb: address, _coinb_idx: uint256):
    """
    @param _coinb_idx the index of _coinb in _coina's array of unique coin's
    """
    # decrement swap counts for both coins
    self.coins[_coina].swap_count -= 1

    # retrieve the last currently occupied index in coina's array
    coina_arr_last_idx: uint256 = self.coins[_coina].swap_count

    # if coinb's index in coina's array is less than the last
    # overwrite it's position with the last coin
    if _coinb_idx < coina_arr_last_idx:
        # here's our last coin in coina's array
        coin_c: address = self.coins[_coina].swap_for[coina_arr_last_idx]
        # get the bitwise_xor of the pair to retrieve their indexes
        key: uint256 = bitwise_xor(convert(_coina, uint256), convert(coin_c, uint256))
        indexes: uint256 = self.coin_swap_indexes[key]

        # update the pairing's indexes
        if convert(_coina, uint256) < convert(coin_c, uint256):
            # least complicated most readable way of shifting twice to remove the lower order bits
            self.coin_swap_indexes[key] = shift(shift(indexes, -128), 128) + _coinb_idx
        else:
            self.coin_swap_indexes[key] = shift(_coinb_idx, 128) + indexes % 2 ** 128
        # set _coinb_idx in coina's array to coin_c
        self.coins[_coina].swap_for[_coinb_idx] = coin_c

    self.coins[_coina].swap_for[coina_arr_last_idx] = ZERO_ADDRESS


@internal
def _get_new_pool_coins(
    _pool: address,
    _n_coins: uint256,
) -> address[MAX_COINS]:
    coin_list: address[MAX_COINS] = empty(address[MAX_COINS])
    coin: address = ZERO_ADDRESS
    for i in range(MAX_COINS):
        if i == _n_coins:
            break
        coin = CurvePool(_pool).coins(i)
        self.pool_data[_pool].coins[i] = coin
        coin_list[i] = coin

    for i in range(MAX_COINS):
        if i == _n_coins:
            break

        self._register_coin(coin_list[i])
        # add pool to markets
        i2: uint256 = i + 1
        for x in range(i2, i2 + MAX_COINS):
            if x == _n_coins:
                break

            key: uint256 = bitwise_xor(convert(coin_list[i], uint256), convert(coin_list[x], uint256))
            length: uint256 = self.market_counts[key]
            self.markets[key][length] = _pool
            self.market_counts[key] = length + 1

            # register the coin pair
            if length == 0:
                self._register_coin_pair(coin_list[x], coin_list[i], key)

    return coin_list


@view
@internal
def _get_new_pool_decimals(_coins: address[MAX_COINS], _n_coins: uint256) -> uint256:
    packed: uint256 = 0
    value: uint256 = 0

    n_coins: int128 = convert(_n_coins, int128)
    for i in range(MAX_COINS):
        if i == n_coins:
            break
        coin: address = _coins[i]
        if coin == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE:
            value = 18
        else:
            value = ERC20(coin).decimals()
            assert value < 256  # dev: decimal overflow

        packed += shift(value, i * 8)

    return packed


@internal
def _remove_market(_pool: address, _coina: address, _coinb: address):
    key: uint256 = bitwise_xor(convert(_coina, uint256), convert(_coinb, uint256))
    length: uint256 = self.market_counts[key] - 1
    if length == 0:
        indexes: uint256 = self.coin_swap_indexes[key]
        if convert(_coina, uint256) < convert(_coinb, uint256):
            self._unregister_coin_pair(_coina, _coinb, indexes % 2 ** 128)
            self._unregister_coin_pair(_coinb, _coina, shift(indexes, -128))
        else:
            self._unregister_coin_pair(_coina, _coinb, shift(indexes, -128))
            self._unregister_coin_pair(_coinb, _coina, indexes % 2 ** 128)
        self.coin_swap_indexes[key] = 0
    for i in range(65536):
        if i > length:
            break
        if self.markets[key][i] == _pool:
            if i < length:
                self.markets[key][i] = self.markets[key][length]
            self.markets[key][length] = ZERO_ADDRESS
            self.market_counts[key] = length
            break


# admin functions

@external
def add_pool(
    _pool: address,
    _n_coins: uint256,
    _lp_token: address,
    _gauge: address,
    _zap: address,
    _decimals: uint256,
    _name: String[64],
):
    """
    @notice Add a pool to the registry
    @dev Only callable by admin
    @param _pool Pool address to add
    @param _n_coins Number of coins in the pool
    @param _lp_token Pool deposit token address
    @param _decimals Coin decimal values, tightly packed as uint8 in a little-endian bytes32
    @param _name The name of the pool
    """
    assert msg.sender == self.address_provider.admin()  # dev: admin-only function
    assert _lp_token != ZERO_ADDRESS
    assert self.pool_data[_pool].coins[0] == ZERO_ADDRESS  # dev: pool exists
    assert self.get_pool_from_lp_token[_lp_token] == ZERO_ADDRESS

    # add pool to pool_list
    length: uint256 = self.pool_count
    self.pool_list[length] = _pool
    self.pool_count = length + 1
    self.pool_data[_pool].location = length
    self.pool_data[_pool].n_coins = _n_coins
    self.pool_data[_pool].name = _name

    # update public mappings
    self.get_pool_from_lp_token[_lp_token] = _pool
    self.get_lp_token[_pool] = _lp_token

    coins: address[MAX_COINS] = self._get_new_pool_coins(_pool, _n_coins)
    decimals: uint256 = _decimals
    if decimals == 0:
        decimals = self._get_new_pool_decimals(coins, _n_coins)
    self.pool_data[_pool].decimals = decimals

    if _zap != ZERO_ADDRESS:
        self.get_zap[_pool] = _zap

    if _gauge != ZERO_ADDRESS:
        self.liquidity_gauges[_pool][0] = _gauge

    self.last_updated = block.timestamp
    log PoolAdded(_pool)


@external
def remove_pool(_pool: address):
    """
    @notice Remove a pool to the registry
    @dev Only callable by admin
    @param _pool Pool address to remove
    """
    assert msg.sender == self.address_provider.admin()  # dev: admin-only function
    assert self.pool_data[_pool].coins[0] != ZERO_ADDRESS  # dev: pool does not exist


    self.get_pool_from_lp_token[self.get_lp_token[_pool]] = ZERO_ADDRESS
    self.get_lp_token[_pool] = ZERO_ADDRESS

    # remove _pool from pool_list
    location: uint256 = self.pool_data[_pool].location
    length: uint256 = self.pool_count - 1

    if location < length:
        # replace _pool with final value in pool_list
        addr: address = self.pool_list[length]
        self.pool_list[location] = addr
        self.pool_data[addr].location = location

    # delete final pool_list value
    self.pool_list[length] = ZERO_ADDRESS
    self.pool_count = length

    self.pool_data[_pool].decimals = 0
    self.pool_data[_pool].n_coins = 0
    self.pool_data[_pool].name = ""

    coins: address[MAX_COINS] = empty(address[MAX_COINS])

    for i in range(MAX_COINS):
        coins[i] = self.pool_data[_pool].coins[i]
        if coins[i] == ZERO_ADDRESS:
            break
        # delete coin address from pool_data
        self.pool_data[_pool].coins[i] = ZERO_ADDRESS
        self._unregister_coin(coins[i])

    for i in range(MAX_COINS):
        coin: address = coins[i]
        if coin == ZERO_ADDRESS:
            break

        # remove pool from markets
        i2: uint256 = i + 1
        for x in range(i2, i2 + MAX_COINS):
            coinx: address = coins[x]
            if coinx == ZERO_ADDRESS:
                break
            self._remove_market(_pool, coin, coinx)

    if self.get_zap[_pool] != ZERO_ADDRESS:
        self.get_zap[_pool] = ZERO_ADDRESS

    self.last_updated = block.timestamp
    log PoolRemoved(_pool)


@external
def set_liquidity_gauges(_pool: address, _liquidity_gauges: address[10]):
    """
    @notice Set liquidity gauge contracts
    @param _pool Pool address
    @param _liquidity_gauges Liquidity gauge address
    """
    assert msg.sender == self.address_provider.admin()  # dev: admin-only function

    _lp_token: address = self.get_lp_token[_pool]
    for i in range(10):
        _gauge: address = _liquidity_gauges[i]
        if _gauge != ZERO_ADDRESS:
            assert LiquidityGauge(_gauge).lp_token() == _lp_token  # dev: wrong token
            self.liquidity_gauges[_pool][i] = _gauge
        elif self.liquidity_gauges[_pool][i] != ZERO_ADDRESS:
            self.liquidity_gauges[_pool][i] = ZERO_ADDRESS
        else:
            break
    self.last_updated = block.timestamp


@external
def batch_set_liquidity_gauges(_pools: address[10], _liquidity_gauges: address[10]):
    """
    @notice Set many liquidity gauge contracts
    @param _pools List of pool addresses
    @param _liquidity_gauges List of liquidity gauge addresses
    """
    assert msg.sender == self.address_provider.admin()  # dev: admin-only function

    for i in range(10):
        _pool: address = _pools[i]
        if _pool == ZERO_ADDRESS:
            break
        _gauge: address = _liquidity_gauges[i]
        assert LiquidityGauge(_gauge).lp_token() == self.get_lp_token[_pool]  # dev: wrong token
        self.liquidity_gauges[_pool][0] = _gauge

    self.last_updated = block.timestamp

Contract Security Audit

Contract ABI

[{"name":"PoolAdded","inputs":[{"name":"pool","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"PoolRemoved","inputs":[{"name":"pool","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_address_provider","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"}],"gas":3111},{"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"}],"gas":3111},{"stateMutability":"view","type":"function","name":"get_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2834},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}],"gas":22975},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}],"gas":9818},{"stateMutability":"view","type":"function","name":"get_gauges","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[10]"},{"name":"","type":"int128[10]"}],"gas":26055},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}],"gas":41626},{"stateMutability":"view","type":"function","name":"get_virtual_price_from_lp_token","inputs":[{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":5321},{"stateMutability":"view","type":"function","name":"get_A","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3139},{"stateMutability":"view","type":"function","name":"get_D","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3169},{"stateMutability":"view","type":"function","name":"get_gamma","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3199},{"stateMutability":"view","type":"function","name":"get_fees","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[4]"}],"gas":10333},{"stateMutability":"view","type":"function","name":"get_admin_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}],"gas":85771},{"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"}],"gas":23608},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"string"}],"gas":13576},{"stateMutability":"view","type":"function","name":"get_coin_swap_count","inputs":[{"name":"_coin","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3224},{"stateMutability":"view","type":"function","name":"get_coin_swap_complement","inputs":[{"name":"_coin","type":"address"},{"name":"_index","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3299},{"stateMutability":"nonpayable","type":"function","name":"add_pool","inputs":[{"name":"_pool","type":"address"},{"name":"_n_coins","type":"uint256"},{"name":"_lp_token","type":"address"},{"name":"_gauge","type":"address"},{"name":"_zap","type":"address"},{"name":"_decimals","type":"uint256"},{"name":"_name","type":"string"}],"outputs":[],"gas":18586944},{"stateMutability":"nonpayable","type":"function","name":"remove_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[],"gas":399675363514},{"stateMutability":"nonpayable","type":"function","name":"set_liquidity_gauges","inputs":[{"name":"_pool","type":"address"},{"name":"_liquidity_gauges","type":"address[10]"}],"outputs":[],"gas":422284},{"stateMutability":"nonpayable","type":"function","name":"batch_set_liquidity_gauges","inputs":[{"name":"_pools","type":"address[10]"},{"name":"_liquidity_gauges","type":"address[10]"}],"outputs":[],"gas":444084},{"stateMutability":"view","type":"function","name":"address_provider","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3126},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3201},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3186},{"stateMutability":"view","type":"function","name":"coin_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3216},{"stateMutability":"view","type":"function","name":"get_coin","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3291},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3548},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3578},{"stateMutability":"view","type":"function","name":"get_zap","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3608},{"stateMutability":"view","type":"function","name":"last_updated","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3366}]

6f7fffffffffffffffffffffffffffffff60405260206125a760c03960c0518060a01c6125a257809050610140526101405160005561258a56600436101561000d57611974565b60046000601c376f7fffffffffffffffffffffffffffffff6040526000513461254c5763a87df06c8114156100475760006101805261005b565b636982eb0b8114156100be57604435610180525b6004358060a01c61254c57809050610140526024358060a01c61254c57809050610160526101605161014051186101a0526001610180516201000081101561254c5702620200086101a05160e05260c052604060c02001546101c05260206101c0f35b63940494f18114156100fe576004358060a01c61254c5780905061014052600a620100026101405160e05260c052604060c0200154610160526020610160f35b639ac90d3d8114156101f5576004358060a01c61254c57809050610140526101003661016037600a620100026101405160e05260c052604060c02001546102605261028060006008818352015b6102605161028051141561015e576101ab565b600161028051600881101561254c57026002620100026101405160e05260c052604060c02001015461016061028051600881101561254c576020020152815160010180835281141561014b575b50506101605161028052610180516102a0526101a0516102c0526101c0516102e0526101e05161030052610200516103205261022051610340526102405161036052610100610280f35b6352b5155581141561034f576004358060a01c61254c57809050610140526001620100026101405160e05260c052604060c0200154610160526101003661018037600a620100026101405160e05260c052604060c0200154604051811161254c57610280526102a060006008818352015b610280516102a051141561027957610305565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86102a05180820280607f1d8160801d141561254c578090509050905060008112156102cd5761016051816000031c6102d4565b61016051811b5b9050610100808206905090506101806102a051600881101561254c5760200201528151600101808352811415610266575b5050610180516102a0526101a0516102c0526101c0516102e0526101e0516103005261020051610320526102205161034052610240516103605261026051610380526101006102a0f35b6356059ffb81141561048a576004358060a01c61254c578090506101405261028036610160376103e06000600a818352015b60016103e051600a81101561254c57026202000a6101405160e05260c052604060c020015461040052610400516103b7576103e0565b610400516101606103e051600a81101561254c5760200201528151600101808352811415610381575b5050610160516103e05261018051610400526101a051610420526101c051610440526101e051610460526102005161048052610220516104a052610240516104c052610260516104e05261028051610500526102a051610520526102c051610540526102e051610560526103005161058052610320516105a052610340516105c052610360516105e05261038051610600526103a051610620526103c051610640526102806103e0f35b6392e3cc2d81141561050c576004358060a01c61254c578090506102c0526102c051610140526104bb6102e061197a565b6102e080516103e0528060200151610400528060400151610420528060600151610440528060800151610460528060a00151610480528060c001516104a0528060e001516104c052506101006103e0f35b63c5b7074a811415610570576004358060a01c61254c578090506101405263bb7b8b80610160526020610160600461017c620200066101405160e05260c052604060c020545afa1561254c57601f3d111561254c57610160516101a05260206101a0f35b6355b30b198114156105c4576004358060a01c61254c578090506101405263f446c1d0610160526020610160600461017c610140515afa1561254c57601f3d111561254c57610160516101a05260206101a0f35b63e3663c99811415610618576004358060a01c61254c5780905061014052630f529ba2610160526020610160600461017c610140515afa1561254c57601f3d111561254c57610160516101a05260206101a0f35b637c400ccf81141561066c576004358060a01c61254c578090506101405263b1373929610160526020610160600461017c610140515afa1561254c57601f3d111561254c57610160516101a05260206101a0f35b637cdb72b081141561074d576004358060a01c61254c578090506101405263ddca3f43610160526020610160600461017c610140515afa1561254c57601f3d111561254c57610160516102605263fee3f7f96101a05260206101a060046101bc610140515afa1561254c57601f3d111561254c576101a051610280526392526c0c6101e05260206101e060046101fc610140515afa1561254c57601f3d111561254c576101e0516102a05263ee8de675610220526020610220600461023c610140515afa1561254c57601f3d111561254c57610220516102c0526080610260f35b63c11e45b8811415610954576004358060a01c61254c578090506102c0526102c0516101405261077e6103e061197a565b6103e080516102e0528060200151610300528060400151610320528060600151610340528060800151610360528060a00151610380528060c001516103a0528060e001516103c05250600a620100026102c05160e05260c052604060c02001546103e05261040060006008818352015b600161040051600881101561254c57026002620100026102c05160e05260c052604060c020010154610420526103e05161040051141561082d5761090a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61042051141561088e576102c051316102e061040051600881101561254c57602002015180821061254c57808203905090506102e061040051600881101561254c5760200201526108fa565b6370a08231610440526102c051610460526020610440602461045c610420515afa1561254c57601f3d111561254c57610440516102e061040051600881101561254c57602002015180821061254c57808203905090506102e061040051600881101561254c5760200201525b81516001018083528114156107ee575b50506102e051610400526103005161042052610320516104405261034051610460526103605161048052610380516104a0526103a0516104c0526103c0516104e052610100610400f35b63eb85226d811415610aaa576004358060a01c61254c57809050610140526024358060a01c61254c57809050610160526044358060a01c61254c57809050610180526060366101a03761020060006008818352015b600161020051600881101561254c57026002620100026101405160e05260c052604060c02001015461022052610220516109e85760006101e052610a61565b61016051610220511415610a0357610200516101a052610a24565b61018051610220511415610a1e57610200516101c052610a23565b610a51565b5b6101e05115610a4a575050506101a051610240526101c051610260526040610240610aa8565b60016101e0525b81516001018083528114156109a9575b50506308c379a0610200526020610220526013610240527f4e6f20617661696c61626c65206d61726b6574000000000000000000000000006102605261024050606461021cfd5bf35b635c911741811415610b80576004358060a01c61254c5780905061014052610160806020808252600b620100026101405160e05260c052604060c0200181840180828082602082540161012060006003818352015b82610120516020021115610b1257610b33565b61012051850154610120516020028501528151600101808352811415610aff575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f82010390509050905090508101905080905090509050610160f35b6398aede16811415610bc0576004358060a01c61254c57809050610140526002620100046101405160e05260c052604060c0200154610160526020610160f35b635d211982811415610c1f576004358060a01c61254c578090506101405260016024356f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101405160e05260c052604060c020010154610160526020610160f35b63c927255f811415610f6b576004358060a01c61254c578090506103e0526044358060a01c61254c57809050610400526064358060a01c61254c57809050610420526084358060a01c61254c578090506104405260c435600401604081351161254c5780803560200180826104603750505063f851a4406104c05260206104c060046104dc6000545afa1561254c57601f3d111561254c576104c05133141561254c57600061040051181561254c576002620100026103e05160e05260c052604060c020015461254c57620200066104005160e05260c052604060c0205461254c5762010001546104c0526103e05160016104c0516201000081101561254c5702600101556104c0516001818183011061254c578082019050905062010001556104c051620100026103e05160e05260c052604060c02055602435600a620100026103e05160e05260c052604060c020015561046080600b620100026103e05160e05260c052604060c02001602082510161012060006003818352015b82610120516020021115610daf57610dd0565b61012051602002850151610120518501558151600101808352811415610d9c575b5050505050506103e051620200066104005160e05260c052604060c0205561040051620200076103e05160e05260c052604060c020556103e0516101e05260243561020052610e206105e0611f55565b6105e080516104e0528060200151610500528060400151610520528060600151610540528060800151610560528060a00151610580528060c001516105a0528060e001516105c0525060a4356105e0526105e051610ed3576104e0516101405261050051610160526105205161018052610540516101a052610560516101c052610580516101e0526105a051610200526105c0516102205260243561024052610eca6106006121e3565b610600516105e0525b6105e0516001620100026103e05160e05260c052604060c02001556000610440511815610f1357610440516202000b6103e05160e05260c052604060c020555b6000610420511815610f3857610420516202000a6103e05160e05260c052604060c020555b426202000c556103e0517f73cca62ab1b520c9715bf4e6c71e3e518c754e7148f65102f43289a7df0efea66000610600a2005b63474932b0811415611355576004358060a01c61254c578090506102e05263f851a440610300526020610300600461031c6000545afa1561254c57601f3d111561254c576103005133141561254c5760006002620100026102e05160e05260c052604060c0200154181561254c57600062020006620200076102e05160e05260c052604060c0205460e05260c052604060c020556000620200076102e05160e05260c052604060c02055620100026102e05160e05260c052604060c02054610300526201000154600180821061254c578082039050905061032052610320516103005110156110a1576001610320516201000081101561254c57026001015461034052610340516001610300516201000081101561254c57026001015561030051620100026103405160e05260c052604060c020555b60006001610320516201000081101561254c57026001015561032051620100015560006001620100026102e05160e05260c052604060c02001556000600a620100026102e05160e05260c052604060c020015560006103405261034080600b620100026102e05160e05260c052604060c02001602082510161012060006001818352015b8261012051602002111561113857611159565b61012051602002850151610120518501558151600101808352811415611125575b505050505050610100366103403761044060006008818352015b600161044051600881101561254c57026002620100026102e05160e05260c052604060c02001015461034061044051600881101561254c57602002015261034061044051600881101561254c5760200201516111ce57611229565b6000600161044051600881101561254c57026002620100026102e05160e05260c052604060c02001015561034061044051600881101561254c57602002015161014052611219611c8a565b8151600101808352811415611173575b505061044060006008818352015b61034061044051600881101561254c576020020151610460526104605161125d576112ed565b610440516001818183011061254c5780820190509050610480526104a0610480516008818352015b6103406104a051600881101561254c5760200201516104c0526104c0516112ab576112db565b6102e0516102205261046051610240526104c051610260526112cb61230b565b8151600101808352811415611285575b50508151600101808352811415611237575b505060006202000b6102e05160e05260c052604060c0205418156113225760006202000b6102e05160e05260c052604060c020555b426202000c556102e0517f4106dfdaa577573db51c0ca93f766dbedfa0758faa2e7f5bcdb7c142be803c3f6000610440a2005b63ef6b9788811415611580576004358060a01c61254c57809050610140526024358060a01c61254c57809050610160526044358060a01c61254c57809050610180526064358060a01c61254c578090506101a0526084358060a01c61254c578090506101c05260a4358060a01c61254c578090506101e05260c4358060a01c61254c578090506102005260e4358060a01c61254c5780905061022052610104358060a01c61254c5780905061024052610124358060a01c61254c5780905061026052610144358060a01c61254c578090506102805263f851a4406102a05260206102a060046102bc6000545afa1561254c57601f3d111561254c576102a05133141561254c57620200076101405160e05260c052604060c020546102a0526102c06000600a818352015b6101606102c051600a81101561254c5760200201516102e05260006102e0511815611507576102a0516382c63066610300526020610300600461031c6102e0515afa1561254c57601f3d111561254c5761030051141561254c576102e05160016102c051600a81101561254c57026202000a6101405160e05260c052604060c0200155611566565b600060016102c051600a81101561254c57026202000a6101405160e05260c052604060c0200154181561156057600060016102c051600a81101561254c57026202000a6101405160e05260c052604060c0200155611565565b611576565b5b815160010180835281141561147f575b5050426202000c55005b63fec61ef58114156117f3576004358060a01c61254c57809050610140526024358060a01c61254c57809050610160526044358060a01c61254c57809050610180526064358060a01c61254c578090506101a0526084358060a01c61254c578090506101c05260a4358060a01c61254c578090506101e05260c4358060a01c61254c578090506102005260e4358060a01c61254c5780905061022052610104358060a01c61254c5780905061024052610124358060a01c61254c5780905061026052610144358060a01c61254c5780905061028052610164358060a01c61254c578090506102a052610184358060a01c61254c578090506102c0526101a4358060a01c61254c578090506102e0526101c4358060a01c61254c57809050610300526101e4358060a01c61254c5780905061032052610204358060a01c61254c5780905061034052610224358060a01c61254c5780905061036052610244358060a01c61254c5780905061038052610264358060a01c61254c578090506103a05263f851a4406103c05260206103c060046103dc6000545afa1561254c57601f3d111561254c576103c05133141561254c576103c06000600a818352015b6101406103c051600a81101561254c5760200201516103e0526103e051611763576117e9565b6102806103c051600a81101561254c57602002015161040052620200076103e05160e05260c052604060c020546382c63066610420526020610420600461043c610400515afa1561254c57601f3d111561254c5761042051141561254c57610400516202000a6103e05160e05260c052604060c02055815160010180835281141561173d575b5050426202000c55005b63ce50c2e781141561180d57600054610140526020610140f35b633a1d5d8e8114156118395760016004356201000081101561254c570260010154610140526020610140f35b63956aae3a811415611855576201000154610140526020610140f35b635075770f811415611871576201000354610140526020610140f35b6345f0db2481141561189f5760016004356201000081101561254c5702620100050154610140526020610140f35b63bdf475c38114156118dc576004358060a01c61254c5780905061014052620200066101405160e05260c052604060c02054610160526020610160f35b6337951049811415611919576004358060a01c61254c5780905061014052620200076101405160e05260c052604060c02054610160526020610160f35b6355335d7b811415611956576004358060a01c61254c57809050610140526202000b6101405160e05260c052604060c02054610160526020610160f35b6368900961811415611972576202000c54610140526020610140f35b505b60006000fd5b610100366101603761026060006008818352015b600161026051600881101561254c57026002620100026101405160e05260c052604060c0200101546119cb57600061026051181561254c57611a23565b634903b0d161028052610260516102a0526020610280602461029c610140515afa1561254c57601f3d111561254c576102805161016061026051600881101561254c576020020152815160010180835281141561198e575b50506101605181526101805181602001526101a05181604001526101c05181606001526101e0518160800152610200518160a00152610220518160c00152610240518160e0015250565b6001620100046101405160e05260c052604060c0200154611ae15762010003546101605261016051620100046101405160e05260c052604060c02055610140516001610160516201000081101561254c57026201000501556201000380546001818183011061254c57808201905090508155505b6001620100046101405160e05260c052604060c0200180546001818183011061254c5780820190509050815550565b6002620100046101405160e05260c052604060c02001546101a0526101605160016101a0516f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101405160e05260c052604060c0200101556002620100046101405160e05260c052604060c0200180546001818183011061254c57808201905090508155506002620100046101605160e05260c052604060c02001546101c0526101405160016101c0516f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101605160e05260c052604060c0200101556002620100046101605160e05260c052604060c0200180546001818183011061254c578082019050905081555061016051610140511015611c58576101c05160801b6101a051818183011061254c5780820190509050620200056101805160e05260c052604060c02055611c88565b6101a05160801b6101c051818183011061254c5780820190509050620200056101805160e05260c052604060c020555b565b6001620100046101405160e05260c052604060c020018054600180821061254c57808203905090508155506001620100046101405160e05260c052604060c0200154611d9a57620100038054600180821061254c5780820390509050815550620100035461016052620100046101405160e05260c052604060c020546101805261016051610180511015611d69576001610160516201000081101561254c57026201000501546101a0526101a0516001610180516201000081101561254c570262010005015561018051620100046101a05160e05260c052604060c020555b6000620100046101405160e05260c052604060c0205560006001610160516201000081101561254c57026201000501555b565b6002620100046101405160e05260c052604060c020018054600180821061254c57808203905090508155506002620100046101405160e05260c052604060c02001546101a0526101a051610180511015611f1a5760016101a0516f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101405160e05260c052604060c0200101546101c0526101c05161014051186101e052620200056101e05160e05260c052604060c02054610200526101c051610140511015611e95576102005160801c60801b61018051818183011061254c5780820190509050620200056101e05160e05260c052604060c02055611ede565b6101805160801b6102005170010000000000000000000000000000000080820690509050818183011061254c5780820190509050620200056101e05160e05260c052604060c020555b6101c0516001610180516f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101405160e05260c052604060c0200101555b600060016101a0516f7fffffffffffffffffffffffffffffff81101561254c57026003620100046101405160e05260c052604060c020010155565b610120366102203761034060006008818352015b61020051610340511415611f7c57612013565b63c66106576103605261034051610380526020610360602461037c6101e0515afa1561254c57601f3d111561254c57610360518060a01c61254c578090506103205261032051600161034051600881101561254c57026002620100026101e05160e05260c052604060c0200101556103205161022061034051600881101561254c5760200201528151600101808352811415611f69575b505061034060006008818352015b6102005161034051141561203457612199565b61022061034051600881101561254c57602002015161014052612055611a6d565b610340516001818183011061254c578082019050905061036052610380610360516008818352015b6102005161038051141561209057612187565b61022061038051600881101561254c57602002015161022061034051600881101561254c576020020151186103a052620200096103a05160e05260c052604060c020546103c0526101e05160016103c0516201000081101561254c5702620200086103a05160e05260c052604060c02001556103c0516001818183011061254c5780820190509050620200096103a05160e05260c052604060c020556103c0516121775761022061038051600881101561254c5760200201516101405261022061034051600881101561254c576020020151610160526103a05161018052612176611b10565b5b815160010180835281141561207d575b50508151600101808352811415612021575b50506102205181526102405181602001526102605181604001526102805181606001526102a05181608001526102c0518160a001526102e0518160c00152610300518160e0015250565b6040366102603761024051604051811161254c576102a0526102c060006008818352015b6102a0516102c051141561221a57612300565b6101406102c051600881101561254c5760200201516102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102e051141561225d5760126102805261229a565b63313ce567610300526020610300600461031c6102e0515afa1561254c57601f3d111561254c57610300516102805261010061028051101561254c575b61026080516102c051600880820280607f1d8160801d141561254c578090509050905060008112156122d45761028051816000031c6122db565b61028051811b5b9050818183011061254c57808201905090508152508151600101808352811415612207575b505061026051815250565b61026051610240511861028052620200096102805160e05260c052604060c02054600180821061254c57808203905090506102a0526102a05161244357620200056102805160e05260c052604060c020546102c052610260516102405110156123cf57610240516101405261026051610160526102c05170010000000000000000000000000000000080820690509050610180526123a7611d9c565b610260516101405261024051610160526102c05160801c610180526123ca611d9c565b61242c565b610240516101405261026051610160526102c05160801c610180526123f2611d9c565b610260516101405261024051610160526102c051700100000000000000000000000000000000808206905090506101805261242b611d9c565b5b6000620200056102805160e05260c052604060c020555b6102c0600062010000818352015b6102a0516102c051111561246457612548565b6102205160016102c0516201000081101561254c5702620200086102805160e05260c052604060c02001541415612538576102a0516102c05110156124f25760016102a0516201000081101561254c5702620200086102805160e05260c052604060c020015460016102c0516201000081101561254c5702620200086102805160e05260c052604060c02001555b600060016102a0516201000081101561254c5702620200086102805160e05260c052604060c02001556102a051620200096102805160e05260c052604060c02055612548565b8151600101808352811415612451575b5050565b600080fd5b61003961258a0361003960003961003961258a036000f35b600080fd0000000000000000000000000000000022d53366457f9d5e68ec105046fc4383

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

0000000000000000000000000000000022d53366457f9d5e68ec105046fc4383

-----Decoded View---------------
Arg [0] : _address_provider (address): 0x0000000022D53366457F9d5E68Ec105046FC4383

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000022d53366457f9d5e68ec105046fc4383


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.