Contract 0x58AC91f5BE7dC0c35b24B96B19BAc55FBB8E705e

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5eRemove_liquidity...194678402022-08-05 15:16:0656 days 43 mins ago0x088b47f76f4696ed16f9674dde39e9e9b5d8451c IN  0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e0 ETH0.000089056752 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38bAdd_liquidity194671782022-08-05 15:08:5256 days 50 mins ago0x088b47f76f4696ed16f9674dde39e9e9b5d8451c IN  0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e0 ETH0.000158517925 ETH
0x21f6e4fc8bec9937081a51f5b04b6468dd22406b68724e99a6e5c5c8b333762a0x7317fc00190703202022-07-31 22:12:0960 days 17 hrs ago0x745748bcfd8f9c2de519a71d789be8a63dd7d66c IN  Create: Vyper_contract0 ETH0.002662985147 ETH
[ Download CSV Export 
Latest 19 internal transactions
Parent Txn Hash Block From To Value
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5e194678402022-08-05 15:16:0656 days 43 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e Frax Finance: FRAX Token0 ETH
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5e194678402022-08-05 15:16:0656 days 43 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e Frax Finance: FRAX Token0 ETH
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5e194678402022-08-05 15:16:0656 days 43 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d50 ETH
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5e194678402022-08-05 15:16:0656 days 43 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0x4b043cdd981dbd9a0c229d23b80cc1eb3c50b05b0 ETH
0x92f55ffceeb0d1f798b2169b4e8130c3a6dbaedaf14e3d3d521ebdfd8b990f5e194678402022-08-05 15:16:0656 days 43 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0x4b043cdd981dbd9a0c229d23b80cc1eb3c50b05b0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0x4b043cdd981dbd9a0c229d23b80cc1eb3c50b05b0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d50 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d50 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d50 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e Frax Finance: FRAX Token0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e Frax Finance: FRAX Token0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e MIM Abracadabra.money: MIM Token0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e MIM Abracadabra.money: MIM Token0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e MIM Abracadabra.money: MIM Token0 ETH
0x30dc0491578d89a74712706f34a5bd7f158f6e5e7ae7de1faea3aaa85a92a38b194671782022-08-05 15:08:5256 days 50 mins ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0x4b043cdd981dbd9a0c229d23b80cc1eb3c50b05b0 ETH
0x21f6e4fc8bec9937081a51f5b04b6468dd22406b68724e99a6e5c5c8b333762a190703202022-07-31 22:12:0960 days 17 hrs ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e 0xff970a61a04b1ca14834a43f5de4533ebddb5cc80 ETH
0x21f6e4fc8bec9937081a51f5b04b6468dd22406b68724e99a6e5c5c8b333762a190703202022-07-31 22:12:0960 days 17 hrs ago 0x58ac91f5be7dc0c35b24b96b19bac55fbb8e705e Frax Finance: FRAX Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.16

Optimization Enabled:
N/A

Other Settings:
, None license

Contract Source Code (Vyper language format)

# @version 0.2.16
"""
@title "Zap" Depositer for permissionless factory metapools
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2021 - all rights reserved
"""

interface ERC20:
    def approve(_spender: address, _amount: uint256): nonpayable
    def balanceOf(_owner: address) -> uint256: view

interface CurveMeta:
    def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256, _receiver: address) -> uint256: nonpayable
    def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]): nonpayable
    def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256, _receiver: address) -> uint256: nonpayable
    def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256) -> uint256: nonpayable
    def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view
    def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: view
    def coins(i: uint256) -> address: view

interface CurveBase:
    def add_liquidity(amounts: uint256[BASE_N_COINS], min_mint_amount: uint256): nonpayable
    def remove_liquidity(_amount: uint256, min_amounts: uint256[BASE_N_COINS]): nonpayable
    def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256): nonpayable
    def remove_liquidity_imbalance(amounts: uint256[BASE_N_COINS], max_burn_amount: uint256): nonpayable
    def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view
    def calc_token_amount(amounts: uint256[BASE_N_COINS], deposit: bool) -> uint256: view
    def coins(i: uint256) -> address: view
    def fee() -> uint256: view


BASE_N_COINS: constant(int128) = 2
BASE_POOL: constant(address) = 0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5
BASE_LP_TOKEN: constant(address) = 0xC9B8a3FDECB9D5b218d02555a8Baf332E5B740d5
BASE_COINS: constant(address[BASE_N_COINS]) = [
    0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F,
    0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
]

N_COINS: constant(int128) = 2
MAX_COIN: constant(int128) = N_COINS-1
N_ALL_COINS: constant(int128) = N_COINS + BASE_N_COINS - 1

FEE_DENOMINATOR: constant(uint256) = 10 ** 10
FEE_IMPRECISION: constant(uint256) = 100 * 10 ** 8  # % of the fee


# coin -> pool -> is approved to transfer?
is_approved: HashMap[address, HashMap[address, bool]]


@external
def __init__():
    """
    @notice Contract constructor
    """
    for coin in BASE_COINS:
        ERC20(coin).approve(BASE_POOL, MAX_UINT256)


@external
def add_liquidity(
    _pool: address,
    _deposit_amounts: uint256[N_ALL_COINS],
    _min_mint_amount: uint256,
    _receiver: address = msg.sender,
) -> uint256:
    """
    @notice Wrap underlying coins and deposit them into `_pool`
    @param _pool Address of the pool to deposit into
    @param _deposit_amounts List of amounts of underlying coins to deposit
    @param _min_mint_amount Minimum amount of LP tokens to mint from the deposit
    @param _receiver Address that receives the LP tokens
    @return Amount of LP tokens received by depositing
    """
    meta_amounts: uint256[N_COINS] = empty(uint256[N_COINS])
    base_amounts: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS])
    deposit_base: bool = False
    base_coins: address[BASE_N_COINS] = BASE_COINS

    if _deposit_amounts[0] != 0:
        coin: address = CurveMeta(_pool).coins(0)
        if not self.is_approved[coin][_pool]:
            ERC20(coin).approve(_pool, MAX_UINT256)
            self.is_approved[coin][_pool] = True
        response: Bytes[32] = raw_call(
            coin,
            _abi_encode(
                msg.sender,
                self,
                _deposit_amounts[0],
                method_id=method_id("transferFrom(address,address,uint256)"),
            ),
            max_outsize=32
        )
        if len(response) != 0:
            assert convert(response, bool)
        # hand fee on transfer
        meta_amounts[0] = ERC20(coin).balanceOf(self)

    for i in range(1, N_ALL_COINS):
        amount: uint256 = _deposit_amounts[i]
        if amount == 0:
            continue
        deposit_base = True
        base_idx: uint256 = i - 1
        coin: address = base_coins[base_idx]

        response: Bytes[32] = raw_call(
            coin,
            _abi_encode(
                msg.sender,
                self,
                amount,
                method_id=method_id("transferFrom(address,address,uint256)"),
            ),
            max_outsize=32
        )
        if len(response) != 0:
            assert convert(response, bool)

        # Handle potential transfer fees (i.e. Tether/renBTC)
        base_amounts[base_idx] = ERC20(coin).balanceOf(self)

    # Deposit to the base pool
    if deposit_base:
        coin: address = BASE_LP_TOKEN
        CurveBase(BASE_POOL).add_liquidity(base_amounts, 0)
        meta_amounts[MAX_COIN] = ERC20(coin).balanceOf(self)
        if not self.is_approved[coin][_pool]:
            ERC20(coin).approve(_pool, MAX_UINT256)
            self.is_approved[coin][_pool] = True

    # Deposit to the meta pool
    return CurveMeta(_pool).add_liquidity(meta_amounts, _min_mint_amount, _receiver)


@external
def remove_liquidity(
    _pool: address,
    _burn_amount: uint256,
    _min_amounts: uint256[N_ALL_COINS],
    _receiver: address = msg.sender
) -> uint256[N_ALL_COINS]:
    """
    @notice Withdraw and unwrap coins from the pool
    @dev Withdrawal amounts are based on current deposit ratios
    @param _pool Address of the pool to deposit into
    @param _burn_amount Quantity of LP tokens to burn in the withdrawal
    @param _min_amounts Minimum amounts of underlying coins to receive
    @param _receiver Address that receives the LP tokens
    @return List of amounts of underlying coins that were withdrawn
    """
    response: Bytes[32] = raw_call(
        _pool,
        _abi_encode(
            msg.sender,
            self,
            _burn_amount,
            method_id=method_id("transferFrom(address,address,uint256)"),
        ),
        max_outsize=32
    )
    if len(response) != 0:
        assert convert(response, bool)

    min_amounts_base: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS])
    amounts: uint256[N_ALL_COINS] = empty(uint256[N_ALL_COINS])

    # Withdraw from meta
    meta_received: uint256[N_COINS] = empty(uint256[N_COINS])
    CurveMeta(_pool).remove_liquidity(_burn_amount, [_min_amounts[0], convert(0, uint256)])

    coins: address[N_COINS] = empty(address[N_COINS])
    for i in range(N_COINS):
        coin: address = CurveMeta(_pool).coins(i)
        coins[i] = coin
        # Handle fee on transfer for the first coin
        meta_received[i] = ERC20(coin).balanceOf(self)

    # Withdraw from base
    for i in range(BASE_N_COINS):
        min_amounts_base[i] = _min_amounts[MAX_COIN+i]
    CurveBase(BASE_POOL).remove_liquidity(meta_received[MAX_COIN], min_amounts_base)

    # Transfer all coins out
    response = raw_call(
        coins[0],  # metapool coin 0
        _abi_encode(
            _receiver,
            meta_received[0],
            method_id=method_id("transfer(address,uint256)"),
        ),
        max_outsize=32
    )
    if len(response) != 0:
        assert convert(response, bool)

    amounts[0] = meta_received[0]

    base_coins: address[BASE_N_COINS] = BASE_COINS
    for i in range(1, N_ALL_COINS):
        coin: address = base_coins[i-1]
        # handle potential fee on transfer
        amounts[i] = ERC20(coin).balanceOf(self)
        response = raw_call(
            coin,
            _abi_encode(
                _receiver,
                amounts[i],
                method_id=method_id("transfer(address,uint256)"),
            ),
            max_outsize=32
        )
        if len(response) != 0:
            assert convert(response, bool)


    return amounts


@external
def remove_liquidity_one_coin(
    _pool: address,
    _burn_amount: uint256,
    i: int128,
    _min_amount: uint256,
    _receiver: address=msg.sender
) -> uint256:
    """
    @notice Withdraw and unwrap a single coin from the pool
    @param _pool Address of the pool to deposit into
    @param _burn_amount Amount of LP tokens to burn in the withdrawal
    @param i Index value of the coin to withdraw
    @param _min_amount Minimum amount of underlying coin to receive
    @param _receiver Address that receives the LP tokens
    @return Amount of underlying coin received
    """
    response: Bytes[32] = raw_call(
        _pool,
        _abi_encode(
            msg.sender,
            self,
            _burn_amount,
            method_id=method_id("transferFrom(address,address,uint256)"),
        ),
        max_outsize=32
    )
    if len(response) != 0:
        assert convert(response, bool)


    coin_amount: uint256 = 0
    if i == 0:
        coin_amount = CurveMeta(_pool).remove_liquidity_one_coin(_burn_amount, i, _min_amount, _receiver)
    else:
        base_coins: address[BASE_N_COINS] = BASE_COINS
        coin: address = base_coins[i - MAX_COIN]
        # Withdraw a base pool coin
        coin_amount = CurveMeta(_pool).remove_liquidity_one_coin(_burn_amount, MAX_COIN, 0, self)
        CurveBase(BASE_POOL).remove_liquidity_one_coin(coin_amount, i-MAX_COIN, _min_amount)
        coin_amount = ERC20(coin).balanceOf(self)
        response = raw_call(
            coin,
            _abi_encode(
                _receiver,
                coin_amount,
                method_id=method_id("transfer(address,uint256)"),
            ),
            max_outsize=32
        )
        if len(response) != 0:
            assert convert(response, bool)


    return coin_amount


@external
def remove_liquidity_imbalance(
    _pool: address,
    _amounts: uint256[N_ALL_COINS],
    _max_burn_amount: uint256,
    _receiver: address=msg.sender
) -> uint256:
    """
    @notice Withdraw coins from the pool in an imbalanced amount
    @param _pool Address of the pool to deposit into
    @param _amounts List of amounts of underlying coins to withdraw
    @param _max_burn_amount Maximum amount of LP token to burn in the withdrawal
    @param _receiver Address that receives the LP tokens
    @return Actual amount of the LP token burned in the withdrawal
    """
    fee: uint256 = CurveBase(BASE_POOL).fee() * BASE_N_COINS / (4 * (BASE_N_COINS - 1))
    fee += fee * FEE_IMPRECISION / FEE_DENOMINATOR  # Overcharge to account for imprecision

    # Transfer the LP token in
    response: Bytes[32] = raw_call(
        _pool,
        _abi_encode(
            msg.sender,
            self,
            _max_burn_amount,
            method_id=method_id("transferFrom(address,address,uint256)"),
        ),
        max_outsize=32
    )
    if len(response) != 0:
        assert convert(response, bool)

    withdraw_base: bool = False
    amounts_base: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS])
    amounts_meta: uint256[N_COINS] = empty(uint256[N_COINS])

    # determine amounts to withdraw from base pool
    for i in range(BASE_N_COINS):
        amount: uint256 = _amounts[MAX_COIN + i]
        if amount != 0:
            amounts_base[i] = amount
            withdraw_base = True

    # determine amounts to withdraw from metapool
    amounts_meta[0] = _amounts[0]
    if withdraw_base:
        amounts_meta[MAX_COIN] = CurveBase(BASE_POOL).calc_token_amount(amounts_base, False)
        amounts_meta[MAX_COIN] += amounts_meta[MAX_COIN] * fee / FEE_DENOMINATOR + 1

    # withdraw from metapool and return the remaining LP tokens
    burn_amount: uint256 = CurveMeta(_pool).remove_liquidity_imbalance(amounts_meta, _max_burn_amount)
    response = raw_call(
        _pool,
        _abi_encode(
            msg.sender,
            _max_burn_amount - burn_amount,
            method_id=method_id("transfer(address,uint256)"),
        ),
        max_outsize=32
    )
    if len(response) != 0:
        assert convert(response, bool)


    # withdraw from base pool
    if withdraw_base:
        CurveBase(BASE_POOL).remove_liquidity_imbalance(amounts_base, amounts_meta[MAX_COIN])
        coin: address = BASE_LP_TOKEN
        leftover: uint256 = ERC20(coin).balanceOf(self)

        if leftover > 0:
            # if some base pool LP tokens remain, re-deposit them for the caller
            if not self.is_approved[coin][_pool]:
                ERC20(coin).approve(_pool, MAX_UINT256)
                self.is_approved[coin][_pool] = True
            burn_amount -= CurveMeta(_pool).add_liquidity([convert(0, uint256), leftover], 0, msg.sender)

        # transfer withdrawn base pool tokens to caller
        base_coins: address[BASE_N_COINS] = BASE_COINS
        for i in range(BASE_N_COINS):
            response = raw_call(
                base_coins[i],
                _abi_encode(
                    _receiver,
                    ERC20(base_coins[i]).balanceOf(self),  # handle potential transfer fees
                    method_id=method_id("transfer(address,uint256)"),
                ),
                max_outsize=32
            )
            if len(response) != 0:
                assert convert(response, bool)


    # transfer withdrawn metapool tokens to caller
    if _amounts[0] > 0:
        coin: address = CurveMeta(_pool).coins(0)
        response = raw_call(
            coin,
            _abi_encode(
                _receiver,
                ERC20(coin).balanceOf(self),  # handle potential fees
                method_id=method_id("transfer(address,uint256)"),
            ),
            max_outsize=32
        )
        if len(response) != 0:
            assert convert(response, bool)


    return burn_amount


@view
@external
def calc_withdraw_one_coin(_pool: address, _token_amount: uint256, i: int128) -> uint256:
    """
    @notice Calculate the amount received when withdrawing and unwrapping a single coin
    @param _pool Address of the pool to deposit into
    @param _token_amount Amount of LP tokens to burn in the withdrawal
    @param i Index value of the underlying coin to withdraw
    @return Amount of coin received
    """
    if i < MAX_COIN:
        return CurveMeta(_pool).calc_withdraw_one_coin(_token_amount, i)
    else:
        _base_tokens: uint256 = CurveMeta(_pool).calc_withdraw_one_coin(_token_amount, MAX_COIN)
        return CurveBase(BASE_POOL).calc_withdraw_one_coin(_base_tokens, i-MAX_COIN)


@view
@external
def calc_token_amount(_pool: address, _amounts: uint256[N_ALL_COINS], _is_deposit: bool) -> uint256:
    """
    @notice Calculate addition or reduction in token supply from a deposit or withdrawal
    @dev This calculation accounts for slippage, but not fees.
         Needed to prevent front-running, not for precise calculations!
    @param _pool Address of the pool to deposit into
    @param _amounts Amount of each underlying coin being deposited
    @param _is_deposit set True for deposits, False for withdrawals
    @return Expected amount of LP tokens received
    """
    meta_amounts: uint256[N_COINS] = empty(uint256[N_COINS])
    base_amounts: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS])

    meta_amounts[0] = _amounts[0]
    for i in range(BASE_N_COINS):
        base_amounts[i] = _amounts[i + MAX_COIN]

    base_tokens: uint256 = CurveBase(BASE_POOL).calc_token_amount(base_amounts, _is_deposit)
    meta_amounts[MAX_COIN] = base_tokens

    return CurveMeta(_pool).calc_token_amount(meta_amounts, _is_deposit)

Contract ABI

[{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_liquidity","inputs":[{"name":"_pool","type":"address"},{"name":"_deposit_amounts","type":"uint256[3]"},{"name":"_min_mint_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"add_liquidity","inputs":[{"name":"_pool","type":"address"},{"name":"_deposit_amounts","type":"uint256[3]"},{"name":"_min_mint_amount","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_pool","type":"address"},{"name":"_burn_amount","type":"uint256"},{"name":"_min_amounts","type":"uint256[3]"}],"outputs":[{"name":"","type":"uint256[3]"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_pool","type":"address"},{"name":"_burn_amount","type":"uint256"},{"name":"_min_amounts","type":"uint256[3]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256[3]"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"_pool","type":"address"},{"name":"_burn_amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"_min_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"_pool","type":"address"},{"name":"_burn_amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"_min_amount","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_imbalance","inputs":[{"name":"_pool","type":"address"},{"name":"_amounts","type":"uint256[3]"},{"name":"_max_burn_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_imbalance","inputs":[{"name":"_pool","type":"address"},{"name":"_amounts","type":"uint256[3]"},{"name":"_max_burn_amount","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"calc_withdraw_one_coin","inputs":[{"name":"_pool","type":"address"},{"name":"_token_amount","type":"uint256"},{"name":"i","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5753},{"stateMutability":"view","type":"function","name":"calc_token_amount","inputs":[{"name":"_pool","type":"address"},{"name":"_amounts","type":"uint256[3]"},{"name":"_is_deposit","type":"bool"}],"outputs":[{"name":"","type":"uint256"}],"gas":6289}]

7317fc002b466eec40dae837fc4be5c67993ddbd6f6101805273ff970a61a04b1ca14834a43f5de4533ebddb5cc86101a05261016060006002818352015b60206101605102610180015161014052610140513b15611baf5760006000604463095ea7b36101c05273c9b8a3fdecb9d5b218d02555a8baf332e5b740d56101e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610200526101dc6000610140515af115611baf575b815160010180835281141561003d575b5050611b9756600436101561000d57611ac0565b600035601c5260005134611ac65763a318517981141561003157336101405261005c565b63e07a10368114156100575760a43560a01c611ac657602060a46101403760005061005c565b6105f3565b60043560a01c611ac65760a036610160377317fc002b466eec40dae837fc4be5c67993ddbd6f6102005273ff970a61a04b1ca14834a43f5de4533ebddb5cc8610220526000602435181561029b5760206102e0602463c66106576102605260006102805261027c6004355afa15611ac657601f3d1115611ac6576000506102e0516102405260006102405160e05260c052604060c02060043560e05260c052604060c0205461017d57610240513b15611ac65760006000604463095ea7b361026052600435610280527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102a05261027c6000610240515af115611ac657600160006102405160e05260c052604060c02060043560e05260c052604060c020555b6323b872dd6102c45260046102e4808080338152505060208101905080803081525050602081019050808060243581525050606090509050016102c0526102c08051602001806103608284600060045af115611ac65750506020610420610360516103806000610240515af115611ac65760203d808211156101ff5780610201565b815b90509050610400526104008051602001806102608284600060045af115611ac65750506000610260511815610263576102608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b602061034060246370a082316102c052306102e0526102dc610240515afa15611ac657601f3d1115611ac65760005061034051610160525b61024060016002818352015b6024610240516003811015611ac657602002013561026052610260516102cc57610433565b60016101e052610240516001808210611ac6578082039050905061028052610200610280516002811015611ac65760200201516102a0526323b872dd6103245260046103448080803381525050602081019050808030815250506020810190508080610260518152505060609050905001610320526103208051602001806103c08284600060045af115611ac657505060206104806103c0516103e060006102a0515af115611ac65760203d808211156103865780610388565b815b90509050610460526104608051602001806102c08284600060045af115611ac657505060006102c05118156103ea576102c08060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b60206103a060246370a0823161032052306103405261033c6102a0515afa15611ac657601f3d1115611ac6576000506103a0516101a0610280516002811015611ac65760200201525b81516001018083528114156102a7575b50506101e0511561059c5773c9b8a3fdecb9d5b218d02555a8baf332e5b740d56102405273c9b8a3fdecb9d5b218d02555a8baf332e5b740d53b15611ac657600060006064630b4c7e4d610260526101a051610280526101c0516102a05260006102c05261027c600073c9b8a3fdecb9d5b218d02555a8baf332e5b740d55af115611ac65760206102e060246370a0823161026052306102805261027c610240515afa15611ac657601f3d1115611ac6576000506102e0516101805260006102405160e05260c052604060c02060043560e05260c052604060c0205461059b57610240513b15611ac65760006000604463095ea7b361026052600435610280527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102a05261027c6000610240515af115611ac657600160006102405160e05260c052604060c02060043560e05260c052604060c020555b5b60206103206084630c3e4b5461024052610160516102605261018051610280526084356102a052610140516102c05261025c60006004355af115611ac657601f3d1115611ac6576000506103205160005260206000f35b638fa892a6811415610609573361014052610634565b6311d4b6aa81141561062f5760a43560a01c611ac657602060a461014037600050610634565b610b86565b60043560a01c611ac6576323b872dd6101c45260046101e4808080338152505060208101905080803081525050602081019050808060243581525050606090509050016101c0526101c08051602001806102608284600060045af115611ac657505060206103206102605161028060006004355af115611ac65760203d808211156106bf57806106c1565b815b90509050610300526103008051602001806101608284600060045af115611ac65750506000610160511815610723576101608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b60e0366101c0376004353b15611ac657600060006064635b36389c6102c0526024356102e05260006102a052604435610300526102a051610320526102dc60006004355af115611ac6576040366102a0376102e060006002818352015b60206103a0602463c6610657610320526102e0516103405261033c6004355afa15611ac657601f3d1115611ac6576000506103a05161030052610300516102a06102e0516002811015611ac657602002015260206103a060246370a0823161032052306103405261033c610300515afa15611ac657601f3d1115611ac6576000506103a0516102606102e0516002811015611ac65760200201525b8151600101808352811415610780575b50506102e060006002818352015b604460016102e0518181830110611ac657808201905090506003811015611ac65760200201356101c06102e0516002811015611ac65760200201525b8151600101808352811415610839575b505073c9b8a3fdecb9d5b218d02555a8baf332e5b740d53b15611ac657600060006064635b36389c6102e05261028051610300526101c051610320526101e051610340526102fc600073c9b8a3fdecb9d5b218d02555a8baf332e5b740d55af115611ac65763a9059cbb6102e4526004610304808080610140518152505060208101905080806102605181525050604090509050016102e0526102e08051602001806103608284600060045af115611ac657505060206104006103605161038060006102a0515af115611ac65760203d808211156109635780610965565b815b905090506103e0526103e08051602001806101608284600060045af115611ac657505060006101605118156109c7576101608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b61026051610200527317fc002b466eec40dae837fc4be5c67993ddbd6f6102e05273ff970a61a04b1ca14834a43f5de4533ebddb5cc86103005261032060016002818352015b6102e0610320516001808210611ac657808203905090506002811015611ac65760200201516103405260206103e060246370a0823161036052306103805261037c610340515afa15611ac657601f3d1115611ac6576000506103e051610200610320516003811015611ac657602002015263a9059cbb61036452600461038480808061014051815250506020810190508080610200610320516003811015611ac65760200201518152505060409050905001610360526103608051602001806103e08284600060045af115611ac657505060206104806103e0516104006000610340515af115611ac65760203d80821115610b085780610b0a565b815b90509050610460526104608051602001806101608284600060045af115611ac65750506000610160511815610b6c576101608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b5b8151600101808352811415610a0d575b50506060610200f35b6329ed2862811415610b9c573361014052610bc7565b631e700cbb811415610bc25760843560a01c611ac6576020608461014037600050610bc7565b610f6c565b60043560a01c611ac65760443580607f1d8160801d1415611ac657809050506323b872dd6101c45260046101e4808080338152505060208101905080803081525050602081019050808060243581525050606090509050016101c0526101c08051602001806102608284600060045af115611ac657505060206103206102605161028060006004355af115611ac65760203d80821115610c675780610c69565b815b90509050610300526103008051602001806101608284600060045af115611ac65750506000610160511815610ccb576101608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b60006101c052604435610d205760206102c0608463081579a56101e052606060246102003761014051610260526101fc60006004355af115611ac657601f3d1115611ac6576000506102c0516101c052610f5f565b7317fc002b466eec40dae837fc4be5c67993ddbd6f6101e05273ff970a61a04b1ca14834a43f5de4533ebddb5cc8610200526101e0604435600180820380607f1d8160801d1415611ac657809050905090506002811015611ac6576020020151610220526020610320608463081579a5610240526024356102605260016102805260006102a052306102c05261025c60006004355af115611ac657601f3d1115611ac657600050610320516101c05273c9b8a3fdecb9d5b218d02555a8baf332e5b740d53b15611ac657600060006064631a4d01d2610240526101c05161026052604435600180820380607f1d8160801d1415611ac65780905090509050610280526064356102a05261025c600073c9b8a3fdecb9d5b218d02555a8baf332e5b740d55af115611ac65760206102c060246370a0823161024052306102605261025c610220515afa15611ac657601f3d1115611ac6576000506102c0516101c05263a9059cbb610244526004610264808080610140518152505060208101905080806101c0518152505060409050905001610240526102408051602001806102c08284600060045af115611ac657505060206103606102c0516102e06000610220515af115611ac65760203d80821115610efa5780610efc565b815b90509050610340526103408051602001806101608284600060045af115611ac65750506000610160511815610f5e576101608060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b5b6101c05160005260206000f35b6343d532a7811415610f82573361014052610fad565b636755b454811415610fa85760a43560a01c611ac657602060a461014037600050610fad565b61185e565b60043560a01c611ac65760206101e0600463ddca3f436101805261019c73c9b8a3fdecb9d5b218d02555a8baf332e5b740d55afa15611ac657601f3d1115611ac6576000506101e0516002808202821582848304141715611ac65780905090509050600480820490509050610160526101608051610160516402540be400808202821582848304141715611ac657809050905090506402540be400808204905090508181830110611ac657808201905090508152506323b872dd6101e4526004610204808080338152505060208101905080803081525050602081019050808060843581525050606090509050016101e0526101e08051602001806102808284600060045af115611ac65750506020610340610280516102a060006004355af115611ac65760203d808211156110e357806110e5565b815b90509050610320526103208051602001806101808284600060045af115611ac65750506000610180511815611147576101808060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b60a0366101e03761028060006002818352015b60246001610280518181830110611ac657808201905090506003811015611ac65760200201356102a05260006102a05118156111b0576102a051610200610280516002811015611ac657602002015260016101e0525b5b815160010180835281141561115a575b5050602435610240526101e05115611283576020610340606463ed8e84f361028052610200516102a052610220516102c05260006102e05261029c73c9b8a3fdecb9d5b218d02555a8baf332e5b740d55afa15611ac657601f3d1115611ac657600050610340516102605261026080516102605161016051808202821582848304141715611ac657809050905090506402540be4008082049050905060018181830110611ac657808201905090508181830110611ac657808201905090508152505b6020610360606463e31032736102a052610240516102c052610260516102e052608435610300526102bc60006004355af115611ac657601f3d1115611ac657600050610360516102805263a9059cbb6102a45260046102c48080803381525050602081019050808060843561028051808210611ac6578082039050905081525050604090509050016102a0526102a08051602001806103208284600060045af115611ac657505060206103c06103205161034060006004355af115611ac65760203d808211156113535780611355565b815b905090506103a0526103a08051602001806101808284600060045af115611ac657505060006101805118156113b7576101808060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b6101e051156117025773c9b8a3fdecb9d5b218d02555a8baf332e5b740d53b15611ac65760006000606463e31032736102a052610200516102c052610220516102e05261026051610300526102bc600073c9b8a3fdecb9d5b218d02555a8baf332e5b740d55af115611ac65773c9b8a3fdecb9d5b218d02555a8baf332e5b740d56102a052602061036060246370a082316102e05230610300526102fc6102a0515afa15611ac657601f3d1115611ac657600050610360516102c05260006102c05111156115825760006102a05160e05260c052604060c02060043560e05260c052604060c0205461151b576102a0513b15611ac65760006000604463095ea7b36102e052600435610300527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610320526102fc60006102a0515af115611ac657600160006102a05160e05260c052604060c02060043560e05260c052604060c020555b610280805160206103e06084630c3e4b546103005260006102e0526102e051610320526102c05161034052600061036052336103805261031c60006004355af115611ac657601f3d1115611ac6576000506103e051808210611ac657808203905090508152505b7317fc002b466eec40dae837fc4be5c67993ddbd6f6102e05273ff970a61a04b1ca14834a43f5de4533ebddb5cc86103005261032060006002818352015b63a9059cbb6103e45260046104048080806101405181525050602081019050808060206103c060246370a0823161034052306103605261035c6102e0610320516002811015611ac65760200201515afa15611ac657601f3d1115611ac6576000506103c05181525050604090509050016103e0526103e08051602001806104608284600060045af115611ac657505060206105006104605161048060006102e0610320516002811015611ac65760200201515af115611ac65760203d8082111561168a578061168c565b815b905090506104e0526104e08051602001806101808284600060045af115611ac657505060006101805118156116ee576101808060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b5b81516001018083528114156115c0575b50505b60006024351115611851576020610340602463c66106576102c05260006102e0526102dc6004355afa15611ac657601f3d1115611ac657600050610340516102a05263a9059cbb61036452600461038480808061014051815250506020810190508080602061034060246370a082316102c052306102e0526102dc6102a0515afa15611ac657601f3d1115611ac657600050610340518152505060409050905001610360526103608051602001806103e08284600060045af115611ac657505060206104806103e05161040060006102a0515af115611ac65760203d808211156117ec57806117ee565b815b90509050610460526104608051602001806101808284600060045af115611ac65750506000610180511815611850576101808060200151600082518060209013611ac65780919012611ac657806020036101000a820490509050905015611ac6575b5b6102805160005260206000f35b6341b028f38114156119875760043560a01c611ac65760443580607f1d8160801d1415611ac65780905050600160443512156118d65760206101e0604463cc2b27d761014052604060246101603761015c6004355afa15611ac657601f3d1115611ac6576000506101e05160005260206000f3611985565b6020610200604463cc2b27d7610160526024356101805260016101a05261017c6004355afa15611ac657601f3d1115611ac65760005061020051610140526020610200604463cc2b27d7610160526101405161018052604435600180820380607f1d8160801d1415611ac657809050905090506101a05261017c73c9b8a3fdecb9d5b218d02555a8baf332e5b740d55afa15611ac657601f3d1115611ac6576000506102005160005260206000f35b005b6343bff3cc811415611abe5760043560a01c611ac65760843560011c611ac65760803661014037602435610140526101c060006002818352015b60246101c05160018181830110611ac657808201905090506003811015611ac65760200201356101806101c0516002811015611ac65760200201525b81516001018083528114156119c1575b505060206102a0606463ed8e84f36101e05261018051610200526101a05161022052608435610240526101fc73c9b8a3fdecb9d5b218d02555a8baf332e5b740d55afa15611ac657601f3d1115611ac6576000506102a0516101c0526101c0516101605260206102a0606463ed8e84f36101e05261014051610200526101605161022052608435610240526101fc6004355afa15611ac657601f3d1115611ac6576000506102a05160005260206000f35b505b60006000fd5b600080fd5b6100cc611b97036100cc6000396100cc611b97036000f35b600080fd

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.