ETH Price: $3,270.23 (+0.64%)
Gas: 1 Gwei

Contract

0xcB636B81743Bb8a7F1E355DEBb7D33b07009cCCC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove_liquidity...200371732024-06-07 3:10:3551 days ago1717729835IN
0xcB636B81...07009cCCC
0 ETH0.0032223510.10941079
Remove_liquidity...199156932024-05-21 3:47:4768 days ago1716263267IN
0xcB636B81...07009cCCC
0 ETH0.002034089.77913377
Add_liquidity198995442024-05-18 21:34:4771 days ago1716068087IN
0xcB636B81...07009cCCC
0 ETH0.000702573.29877505
Add_liquidity198922762024-05-17 21:09:4772 days ago1715980187IN
0xcB636B81...07009cCCC
0 ETH0.000836193.98136938
Add_liquidity198867602024-05-17 2:37:2372 days ago1715913443IN
0xcB636B81...07009cCCC
0 ETH0.00069713.31899196
Add_liquidity198827712024-05-16 13:15:1173 days ago1715865311IN
0xcB636B81...07009cCCC
0 ETH0.003923147.97947034
Add_liquidity198823752024-05-16 11:55:3573 days ago1715860535IN
0xcB636B81...07009cCCC
0 ETH0.002139194.44042231
Add_liquidity198767262024-05-15 16:58:3574 days ago1715792315IN
0xcB636B81...07009cCCC
0 ETH0.0022093810.51954718
Remove_liquidity196648232024-04-16 1:38:11103 days ago1713231491IN
0xcB636B81...07009cCCC
0 ETH0.003113788.05036737
Remove_liquidity...191504772024-02-03 21:23:11176 days ago1706995391IN
0xcB636B81...07009cCCC
0 ETH0.0051529516.12070731
Add_liquidity191345892024-02-01 15:52:35178 days ago1706802755IN
0xcB636B81...07009cCCC
0 ETH0.0058568531.66656869
Remove_liquidity...191098702024-01-29 4:42:35181 days ago1706503355IN
0xcB636B81...07009cCCC
0 ETH0.003081469.67589607
Add_liquidity190933592024-01-26 21:09:11184 days ago1706303351IN
0xcB636B81...07009cCCC
0 ETH0.0051897114.6163625
Remove_liquidity...187333892023-12-07 9:01:35234 days ago1701939695IN
0xcB636B81...07009cCCC
0 ETH0.0116512437.70557132
Remove_liquidity186757742023-11-29 7:27:47242 days ago1701242867IN
0xcB636B81...07009cCCC
0 ETH0.0135995433.64849321
Remove_liquidity...185811022023-11-16 1:15:47255 days ago1700097347IN
0xcB636B81...07009cCCC
0 ETH0.0099153930.82693548
Remove_liquidity...185544242023-11-12 7:44:35259 days ago1699775075IN
0xcB636B81...07009cCCC
0 ETH0.006526820.08234049
Add_liquidity185425182023-11-10 15:43:59261 days ago1699631039IN
0xcB636B81...07009cCCC
0 ETH0.0108654951.01385963
Add_liquidity185257182023-11-08 7:22:35263 days ago1699428155IN
0xcB636B81...07009cCCC
0 ETH0.0077268521.5232648
Add_liquidity184840292023-11-02 11:13:59269 days ago1698923639IN
0xcB636B81...07009cCCC
0 ETH0.0073483320.46838571
Add_liquidity184793572023-11-01 19:30:59270 days ago1698867059IN
0xcB636B81...07009cCCC
0 ETH0.0110434452.58584644
Remove_liquidity...184513662023-10-28 21:26:47274 days ago1698528407IN
0xcB636B81...07009cCCC
0 ETH0.0036011311.66050688
Add_liquidity184362662023-10-26 18:46:11276 days ago1698345971IN
0xcB636B81...07009cCCC
0 ETH0.0044826221.34310793
Remove_liquidity184136832023-10-23 14:52:47279 days ago1698072767IN
0xcB636B81...07009cCCC
0 ETH0.0109357328
Remove_liquidity184136682023-10-23 14:49:47279 days ago1698072587IN
0xcB636B81...07009cCCC
0 ETH0.0064004729
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xf7525C66...5ef26b793
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.12

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# @version 0.2.12
"""
@title "Zap" Depositer for metapool
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020 - all rights reserved
@notice deposit/withdraw to Curve pool without too many transactions
"""

from vyper.interfaces import ERC20


interface CurveMeta:
    def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256) -> uint256: nonpayable
    def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]) -> uint256[N_COINS]: nonpayable
    def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256) -> 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 base_pool() -> address: 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


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

# An asset which may have a transfer fee (USDT)
FEE_ASSET: constant(address) = 0xdAC17F958D2ee523a2206206994597C13D831ec7

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


pool: public(address)
token: public(address)
base_pool: public(address)

coins: public(address[N_COINS])
base_coins: public(address[BASE_N_COINS])


@external
def __init__(_pool: address, _token: address):
    """
    @notice Contract constructor
    @param _pool Metapool address
    @param _token Pool LP token address
    """
    self.pool = _pool
    self.token = _token
    base_pool: address = CurveMeta(_pool).base_pool()
    self.base_pool = base_pool

    for i in range(N_COINS):
        coin: address = CurveMeta(_pool).coins(i)
        self.coins[i] = coin
        # approve coins for infinite transfers
        _response: Bytes[32] = raw_call(
            coin,
            concat(
                method_id("approve(address,uint256)"),
                convert(_pool, bytes32),
                convert(MAX_UINT256, bytes32),
            ),
            max_outsize=32,
        )
        if len(_response) > 0:
            assert convert(_response, bool)

    for i in range(BASE_N_COINS):
        coin: address = CurveBase(base_pool).coins(i)
        self.base_coins[i] = coin
        # approve underlying coins for infinite transfers
        _response: Bytes[32] = raw_call(
            coin,
            concat(
                method_id("approve(address,uint256)"),
                convert(base_pool, bytes32),
                convert(MAX_UINT256, bytes32),
            ),
            max_outsize=32,
        )
        if len(_response) > 0:
            assert convert(_response, bool)


@external
def add_liquidity(_amounts: uint256[N_ALL_COINS], _min_mint_amount: uint256) -> uint256:
    """
    @notice Wrap underlying coins and deposit them in the pool
    @param _amounts List of amounts of underlying coins to deposit
    @param _min_mint_amount Minimum amount of LP tokens to mint from the deposit
    @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

    # Transfer all coins in
    for i in range(N_ALL_COINS):
        amount: uint256 = _amounts[i]
        if amount == 0:
            continue
        coin: address = ZERO_ADDRESS
        if i < MAX_COIN:
            coin = self.coins[i]
            meta_amounts[i] = amount
        else:
            x: int128 = i - MAX_COIN
            coin = self.base_coins[x]
            base_amounts[x] = amount
            deposit_base = True
        # "safeTransferFrom" which works for ERC20s which return bool or not
        _response: Bytes[32] = raw_call(
            coin,
            concat(
                method_id("transferFrom(address,address,uint256)"),
                convert(msg.sender, bytes32),
                convert(self, bytes32),
                convert(amount, bytes32),
            ),
            max_outsize=32,
        )  # dev: failed transfer
        if len(_response) > 0:
            assert convert(_response, bool)  # dev: failed transfer
        # end "safeTransferFrom"
        # Handle potential Tether fees
        if coin == FEE_ASSET:
            amount = ERC20(FEE_ASSET).balanceOf(self)
            if i < MAX_COIN:
                meta_amounts[i] = amount
            else:
                base_amounts[i - MAX_COIN] = amount

    # Deposit to the base pool
    if deposit_base:
        CurveBase(self.base_pool).add_liquidity(base_amounts, 0)
        meta_amounts[MAX_COIN] = ERC20(self.coins[MAX_COIN]).balanceOf(self)

    # Deposit to the meta pool
    CurveMeta(self.pool).add_liquidity(meta_amounts, _min_mint_amount)

    # Transfer meta token back
    lp_token: address = self.token
    lp_amount: uint256 = ERC20(lp_token).balanceOf(self)
    assert ERC20(lp_token).transfer(msg.sender, lp_amount)

    return lp_amount


@external
def remove_liquidity(_amount: uint256, _min_amounts: uint256[N_ALL_COINS]) -> uint256[N_ALL_COINS]:
    """
    @notice Withdraw and unwrap coins from the pool
    @dev Withdrawal amounts are based on current deposit ratios
    @param _amount Quantity of LP tokens to burn in the withdrawal
    @param _min_amounts Minimum amounts of underlying coins to receive
    @return List of amounts of underlying coins that were withdrawn
    """
    _token: address = self.token
    assert ERC20(_token).transferFrom(msg.sender, self, _amount)

    min_amounts_meta: uint256[N_COINS] = empty(uint256[N_COINS])
    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
    for i in range(MAX_COIN):
        min_amounts_meta[i] = _min_amounts[i]
    CurveMeta(self.pool).remove_liquidity(_amount, min_amounts_meta)

    # Withdraw from base
    _base_amount: uint256 = ERC20(self.coins[MAX_COIN]).balanceOf(self)
    for i in range(BASE_N_COINS):
        min_amounts_base[i] = _min_amounts[MAX_COIN+i]
    CurveBase(self.base_pool).remove_liquidity(_base_amount, min_amounts_base)

    # Transfer all coins out
    for i in range(N_ALL_COINS):
        coin: address = ZERO_ADDRESS
        if i < MAX_COIN:
            coin = self.coins[i]
        else:
            coin = self.base_coins[i - MAX_COIN]
        amounts[i] = ERC20(coin).balanceOf(self)
        # "safeTransfer" which works for ERC20s which return bool or not
        _response: Bytes[32] = raw_call(
            coin,
            concat(
                method_id("transfer(address,uint256)"),
                convert(msg.sender, bytes32),
                convert(amounts[i], bytes32),
            ),
            max_outsize=32,
        )  # dev: failed transfer
        if len(_response) > 0:
            assert convert(_response, bool)  # dev: failed transfer
        # end "safeTransfer"

    return amounts


@external
def remove_liquidity_one_coin(_token_amount: uint256, i: int128, _min_amount: uint256) -> uint256:
    """
    @notice Withdraw and unwrap a single coin from the pool
    @param _token_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
    @return Amount of underlying coin received
    """
    assert ERC20(self.token).transferFrom(msg.sender, self, _token_amount)

    coin: address = ZERO_ADDRESS
    if i < MAX_COIN:
        coin = self.coins[i]
        # Withdraw a metapool coin
        CurveMeta(self.pool).remove_liquidity_one_coin(_token_amount, i, _min_amount)
    else:
        coin = self.base_coins[i - MAX_COIN]
        # Withdraw a base pool coin
        CurveMeta(self.pool).remove_liquidity_one_coin(_token_amount, MAX_COIN, 0)
        CurveBase(self.base_pool).remove_liquidity_one_coin(
            ERC20(self.coins[MAX_COIN]).balanceOf(self), i-MAX_COIN, _min_amount
        )

    # Tranfer the coin out
    coin_amount: uint256 = ERC20(coin).balanceOf(self)
    # "safeTransfer" which works for ERC20s which return bool or not
    _response: Bytes[32] = raw_call(
        coin,
        concat(
            method_id("transfer(address,uint256)"),
            convert(msg.sender, bytes32),
            convert(coin_amount, bytes32),
        ),
        max_outsize=32,
    )  # dev: failed transfer
    if len(_response) > 0:
        assert convert(_response, bool)  # dev: failed transfer
    # end "safeTransfer"

    return coin_amount


@external
def remove_liquidity_imbalance(_amounts: uint256[N_ALL_COINS], _max_burn_amount: uint256) -> uint256:
    """
    @notice Withdraw coins from the pool in an imbalanced amount
    @param _amounts List of amounts of underlying coins to withdraw
    @param _max_burn_amount Maximum amount of LP token to burn in the withdrawal
    @return Actual amount of the LP token burned in the withdrawal
    """
    base_pool: address = self.base_pool
    meta_pool: address = self.pool
    base_coins: address[BASE_N_COINS] = self.base_coins
    meta_coins: address[N_COINS] = self.coins
    lp_token: address = self.token

    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
    assert ERC20(lp_token).transferFrom(msg.sender, self, _max_burn_amount)

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

    # Prepare quantities
    for i in range(MAX_COIN):
        amounts_meta[i] = _amounts[i]

    for i in range(BASE_N_COINS):
        amount: uint256 = _amounts[MAX_COIN + i]
        if amount != 0:
            amounts_base[i] = amount
            withdraw_base = True

    if withdraw_base:
        amounts_meta[MAX_COIN] = CurveBase(self.base_pool).calc_token_amount(amounts_base, False)
        amounts_meta[MAX_COIN] += amounts_meta[MAX_COIN] * fee / FEE_DENOMINATOR + 1

    # Remove liquidity and deposit leftovers back
    CurveMeta(meta_pool).remove_liquidity_imbalance(amounts_meta, _max_burn_amount)
    if withdraw_base:
        CurveBase(base_pool).remove_liquidity_imbalance(amounts_base, amounts_meta[MAX_COIN])
        leftover_amounts[MAX_COIN] = ERC20(meta_coins[MAX_COIN]).balanceOf(self)
        if leftover_amounts[MAX_COIN] > 0:
            CurveMeta(meta_pool).add_liquidity(leftover_amounts, 0)

    # Transfer all coins out
    for i in range(N_ALL_COINS):
        coin: address = ZERO_ADDRESS
        amount: uint256 = 0
        if i < MAX_COIN:
            coin = meta_coins[i]
            amount = amounts_meta[i]
        else:
            coin = base_coins[i - MAX_COIN]
            amount = amounts_base[i - MAX_COIN]
        # "safeTransfer" which works for ERC20s which return bool or not
        if amount > 0:
            _response: Bytes[32] = raw_call(
                coin,
                concat(
                    method_id("transfer(address,uint256)"),
                    convert(msg.sender, bytes32),
                    convert(amount, bytes32),
                ),
                max_outsize=32,
            )  # dev: failed transfer
            if len(_response) > 0:
                assert convert(_response, bool)  # dev: failed transfer
            # end "safeTransfer"

    # Transfer the leftover LP token out
    leftover: uint256 = ERC20(lp_token).balanceOf(self)
    if leftover > 0:
        assert ERC20(lp_token).transfer(msg.sender, leftover)

    return _max_burn_amount - leftover


@view
@external
def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256:
    """
    @notice Calculate the amount received when withdrawing and unwrapping a single coin
    @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(self.pool).calc_withdraw_one_coin(_token_amount, i)
    else:
        base_tokens: uint256 = CurveMeta(self.pool).calc_withdraw_one_coin(_token_amount, MAX_COIN)
        return CurveBase(self.base_pool).calc_withdraw_one_coin(base_tokens, i-MAX_COIN)


@view
@external
def calc_token_amount(_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 _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])

    for i in range(MAX_COIN):
        meta_amounts[i] = _amounts[i]

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

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

    return CurveMeta(self.pool).calc_token_amount(meta_amounts, _is_deposit)

Contract Security Audit

Contract ABI

[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_pool","type":"address"},{"name":"_token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_liquidity","inputs":[{"name":"_amounts","type":"uint256[4]"},{"name":"_min_mint_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":86660},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_amount","type":"uint256"},{"name":"_min_amounts","type":"uint256[4]"}],"outputs":[{"name":"","type":"uint256[4]"}],"gas":82960},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"_token_amount","type":"uint256"},{"name":"i","type":"int128"},{"name":"_min_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":38114},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_imbalance","inputs":[{"name":"_amounts","type":"uint256[4]"},{"name":"_max_burn_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":88693},{"stateMutability":"view","type":"function","name":"calc_withdraw_one_coin","inputs":[{"name":"_token_amount","type":"uint256"},{"name":"i","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":9894},{"stateMutability":"view","type":"function","name":"calc_token_amount","inputs":[{"name":"_amounts","type":"uint256[4]"},{"name":"_is_deposit","type":"bool"}],"outputs":[{"name":"","type":"uint256"}],"gas":10963},{"stateMutability":"view","type":"function","name":"pool","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2568},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2598},{"stateMutability":"view","type":"function","name":"base_pool","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2628},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":2767},{"stateMutability":"view","type":"function","name":"base_coins","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":2797}]

Deployed Bytecode

0x600436101561000d576117b3565b600035601c52600051341561002157600080fd5b63029b2f348114156105025760c0366101403761020060006004818352015b6004610200516004811061005357600080fd5b60200201356102205261022051151561006b57610361565b60006102405260016102005112156100c057610200516002811061008e57600080fd5b600360c052602060c0200154610240526102205161014061020051600281106100b657600080fd5b6020020152610132565b610200516001808203808060008112156100d657195b607f1c156100e357600080fd5b9050905090506102605261026051600381106100fe57600080fd5b600460c052602060c02001546102405261022051610180610260516003811061012657600080fd5b602002015260016101e0525b600060046102c0527f23b872dd000000000000000000000000000000000000000000000000000000006102e0526102c060048060208461032001018260208501600060045af1505080518201915050336020826103200101526020810190503060208261032001015260208101905061022051602082610320010152602081019050806103205261032090508051602001806103e08284600060045af16101d857600080fd5b505060206104c06103e0516104006000610240515af16101f757600080fd5b60203d80821115610208578061020a565b815b905090506104a0526104a08051602001806102608284600060045af161022f57600080fd5b505060006102605111156102815761026080602001516000825180602090131561025857600080fd5b809190121561026657600080fd5b806020036101000a8204905090509050151561028157600080fd5b73dac17f958d2ee523a2206206994597c13d831ec761024051141561036157602061034060246370a082316102c052306102e0526102dc73dac17f958d2ee523a2206206994597c13d831ec75afa6102d857600080fd5b601f3d116102e557600080fd5b6000506103405161022052600161020051121561031e5761022051610140610200516002811061031457600080fd5b6020020152610361565b610220516101806102005160018082038080600081121561033b57195b607f1c1561034857600080fd5b9050905090506003811061035b57600080fd5b60200201525b8151600101808352811415610040575b50506101e05115610413576002543b61038957600080fd5b600060006084634515cef36102005261018051610220526101a051610240526101c0516102605260006102805261021c60006002545af16103c957600080fd5b602061028060246370a0823161020052306102205261021c6001600360c052602060c02001545afa6103fa57600080fd5b601f3d1161040757600080fd5b60005061028051610160525b60206102c06064630b4c7e4d61020052610140516102205261016051610240526084356102605261021c60006000545af161044d57600080fd5b601f3d1161045a57600080fd5b6000506102c0506001546102005260206102c060246370a0823161024052306102605261025c610200515afa61048f57600080fd5b601f3d1161049c57600080fd5b6000506102c0516102205260206102e0604463a9059cbb610240523361026052610220516102805261025c6000610200515af16104d857600080fd5b601f3d116104e557600080fd5b6000506102e0516104f557600080fd5b6102205160005260206000f35b637d49d87581141561094a5760015461014052602061022060646323b872dd610160523361018052306101a0526004356101c05261017c6000610140515af161054a57600080fd5b601f3d1161055757600080fd5b6000506102205161056757600080fd5b610120366101603761028060006001818352015b6024610280516004811061058e57600080fd5b602002013561016061028051600281106105a757600080fd5b60200201525b815160010180835281141561057b575b505060406103406064635b36389c610280526004356102a052610160516102c052610180516102e05261029c60006000545af16105f957600080fd5b603f3d1161060657600080fd5b60005061034050602061032060246370a082316102a052306102c0526102bc6001600360c052602060c02001545afa61063e57600080fd5b601f3d1161064b57600080fd5b60005061032051610280526102a060006003818352015b602460016102a05181818301101561067957600080fd5b808201905090506004811061068d57600080fd5b60200201356101a06102a051600381106106a657600080fd5b60200201525b8151600101808352811415610662575b50506002543b6106cb57600080fd5b60006000608463ecb586a56102a052610280516102c0526101a0516102e0526101c051610300526101e051610320526102bc60006002545af161070d57600080fd5b6102a060006004818352015b60006102c05260016102a0511015610751576102a0516002811061073c57600080fd5b600360c052602060c02001546102c052610789565b6102a05160018082101561076457600080fd5b808203905090506003811061077857600080fd5b600460c052602060c02001546102c0525b602061036060246370a082316102e05230610300526102fc6102c0515afa6107b057600080fd5b601f3d116107bd57600080fd5b600050610360516102006102a051600481106107d857600080fd5b602002015260006004610340527fa9059cbb00000000000000000000000000000000000000000000000000000000610360526103406004806020846103a001018260208501600060045af1505080518201915050336020826103a00101526020810190506102006102a0516004811061085057600080fd5b60200201516020826103a0010152602081019050806103a0526103a090508051602001806104408284600060045af161088857600080fd5b505060206105006104405161046060006102c0515af16108a757600080fd5b60203d808211156108b857806108ba565b815b905090506104e0526104e08051602001806102e08284600060045af16108df57600080fd5b505060006102e0511115610931576102e080602001516000825180602090131561090857600080fd5b809190121561091657600080fd5b806020036101000a8204905090509050151561093157600080fd5b8151600101808352811415610719575b50506080610200f35b631a4d01d2811415610d01576024358080600081121561096657195b607f1c1561097357600080fd5b905050602061020060646323b872dd61014052336101605230610180526004356101a05261015c60006001545af16109aa57600080fd5b601f3d116109b757600080fd5b600050610200516109c757600080fd5b60006101405260016024351215610a3c57602435600281106109e857600080fd5b600360c052602060c02001546101405260206102206064631a4d01d261016052606060046101803761017c60006000545af1610a2357600080fd5b601f3d11610a3057600080fd5b60005061022050610b76565b602435600180820380806000811215610a5157195b607f1c15610a5e57600080fd5b90509050905060038110610a7157600080fd5b600460c052602060c02001546101405260206102206064631a4d01d2610160526004356101805260016101a05260006101c05261017c60006000545af1610ab757600080fd5b601f3d11610ac457600080fd5b600050610220506002543b610ad857600080fd5b600060006064631a4d01d26102005260206101e060246370a0823161016052306101805261017c6001600360c052602060c02001545afa610b1857600080fd5b601f3d11610b2557600080fd5b6000506101e05161022052602435600180820380806000811215610b4557195b607f1c15610b5257600080fd5b905090509050610240526044356102605261021c60006002545af1610b7657600080fd5b602061020060246370a0823161018052306101a05261019c610140515afa610b9d57600080fd5b601f3d11610baa57600080fd5b6000506102005161016052600060046101e0527fa9059cbb00000000000000000000000000000000000000000000000000000000610200526101e060048060208461024001018260208501600060045af15050805182019150503360208261024001015260208101905061016051602082610240010152602081019050806102405261024090508051602001806102e08284600060045af1610c4b57600080fd5b505060206103a06102e0516103006000610140515af1610c6a57600080fd5b60203d80821115610c7b5780610c7d565b815b90509050610380526103808051602001806101808284600060045af1610ca257600080fd5b50506000610180511115610cf457610180806020015160008251806020901315610ccb57600080fd5b8091901215610cd957600080fd5b806020036101000a82049050905090501515610cf457600080fd5b6101605160005260206000f35b6318a7bd7681141561143c57600254610140526000546101605260048060c052602060c020546101805260018160c052602060c02001546101a05260028160c052602060c02001546101c0525060038060c052602060c020546101e05260018160c052602060c020015461020052506001546102205260206102c0600463ddca3f436102605261027c610140515afa610d9957600080fd5b601f3d11610da657600080fd5b6000506102c05160038082028215828483041417610dc357600080fd5b80905090509050600880820490509050610240526102408051610240516402540be4008082028215828483041417610dfa57600080fd5b809050905090506402540be40080820490509050818183011015610e1d57600080fd5b80820190509050815250602061032060646323b872dd610260523361028052306102a0526084356102c05261027c6000610220515af1610e5c57600080fd5b601f3d11610e6957600080fd5b60005061032051610e7957600080fd5b610100366102603761036060006001818352015b60046103605160048110610ea057600080fd5b60200201356102e06103605160028110610eb957600080fd5b60200201525b8151600101808352811415610e8d575b505061036060006003818352015b6004600161036051818183011015610ef457600080fd5b8082019050905060048110610f0857600080fd5b6020020135610380526000610380511815610f4157610380516102806103605160038110610f3557600080fd5b60200201526001610260525b8151600101808352811415610edd575b5050610260511561101a5760206104406084633883e1196103605261028051610380526102a0516103a0526102c0516103c05260006103e05261037c6002545afa610f9b57600080fd5b601f3d11610fa857600080fd5b6000506104405161030052610300805161030051610240518082028215828483041417610fd457600080fd5b809050905090506402540be400808204905090506001818183011015610ff957600080fd5b8082019050905081818301101561100f57600080fd5b808201905090508152505b6020610420606463e3103273610360526102e05161038052610300516103a0526084356103c05261037c6000610160515af161105557600080fd5b601f3d1161106257600080fd5b60005061042050610260511561115d57610140513b61108057600080fd5b600060006084639fdaea0c6103605261028051610380526102a0516103a0526102c0516103c052610300516103e05261037c6000610140515af16110c357600080fd5b60206103e060246370a0823161036052306103805261037c610200515afa6110ea57600080fd5b601f3d116110f757600080fd5b6000506103e05161034052600061034051111561115d5760206104206064630b4c7e4d610360526103205161038052610340516103a05260006103c05261037c6000610160515af161114857600080fd5b601f3d1161115557600080fd5b600050610420505b61036060006004818352015b6040366103803760016103605110156111bb576101e0610360516002811061119057600080fd5b6020020151610380526102e061036051600281106111ad57600080fd5b60200201516103a052611222565b610180610360516001808210156111d157600080fd5b80820390509050600381106111e557600080fd5b6020020151610380526102806103605160018082101561120457600080fd5b808203905090506003811061121857600080fd5b60200201516103a0525b60006103a051111561136d5760006004610420527fa9059cbb000000000000000000000000000000000000000000000000000000006104405261042060048060208461048001018260208501600060045af1505080518201915050336020826104800101526020810190506103a051602082610480010152602081019050806104805261048090508051602001806105208284600060045af16112c457600080fd5b505060206105e0610520516105406000610380515af16112e357600080fd5b60203d808211156112f457806112f6565b815b905090506105c0526105c08051602001806103c08284600060045af161131b57600080fd5b505060006103c051111561136d576103c080602001516000825180602090131561134457600080fd5b809190121561135257600080fd5b806020036101000a8204905090509050151561136d57600080fd5b8151600101808352811415611169575b5050602061040060246370a0823161038052306103a05261039c610220515afa6113a657600080fd5b601f3d116113b357600080fd5b60005061040051610360526000610360511115611418576020610420604463a9059cbb61038052336103a052610360516103c05261039c6000610220515af16113fb57600080fd5b601f3d1161140857600080fd5b6000506104205161141857600080fd5b608435610360518082101561142c57600080fd5b8082039050905060005260206000f35b63cc2b27d7811415611577576024358080600081121561145857195b607f1c1561146557600080fd5b905050600160243512156114bd5760206101e0604463cc2b27d761014052604060046101603761015c6000545afa61149c57600080fd5b601f3d116114a957600080fd5b6000506101e05160005260206000f3611575565b6020610200604463cc2b27d7610160526004356101805260016101a05261017c6000545afa6114eb57600080fd5b601f3d116114f857600080fd5b60005061020051610140526020610200604463cc2b27d761016052610140516101805260243560018082038080600081121561153057195b607f1c1561153d57600080fd5b9050905090506101a05261017c6002545afa61155857600080fd5b601f3d1161156557600080fd5b6000506102005160005260206000f35b005b63cf701ff78114156117075760843560011c1561159357600080fd5b60a036610140376101e060006001818352015b60046101e051600481106115b957600080fd5b60200201356101406101e051600281106115d257600080fd5b60200201525b81516001018083528114156115a6575b50506101e060006003818352015b60046101e051600181818301101561160d57600080fd5b808201905090506004811061162157600080fd5b60200201356101806101e0516003811061163a57600080fd5b60200201525b81516001018083528114156115f6575b505060206102e06084633883e1196102005261018051610220526101a051610240526101c051610260526084356102805261021c6002545afa61169257600080fd5b601f3d1161169f57600080fd5b6000506102e0516101e0526101e0516101605260206102c0606463ed8e84f361020052610140516102205261016051610240526084356102605261021c6000545afa6116ea57600080fd5b601f3d116116f757600080fd5b6000506102c05160005260206000f35b6316f0115b81141561171f5760005460005260206000f35b63fc0c546a8114156117375760015460005260206000f35b635d6362bb81141561174f5760025460005260206000f35b63c6610657811415611780576004356002811061176b57600080fd5b600360c052602060c020015460005260206000f35b6387cb4f578114156117b1576004356003811061179c57600080fd5b600460c052602060c020015460005260206000f35b505b60006000fd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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