ETH Price: $4,484.51 (-4.75%)

Contract

0xA72C85C258A81761433B4e8da60505Fe3Dd551CC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

# @version 0.3.7

# A "zap" for crypto pools to get_dx
# (c) Curve.Fi, 2023

interface ERC20:
    def decimals() -> uint256: view

interface Curve:
    def A() -> uint256: view
    def gamma() -> uint256: view
    def price_scale(i: uint256) -> uint256: view
    def coins(i: uint256) -> address: view
    def balances(i: uint256) -> uint256: view
    def D() -> uint256: view
    def fee_calc(xp: uint256[3]) -> uint256: view
    def future_A_gamma_time() -> uint256: view

interface Curve2:
    def price_scale() -> uint256: view

interface Math3:
    def newton_D(ANN: uint256, gamma: uint256, x_unsorted: uint256[3]) -> uint256: view
    def newton_y(ANN: uint256, gamma: uint256, x: uint256[3], D: uint256, i: uint256) -> uint256: view

interface Math2:
    def newton_D(ANN: uint256, gamma: uint256, x_unsorted: uint256[2]) -> uint256: view
    def newton_y(ANN: uint256, gamma: uint256, x: uint256[2], D: uint256, i: uint256) -> uint256: view
    def fee_calc(pool: address, xp: uint256[2]) -> uint256: view

interface StablePool:
    def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view

interface StableCalcZap:
    def calc_token_amount(pool: address, token: address, amounts: uint256[MAX_COINS], n_coins: uint256, deposit: bool, use_underlying: bool) -> uint256: view
    def get_dx_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view

interface AtricryptoZap:
    def calc_token_amount(amounts: uint256[5], deposit: bool) -> uint256: view
    def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view


STABLE_CALC_ZAP: constant(address) = 0xCA8d0747B5573D69653C3aC22242e6341C36e4b4
MATH2: constant(address) = 0x69522fb5337663d3B4dFB0030b881c1A750Adb4f
MATH3: constant(address) = 0x4f37A9d177470499A2dD084621020b023fcffc1F
MAX_COINS: constant(uint256) = 10
PRECISION: constant(uint256) = 10**18  # The precision to convert to


@internal
@view
def _get_dx_2_coins(
        pool: address,
        i: uint256,
        j: uint256,
        dy: uint256,
        xp: DynArray[uint256, MAX_COINS],
        precisions: DynArray[uint256, MAX_COINS],
        price_scale: DynArray[uint256, MAX_COINS],
) -> uint256:
    A: uint256 = Curve(pool).A()
    gamma: uint256 = Curve(pool).gamma()
    D: uint256 = Curve(pool).D()
    _xp_initial: uint256[2] = [
        xp[0] * precisions[0],
        xp[1] * price_scale[0] * precisions[1] / PRECISION,
    ]
    if Curve(pool).future_A_gamma_time() > 0:
        D = Math2(MATH2).newton_D(A, gamma, _xp_initial)

    _fee: uint256 = 0
    x: uint256 = 0
    for k in range(10):
        _xp: uint256[2] = [xp[0], xp[1]]
        _xp[j] -= dy * 10 ** 10 / (10 ** 10 - _fee)
        _xp[0] *= precisions[0]
        _xp[1] = _xp[1] * price_scale[0] * precisions[1] / PRECISION
        x = Math2(MATH2).newton_y(A, gamma, _xp, D, i)
        _xp[i] = x
        _fee = Math2(MATH2).fee_calc(pool, _xp)

    dx: uint256 = x - _xp_initial[i] + 1
    if i > 0:
        dx = dx * PRECISION / price_scale[i - 1]
    dx /= precisions[i]

    return dx


@internal
@view
def _get_dx_3_coins(
        pool: address,
        i: uint256,
        j: uint256,
        dy: uint256,
        xp: DynArray[uint256, MAX_COINS],
        precisions: DynArray[uint256, MAX_COINS],
        price_scale: DynArray[uint256, MAX_COINS],
) -> uint256:
    A: uint256 = Curve(pool).A()
    gamma: uint256 = Curve(pool).gamma()
    D: uint256 = Curve(pool).D()
    _xp_initial: uint256[3] = [
        xp[0] * precisions[0],
        xp[1] * price_scale[0] * precisions[1] / PRECISION,
        xp[2] * price_scale[1] * precisions[2] / PRECISION,
    ]
    if Curve(pool).future_A_gamma_time() > 0:
        D = Math3(MATH3).newton_D(A, gamma, _xp_initial)

    # Calc new balances without fees

    _fee: uint256 = 0
    x: uint256 = 0
    for k in range(10):
        _xp: uint256[3] = [xp[0], xp[1], xp[2]]
        _xp[j] -= dy * 10**10 / (10**10 - _fee)
        _xp[0] *= precisions[0]
        _xp[1] = _xp[1] * price_scale[0] * precisions[1] / PRECISION
        _xp[2] = _xp[2] * price_scale[1] * precisions[2] / PRECISION
        x = Math3(MATH3).newton_y(A, gamma, _xp, D, i)
        _xp[i] = x
        _fee = Curve(pool).fee_calc(_xp)

    dx: uint256 = x - _xp_initial[i] + 1
    if i > 0:
        dx = dx * PRECISION / price_scale[i - 1]
    dx /= precisions[i]

    return dx


@internal
@view
def _get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256:
    assert i != j and i < MAX_COINS and j < MAX_COINS, "coin index out of range"
    assert dy > 0, "do not exchange 0 coins"

    precisions: DynArray[uint256, MAX_COINS] = []
    xp: DynArray[uint256, MAX_COINS] = []
    for k in range(MAX_COINS):
        if k == n_coins:
            break
        xp.append(Curve(pool).balances(k))
        coin: address = Curve(pool).coins(k)
        precisions.append(10**(18 - ERC20(coin).decimals()))

    price_scale: DynArray[uint256, MAX_COINS] = []
    for k in range(MAX_COINS):
        if k == n_coins - 1:
            break
        if n_coins == 2:
            price_scale.append(Curve2(pool).price_scale())
            break
        price_scale.append(Curve(pool).price_scale(k))

    if n_coins == 3:
        return self._get_dx_3_coins(pool, i, j, dy, xp, precisions, price_scale)
    else:
        return self._get_dx_2_coins(pool, i, j, dy, xp, precisions, price_scale)


@external
@view
def get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired output amount.
    @param pool Address of the pool
    @param i Input coin index
    @param j Output coin index
    @param dy Desired amount of the coin going out
    @param n_coins Number of coins in the pool
    @return Required input amount
    """
    return self._get_dx(pool, i, j, dy, n_coins)


@external
@view
def get_dx_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired output amount.
            For underlying calculations in meta pool of a type [coin, stable-pool-LP].
    @param pool Address of the pool
    @param i Input coin index
    @param j Output coin index
    @param dy Desired amount of the coin going out
    @param n_coins Number of coins in the pool
    @param base_pool Address of the base pool
    @param base_token Address of the base pool's LP token
    @return Required input amount
    """
    # [coin] + [...n_meta_coins...]
    if i > 0 and j > 0:  # meta_coin1 -> meta_coin2
        return StableCalcZap(STABLE_CALC_ZAP).get_dx_underlying(base_pool, convert(i - 1, int128), convert(j - 1, int128), dy, n_coins - 1)
    elif i == 0:  # coin -> meta_coin
        # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin)
        # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False)
        # 2. dx = get_dx(0, 1, lp_amount)
        base_amounts: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
        base_amounts[j - 1] = dy
        lp_amount: uint256 = StableCalcZap(STABLE_CALC_ZAP).calc_token_amount(base_pool, base_token, base_amounts, n_coins - 1, False, True)
        return self._get_dx(pool, 0, 1, lp_amount, 2)
    else:  # j == 0, meta_coin -> coin
        # meta_coin -(add)-> LP -(swap)-> coin (dy - coin)
        # 1. lp_amount = get_dx(1, 0, dy)
        # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1)
        lp_amount: uint256 = self._get_dx(pool, 1, 0, dy, 2)
        # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough.
        return StablePool(base_pool).calc_withdraw_one_coin(lp_amount, convert(i - 1, int128))


@internal
@view
def _get_dx_tricrypto_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256:
    # [...n_meta_coins...] + [coin1, coin2]
    n_meta_coins: uint256 = n_coins - 2
    if i < n_meta_coins and j < n_meta_coins:  # meta_coin1 -> meta_coin2
        return StableCalcZap(STABLE_CALC_ZAP).get_dx_underlying(base_pool, convert(i, int128), convert(j, int128), dy, n_meta_coins)
    elif i >= n_meta_coins and j >= n_meta_coins:  # coin1 -> coin2
        return self._get_dx(pool, i - n_meta_coins + 1, j - n_meta_coins + 1, dy, 3)
    elif i >= n_meta_coins:  # coin -> meta_coin
        # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin)
        # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False)
        # 2. dx = get_dx(1 or 2, 0, lp_amount)
        base_amounts: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
        base_amounts[j] = dy
        lp_amount: uint256 = StableCalcZap(STABLE_CALC_ZAP).calc_token_amount(base_pool, base_token, base_amounts, n_meta_coins, False, True)
        return self._get_dx(pool, i - n_meta_coins + 1, 0, lp_amount, 3)
    else:  # j >= n_meta_coins, meta_coin -> coin
        # meta_coin -(add)-> LP -(swap)-> coin (dy - coin)
        # 1. lp_amount = get_dx(0, 1 or 2, dy)
        # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1)
        lp_amount: uint256 = self._get_dx(pool, 0, j - n_meta_coins + 1, dy, 3)
        # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough.
        return StablePool(base_pool).calc_withdraw_one_coin(lp_amount, convert(i, int128))


@external
@view
def get_dx_tricrypto_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired output amount.
            For underlying calculations in meta pool of a type [stable-pool-LP, coin1, coin2].
            xDAI (Gnosis): tricrypto
            Polygon: atricrypto3
            Avalanche: atricrypto, avaxcrypto
    @param pool Address of the pool
    @param i Input coin index
    @param j Output coin index
    @param dy Desired amount of the coin going out
    @param n_coins Number of coins in the pool
    @param base_pool Address of the base pool
    @param base_token Address of the base pool's LP token
    @return Required input amount
    """
    return self._get_dx_tricrypto_meta_underlying(pool, i, j, dy, n_coins, base_pool, base_token)


@external
@view
def get_dx_double_meta_underlying(
        pool: address,
        i: uint256,
        j: uint256,
        dy: uint256,
        base_pool: address,
        base_pool_zap: address,
        second_base_pool: address,
        second_base_token: address,
) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired output amount.
            For underlying calculations in double meta pool of a type [coin, tricrypto-meta-pool-LP].
            Polygon: crv/tricrypto and wmatic/tricrypto.
    @param pool Address of the pool
    @param i Input coin index
    @param j Output coin index
    @param dy Desired amount of the coin going out
    @param base_pool Address of the base pool
    @param base_pool_zap Address of the base pool's zap for underlying calc_token_amount
    @param second_base_pool Address of the second base pool
    @param second_base_token Address of the second base pool's LP token
    @return Required input amount
    """
    # [coin] + [...n_meta_coins...]
    if i > 0 and j > 0:  # meta_coin1 -> meta_coin2
        return self._get_dx_tricrypto_meta_underlying(base_pool, i - 1, j - 1, dy, 5, second_base_pool, second_base_token)
    elif i == 0:  # coin -> meta_coin
        # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin)
        # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False)
        # 2. dx = get_dx(0, 1, lp_amount)
        base_amounts: uint256[5] = empty(uint256[5])
        base_amounts[j - 1] = dy
        lp_amount: uint256 = AtricryptoZap(base_pool_zap).calc_token_amount(base_amounts, False)
        return self._get_dx(pool, 0, 1, lp_amount, 2)
    else:  # j == 0, meta_coin -> coin
        # meta_coin -(add)-> LP -(swap)-> coin (dy - coin)
        # 1. lp_amount = get_dx(1, 0, dy)
        # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1)
        lp_amount: uint256 = self._get_dx(pool, 1, 0, dy, 2)
        # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough.
        return AtricryptoZap(base_pool_zap).calc_withdraw_one_coin(lp_amount, i - 1)

Contract Security Audit

Contract ABI

API
[{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_tricrypto_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_double_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_pool_zap","type":"address"},{"name":"second_base_pool","type":"address"},{"name":"second_base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]

6118b5610011610000396118b5610000f36003361161000c576105da565b60003560e01c346118a35763ca4bc714811861005b5760a436106118a3576004358060a01c6118a357610c80526020610c8051610760526080602461078037610056610ca06110d6565b610ca0f35b638ca1565381186103285760e436106118a3576004358060a01c6118a357610c805260a4358060a01c6118a357610ca05260c4358060a01c6118a357610cc052602435156100ad5760443515156100b0565b60005b610284576024356101eb5761014036610ce037606435604435600181038181116118a3579050600981116118a35760051b610ce001526379ccdf49610e4052610ca051610e6052610cc051610e8052610ce051610ea052610d0051610ec052610d2051610ee052610d4051610f0052610d6051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052608435600181038181116118a3579050610fe0526000611000526001611020526020610e406101e4610e5c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa6101a0573d600060003e3d6000fd5b60203d106118a357610e4051610e20526020610c80516107605260006107805260016107a052610e20516107c05260026107e0526101df610e406110d6565b610e4061032656610326565b610c80516107605260016107805260006107a0526064356107c05260026107e052610217610d006110d6565b610d0051610ce0526020610ca05163cc2b27d7610d0052610ce051610d2052602435600181038181116118a357905080607f1c6118a357610d40526020610d006044610d1c845afa61026e573d600060003e3d6000fd5b60203d106118a357610d00905061032656610326565b6020638fd3218f610ce052610ca051610d0052602435600181038181116118a357905080607f1c6118a357610d2052604435600181038181116118a357905080607f1c6118a357610d4052606435610d6052608435600181038181116118a3579050610d80526020610ce060a4610cfc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa61031a573d600060003e3d6000fd5b60203d106118a357610ce05bf35b634020784b811861039a5760e436106118a3576004358060a01c6118a3576110e05260a4358060a01c6118a3576111005260c4358060a01c6118a3576111205260206110e051610c805260806024610ca03761110051610d205261112051610d405261039561114061154b565b611140f35b635c27cc9c81186105d85761010436106118a3576004358060a01c6118a3576110e0526084358060a01c6118a3576111005260a4358060a01c6118a3576111205260c4358060a01c6118a3576111405260e4358060a01c6118a357611160526024351561040b57604435151561040e565b60005b610578576024356104e75760a03661118037606435604435600181038181116118a3579050600481116118a35760051b611180015261112051637ede89c56112405261118051611260526111a051611280526111c0516112a0526111e0516112c052611200516112e052600061130052602061124060c461125c845afa61049a573d600060003e3d6000fd5b60203d106118a3576112409050516112205260206110e0516107605260006107805260016107a052611220516107c05260026107e0526104db6112406110d6565b6112406105d6566105d6565b6110e0516107605260016107805260006107a0526064356107c05260026107e0526105136111a06110d6565b6111a05161118052602061112051634fb08c5e6111a052611180516111c052602435600181038181116118a35790506111e05260206111a060446111bc845afa610562573d600060003e3d6000fd5b60203d106118a3576111a090506105d6566105d6565b602061110051610c8052602435600181038181116118a3579050610ca052604435600181038181116118a3579050610cc052606435610ce0526005610d005261114051610d205261116051610d40526105d261118061154b565b6111805bf35b505b60006000fd5b60405163f446c1d0610500526020610500600461051c845afa610608573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610642573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa61067c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105605260405163f9ed9597610580526020610580600461059c845afa610766573d600060003e3d6000fd5b60203d106118a357610580905051156107e35763b0872d5d6105c0526104e0516105e05261050051610600526105405161062052610560516106405260206105c060846105dc7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6107d2573d600060003e3d6000fd5b60203d106118a3576105c051610520525b604036610580376000600a905b806105c05260c051156118a357600060051b60e001516105e052600260c051106118a357600160051b60e0015161060052608051600181116118a35760051b6105e001805160a0516402540be4008102816402540be4008204186118a357905061058051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506105e05161022051156118a357600060051b61024001518082028115838383041417156118a357905090506105e0526106005161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610600526329fcfcf2610620526104e0516106405261050051610660526105e05161068052610600516106a052610520516106c0526060516106e052602061062060c461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa610984573d600060003e3d6000fd5b60203d106118a357610620516105a0526105a051606051600181116118a35760051b6105e0015263e83502fa61062052604051610640526105e0516106605261060051610680526020610620606461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6109fb573d600060003e3d6000fd5b60203d106118a35761062051610580526001018181186107f05750506105a051606051600181116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105c05260605115610aac576105c051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105c0525b6105c051606051610220518110156118a35760051b610240015180156118a357808204905090506105c0526105c051815250565b60405163f446c1d0610500526020610500600461051c845afa610b08573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610b42573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa610b7c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a76400008104905061056052600360c051106118a357600260051b60e00151600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105805260405163f9ed95976105a05260206105a060046105bc845afa610cdc573d600060003e3d6000fd5b60203d106118a3576105a090505115610d615763c7fab7086105e0526104e05161060052610500516106205261054051610640526105605161066052610580516106805260206105e060a46105fc734f37a9d177470499a2dd084621020b023fcffc1f5afa610d50573d600060003e3d6000fd5b60203d106118a3576105e051610520525b6040366105a0376000600a905b806105e05260c051156118a357600060051b60e0015161060052600260c051106118a357600160051b60e0015161062052600360c051106118a357600260051b60e0015161064052608051600281116118a35760051b61060001805160a0516402540be4008102816402540be4008204186118a35790506105a051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506106005161022051156118a357600060051b61024001518082028115838383041417156118a35790509050610600526106205161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506106205261064051600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610640526336bc8855610660526104e05161068052610500516106a052610600516106c052610620516106e0526106405161070052610520516107205260605161074052602061066060e461067c734f37a9d177470499a2dd084621020b023fcffc1f5afa610f88573d600060003e3d6000fd5b60203d106118a357610660516105c0526105c051606051600281116118a35760051b610600015260405163572e5625610660526106005161068052610620516106a052610640516106c0526020610660606461067c845afa610fef573d600060003e3d6000fd5b60203d106118a3576106609050516105a052600101818118610d6e5750506105c051606051600281116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105e052606051156110a2576105e051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105e0525b6105e051606051610220518110156118a35760051b610240015180156118a357808204905090506105e0526105e051815250565b6107a05161078051146111035760096107805111156110f6576000611106565b60096107a0511115611106565b60005b611170576017610800527f636f696e20696e646578206f7574206f662072616e67650000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6107c0516111de576017610800527f646f206e6f742065786368616e6765203020636f696e730000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6000610800526000610960526000600a905b80610ac0526107e051610ac0511861120757611333565b61096051600981116118a357600181016109605261076051634903b0d1610ae052610ac051610b00526020610ae06024610afc845afa61124c573d600060003e3d6000fd5b60203d106118a357610ae09050518160051b6109800152506107605163c6610657610b0052610ac051610b20526020610b006024610b1c845afa611295573d600060003e3d6000fd5b60203d106118a357610b00518060a01c6118a357610b4052610b40905051610ae05261080051600981116118a3576001810161080052610ae05163313ce567610b00526020610b006004610b1c845afa6112f4573d600060003e3d6000fd5b60203d106118a357610b0090505180601203601281116118a3579050604d81116118a35780600a0a90508160051b6108200152506001018181186111f0575b50506000610ac0526000600a905b80610c20526107e051600181038181116118a3579050610c20511861136557611432565b60026107e051186113ca57610ac051600981116118a35760018101610ac0526107605163b9e8c9fd610c40526020610c406004610c5c845afa6113ad573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250611432565b610ac051600981116118a35760018101610ac0526107605163a3f7cdd5610c4052610c2051610c60526020610c406024610c5c845afa61140f573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250600101818118611341575b505060036107e051186114c85761076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa5050506114b8610c20610ae0565b610c205181525061154956611549565b61076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa505050611541610c206105e0565b610c20518152505b565b610d0051600281038181116118a3579050610d6052610d6051610ca0511061157457600061157e565b610d6051610cc051105b61182057610d6051610ca05110156115975760006115a2565b610d6051610cc05110155b6117a157610d6051610ca051101561166557610c805161076052600061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611602610da06110d6565b610da051610d8052610d205163cc2b27d7610da052610d8051610dc052610ca05180607f1c6118a357610de0526020610da06044610dbc845afa61164b573d600060003e3d6000fd5b60203d106118a357610da09050518152506118a1566118a1565b61014036610d8037610ce051610cc051600981116118a35760051b610d8001526379ccdf49610ee052610d2051610f0052610d4051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052610e2051610fe052610e405161100052610e605161102052610e805161104052610ea05161106052610d60516110805260006110a05260016110c0526020610ee06101e4610efc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611733573d600060003e3d6000fd5b60203d106118a357610ee051610ec052610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a35790506107805260006107a052610ec0516107c05260036107e052611791610ee06110d6565b610ee0518152506118a1566118a1565b610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a357905061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611810610d806110d6565b610d80518152506118a1566118a1565b638fd3218f610d8052610d2051610da052610ca05180607f1c6118a357610dc052610cc05180607f1c6118a357610de052610ce051610e0052610d6051610e20526020610d8060a4610d9c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611891573d600060003e3d6000fd5b60203d106118a357610d80518152505b565b600080fda165767970657283000307000b

Deployed Bytecode

0x6003361161000c576105da565b60003560e01c346118a35763ca4bc714811861005b5760a436106118a3576004358060a01c6118a357610c80526020610c8051610760526080602461078037610056610ca06110d6565b610ca0f35b638ca1565381186103285760e436106118a3576004358060a01c6118a357610c805260a4358060a01c6118a357610ca05260c4358060a01c6118a357610cc052602435156100ad5760443515156100b0565b60005b610284576024356101eb5761014036610ce037606435604435600181038181116118a3579050600981116118a35760051b610ce001526379ccdf49610e4052610ca051610e6052610cc051610e8052610ce051610ea052610d0051610ec052610d2051610ee052610d4051610f0052610d6051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052608435600181038181116118a3579050610fe0526000611000526001611020526020610e406101e4610e5c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa6101a0573d600060003e3d6000fd5b60203d106118a357610e4051610e20526020610c80516107605260006107805260016107a052610e20516107c05260026107e0526101df610e406110d6565b610e4061032656610326565b610c80516107605260016107805260006107a0526064356107c05260026107e052610217610d006110d6565b610d0051610ce0526020610ca05163cc2b27d7610d0052610ce051610d2052602435600181038181116118a357905080607f1c6118a357610d40526020610d006044610d1c845afa61026e573d600060003e3d6000fd5b60203d106118a357610d00905061032656610326565b6020638fd3218f610ce052610ca051610d0052602435600181038181116118a357905080607f1c6118a357610d2052604435600181038181116118a357905080607f1c6118a357610d4052606435610d6052608435600181038181116118a3579050610d80526020610ce060a4610cfc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa61031a573d600060003e3d6000fd5b60203d106118a357610ce05bf35b634020784b811861039a5760e436106118a3576004358060a01c6118a3576110e05260a4358060a01c6118a3576111005260c4358060a01c6118a3576111205260206110e051610c805260806024610ca03761110051610d205261112051610d405261039561114061154b565b611140f35b635c27cc9c81186105d85761010436106118a3576004358060a01c6118a3576110e0526084358060a01c6118a3576111005260a4358060a01c6118a3576111205260c4358060a01c6118a3576111405260e4358060a01c6118a357611160526024351561040b57604435151561040e565b60005b610578576024356104e75760a03661118037606435604435600181038181116118a3579050600481116118a35760051b611180015261112051637ede89c56112405261118051611260526111a051611280526111c0516112a0526111e0516112c052611200516112e052600061130052602061124060c461125c845afa61049a573d600060003e3d6000fd5b60203d106118a3576112409050516112205260206110e0516107605260006107805260016107a052611220516107c05260026107e0526104db6112406110d6565b6112406105d6566105d6565b6110e0516107605260016107805260006107a0526064356107c05260026107e0526105136111a06110d6565b6111a05161118052602061112051634fb08c5e6111a052611180516111c052602435600181038181116118a35790506111e05260206111a060446111bc845afa610562573d600060003e3d6000fd5b60203d106118a3576111a090506105d6566105d6565b602061110051610c8052602435600181038181116118a3579050610ca052604435600181038181116118a3579050610cc052606435610ce0526005610d005261114051610d205261116051610d40526105d261118061154b565b6111805bf35b505b60006000fd5b60405163f446c1d0610500526020610500600461051c845afa610608573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610642573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa61067c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105605260405163f9ed9597610580526020610580600461059c845afa610766573d600060003e3d6000fd5b60203d106118a357610580905051156107e35763b0872d5d6105c0526104e0516105e05261050051610600526105405161062052610560516106405260206105c060846105dc7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6107d2573d600060003e3d6000fd5b60203d106118a3576105c051610520525b604036610580376000600a905b806105c05260c051156118a357600060051b60e001516105e052600260c051106118a357600160051b60e0015161060052608051600181116118a35760051b6105e001805160a0516402540be4008102816402540be4008204186118a357905061058051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506105e05161022051156118a357600060051b61024001518082028115838383041417156118a357905090506105e0526106005161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610600526329fcfcf2610620526104e0516106405261050051610660526105e05161068052610600516106a052610520516106c0526060516106e052602061062060c461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa610984573d600060003e3d6000fd5b60203d106118a357610620516105a0526105a051606051600181116118a35760051b6105e0015263e83502fa61062052604051610640526105e0516106605261060051610680526020610620606461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6109fb573d600060003e3d6000fd5b60203d106118a35761062051610580526001018181186107f05750506105a051606051600181116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105c05260605115610aac576105c051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105c0525b6105c051606051610220518110156118a35760051b610240015180156118a357808204905090506105c0526105c051815250565b60405163f446c1d0610500526020610500600461051c845afa610b08573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610b42573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa610b7c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a76400008104905061056052600360c051106118a357600260051b60e00151600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105805260405163f9ed95976105a05260206105a060046105bc845afa610cdc573d600060003e3d6000fd5b60203d106118a3576105a090505115610d615763c7fab7086105e0526104e05161060052610500516106205261054051610640526105605161066052610580516106805260206105e060a46105fc734f37a9d177470499a2dd084621020b023fcffc1f5afa610d50573d600060003e3d6000fd5b60203d106118a3576105e051610520525b6040366105a0376000600a905b806105e05260c051156118a357600060051b60e0015161060052600260c051106118a357600160051b60e0015161062052600360c051106118a357600260051b60e0015161064052608051600281116118a35760051b61060001805160a0516402540be4008102816402540be4008204186118a35790506105a051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506106005161022051156118a357600060051b61024001518082028115838383041417156118a35790509050610600526106205161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506106205261064051600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610640526336bc8855610660526104e05161068052610500516106a052610600516106c052610620516106e0526106405161070052610520516107205260605161074052602061066060e461067c734f37a9d177470499a2dd084621020b023fcffc1f5afa610f88573d600060003e3d6000fd5b60203d106118a357610660516105c0526105c051606051600281116118a35760051b610600015260405163572e5625610660526106005161068052610620516106a052610640516106c0526020610660606461067c845afa610fef573d600060003e3d6000fd5b60203d106118a3576106609050516105a052600101818118610d6e5750506105c051606051600281116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105e052606051156110a2576105e051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105e0525b6105e051606051610220518110156118a35760051b610240015180156118a357808204905090506105e0526105e051815250565b6107a05161078051146111035760096107805111156110f6576000611106565b60096107a0511115611106565b60005b611170576017610800527f636f696e20696e646578206f7574206f662072616e67650000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6107c0516111de576017610800527f646f206e6f742065786368616e6765203020636f696e730000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6000610800526000610960526000600a905b80610ac0526107e051610ac0511861120757611333565b61096051600981116118a357600181016109605261076051634903b0d1610ae052610ac051610b00526020610ae06024610afc845afa61124c573d600060003e3d6000fd5b60203d106118a357610ae09050518160051b6109800152506107605163c6610657610b0052610ac051610b20526020610b006024610b1c845afa611295573d600060003e3d6000fd5b60203d106118a357610b00518060a01c6118a357610b4052610b40905051610ae05261080051600981116118a3576001810161080052610ae05163313ce567610b00526020610b006004610b1c845afa6112f4573d600060003e3d6000fd5b60203d106118a357610b0090505180601203601281116118a3579050604d81116118a35780600a0a90508160051b6108200152506001018181186111f0575b50506000610ac0526000600a905b80610c20526107e051600181038181116118a3579050610c20511861136557611432565b60026107e051186113ca57610ac051600981116118a35760018101610ac0526107605163b9e8c9fd610c40526020610c406004610c5c845afa6113ad573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250611432565b610ac051600981116118a35760018101610ac0526107605163a3f7cdd5610c4052610c2051610c60526020610c406024610c5c845afa61140f573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250600101818118611341575b505060036107e051186114c85761076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa5050506114b8610c20610ae0565b610c205181525061154956611549565b61076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa505050611541610c206105e0565b610c20518152505b565b610d0051600281038181116118a3579050610d6052610d6051610ca0511061157457600061157e565b610d6051610cc051105b61182057610d6051610ca05110156115975760006115a2565b610d6051610cc05110155b6117a157610d6051610ca051101561166557610c805161076052600061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611602610da06110d6565b610da051610d8052610d205163cc2b27d7610da052610d8051610dc052610ca05180607f1c6118a357610de0526020610da06044610dbc845afa61164b573d600060003e3d6000fd5b60203d106118a357610da09050518152506118a1566118a1565b61014036610d8037610ce051610cc051600981116118a35760051b610d8001526379ccdf49610ee052610d2051610f0052610d4051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052610e2051610fe052610e405161100052610e605161102052610e805161104052610ea05161106052610d60516110805260006110a05260016110c0526020610ee06101e4610efc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611733573d600060003e3d6000fd5b60203d106118a357610ee051610ec052610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a35790506107805260006107a052610ec0516107c05260036107e052611791610ee06110d6565b610ee0518152506118a1566118a1565b610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a357905061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611810610d806110d6565b610d80518152506118a1566118a1565b638fd3218f610d8052610d2051610da052610ca05180607f1c6118a357610dc052610cc05180607f1c6118a357610de052610ce051610e0052610d6051610e20526020610d8060a4610d9c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611891573d600060003e3d6000fd5b60203d106118a357610d80518152505b565b600080fda165767970657283000307000b

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

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.