ETH Price: $3,247.93 (-3.38%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit204273822024-07-31 15:18:47175 days ago1722439127IN
0x00929E02...5c7D907b0
0.03 ETH0.005424112.8011308
Deposit203135902024-07-15 18:06:11191 days ago1721066771IN
0x00929E02...5c7D907b0
0.027 ETH0.0172869722.70640093

Latest 6 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
204367842024-08-01 22:48:47174 days ago1722552527
0x00929E02...5c7D907b0
0.005 ETH
204367802024-08-01 22:47:59174 days ago1722552479
0x00929E02...5c7D907b0
0.005 ETH
204273822024-07-31 15:18:47175 days ago1722439127
0x00929E02...5c7D907b0
0.02 ETH
203136212024-07-15 18:12:23191 days ago1721067143
0x00929E02...5c7D907b0
0.0035 ETH
203136102024-07-15 18:10:11191 days ago1721067011
0x00929E02...5c7D907b0
0.0035 ETH
203135902024-07-15 18:06:11191 days ago1721066771
0x00929E02...5c7D907b0
0.02 ETH
Loading...
Loading

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

Contract Name:
Curve TWAP Bot

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Vyper language format)

#pragma version 0.3.10
#pragma optimize gas
#pragma evm-version shanghai
"""
@title Curve TWAP Bot
@license Apache 2.0
@author Volume.finance
"""

struct Deposit:
    depositor: address
    route: address[11]
    swap_params: uint256[5][5]
    pools: address[5]
    input_amount: uint256
    number_trades: uint256
    interval: uint256
    remaining_counts: uint256
    starting_time: uint256

struct SwapInfo:
    route: address[11]
    swap_params: uint256[5][5]
    amount: uint256
    pools: address[5]

interface WrappedEth:
    def deposit(): payable

interface CurveSwapRouter:
    def exchange(_route: address[11], _swap_params: uint256[5][5], _amount: uint256, _expected: uint256, _pools: address[5], _receiver: address) -> uint256: payable

interface ERC20:
    def balanceOf(_owner: address) -> uint256: view
    def approve(_spender: address, _value: uint256) -> bool: nonpayable
    def transfer(_to: address, _value: uint256) -> bool: nonpayable
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: nonpayable

VETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # Virtual ETH
ROUTER: immutable(address)
MAX_SIZE: constant(uint256) = 8
DENOMINATOR: constant(uint256) = 10 ** 18
compass_evm: public(address)
deposit_list: HashMap[uint256, Deposit]
next_deposit: public(uint256)
refund_wallet: public(address)
fee: public(uint256)
paloma: public(bytes32)
service_fee_collector: public(address)
service_fee: public(uint256)

event Deposited:
    deposit_id: uint256
    token0: address
    token1: address
    input_amount: uint256
    number_trades: uint256
    interval: uint256
    starting_time: uint256
    depositor: address
    is_stable_swap: bool

event Swapped:
    deposit_id: uint256
    remaining_counts: uint256
    amount: uint256
    out_amount: uint256

event Canceled:
    deposit_id: uint256

event UpdateCompass:
    old_compass: address
    new_compass: address

event UpdateRefundWallet:
    old_refund_wallet: address
    new_refund_wallet: address

event UpdateFee:
    old_fee: uint256
    new_fee: uint256

event SetPaloma:
    paloma: bytes32

event UpdateServiceFeeCollector:
    old_service_fee_collector: address
    new_service_fee_collector: address

event UpdateServiceFee:
    old_service_fee: uint256
    new_service_fee: uint256

@external
def __init__(_compass_evm: address, router: address, _refund_wallet: address, _fee: uint256, _service_fee_collector: address, _service_fee: uint256):
    self.compass_evm = _compass_evm
    ROUTER = router
    self.refund_wallet = _refund_wallet
    self.fee = _fee
    self.service_fee_collector = _service_fee_collector
    assert _service_fee < DENOMINATOR
    self.service_fee = _service_fee
    log UpdateCompass(empty(address), _compass_evm)
    log UpdateRefundWallet(empty(address), _refund_wallet)
    log UpdateFee(0, _fee)
    log UpdateServiceFeeCollector(empty(address), _service_fee_collector)
    log UpdateServiceFee(0, _service_fee)

@external
@payable
@nonreentrant('lock')
def deposit(swap_infos: DynArray[SwapInfo, MAX_SIZE], number_trades: uint256, interval: uint256, starting_time: uint256):
    _value: uint256 = msg.value
    assert self.paloma != empty(bytes32), "Paloma not set"
    _fee: uint256 = self.fee
    if _fee > 0:
        _fee = _fee * number_trades
        assert _value >= _fee, "Insufficient fee"
        send(self.refund_wallet, _fee)
        _value = unsafe_sub(_value, _fee)
    _next_deposit: uint256 = self.next_deposit
    for swap_info in swap_infos:
        last_index: uint256 = 0
        for i in range(5):
            last_index = unsafe_sub(10, unsafe_add(i, i))
            if swap_info.route[last_index] != empty(address):
                break
        is_stable_swap: bool = True
        for i in range(5):
            if swap_info.swap_params[i][2] == 0:
                break
            if swap_info.swap_params[i][2] != 8 and (swap_info.swap_params[i][2] == 9 or swap_info.swap_params[i][3] != 1):
                is_stable_swap = False
        assert swap_info.amount > 0, "Insufficient deposit"
        token1: address = swap_info.route[last_index]
        if swap_info.route[0] == VETH:
            assert _value >= swap_info.amount, "Insufficient deposit"
            _value = unsafe_sub(_value, swap_info.amount)
        else:
            assert ERC20(swap_info.route[0]).transferFrom(msg.sender, self, swap_info.amount, default_return_value = True), "Failed transferFrom"
        _starting_time: uint256 = starting_time
        if starting_time <= block.timestamp:
            _starting_time = block.timestamp
        assert number_trades > 0, "Wrong trade count"
        self.deposit_list[_next_deposit] = Deposit({
            depositor: msg.sender,
            route: swap_info.route,
            swap_params: swap_info.swap_params,
            pools: swap_info.pools,
            input_amount: swap_info.amount,
            number_trades: number_trades,
            interval: interval,
            remaining_counts: number_trades,
            starting_time: _starting_time
        })
        log Deposited(_next_deposit, swap_info.route[0], swap_info.route[last_index], swap_info.amount, number_trades, interval, _starting_time, msg.sender, is_stable_swap)
        _next_deposit = unsafe_add(_next_deposit, 1)
    self.next_deposit = _next_deposit
    if _value > 0:
        send(msg.sender, _value)

@internal
def _safe_transfer(_token: address, _to: address, _value: uint256):
    assert ERC20(_token).transfer(_to, _value, default_return_value=True), "Failed transfer"

@internal
def _swap(deposit_id: uint256, remaining_count: uint256, amount_out_min: uint256, count_check: bool = True) -> uint256:
    _deposit: Deposit = self.deposit_list[deposit_id]
    if count_check:
        assert _deposit.remaining_counts == remaining_count, "Wrong count"
    _amount: uint256 = _deposit.input_amount / _deposit.remaining_counts
    _deposit.input_amount = unsafe_sub(_deposit.input_amount, _amount)
    _deposit.remaining_counts = unsafe_sub(_deposit.remaining_counts, 1)
    self.deposit_list[deposit_id] = _deposit
    _out_amount: uint256 = 0
    last_index: uint256 = 0
    for i in range(5):
        last_index = unsafe_sub(10, unsafe_add(i, i))
        if _deposit.route[last_index] != empty(address):
            break
    if _deposit.route[0] == VETH:
        _out_amount = CurveSwapRouter(ROUTER).exchange(_deposit.route, _deposit.swap_params, _amount, amount_out_min, _deposit.pools, self, value=_amount)
    else:
        assert ERC20(_deposit.route[0]).approve(ROUTER, _amount, default_return_value = True), "Failed approve"
        _out_amount = CurveSwapRouter(ROUTER).exchange(_deposit.route, _deposit.swap_params, _amount, amount_out_min, _deposit.pools, self)
    actual_amount: uint256 = _out_amount
    service_fee_amount: uint256 = 0
    _service_fee: uint256 = self.service_fee
    if _service_fee > 0:
        service_fee_amount = unsafe_div(_out_amount * _service_fee, DENOMINATOR)
        actual_amount = unsafe_sub(actual_amount, service_fee_amount)
    if _deposit.route[last_index] == VETH:
        send(_deposit.depositor, actual_amount)
        if service_fee_amount > 0:
            send(self.service_fee_collector, service_fee_amount)
    else:
        self._safe_transfer(_deposit.route[last_index], _deposit.depositor, actual_amount)
        if service_fee_amount > 0:
            self._safe_transfer(_deposit.route[last_index], self.service_fee_collector, service_fee_amount)
    log Swapped(deposit_id, _deposit.remaining_counts, _amount, _out_amount)
    return _out_amount

@internal
def _paloma_check():
    assert msg.sender == self.compass_evm, "Not compass"
    assert self.paloma == convert(slice(msg.data, unsafe_sub(len(msg.data), 32), 32), bytes32), "Invalid paloma"

@external
@nonreentrant('lock')
def multiple_swap(deposit_id: DynArray[uint256, MAX_SIZE], remaining_counts: DynArray[uint256, MAX_SIZE], amount_out_min: DynArray[uint256, MAX_SIZE]):
    self._paloma_check()
    _len: uint256 = len(deposit_id)
    assert _len == len(amount_out_min) and _len == len(remaining_counts), "Validation error"
    for i in range(MAX_SIZE):
        if i >= len(deposit_id):
            break
        self._swap(deposit_id[i], remaining_counts[i], amount_out_min[i])

@external
def multiple_swap_view(deposit_id: DynArray[uint256, MAX_SIZE], remaining_counts: DynArray[uint256, MAX_SIZE]) -> DynArray[uint256, MAX_SIZE]:
    assert msg.sender == empty(address) # only for view function
    _len: uint256 = len(deposit_id)
    res: DynArray[uint256, MAX_SIZE] = []
    for i in range(MAX_SIZE):
        if i >= len(deposit_id):
            break
        res.append(self._swap(deposit_id[i], remaining_counts[i], 1, False))
    return res

@internal
def _cancel(deposit_id: uint256):
    _deposit: Deposit = self.deposit_list[deposit_id]
    assert _deposit.depositor == msg.sender, "Unauthorized"
    assert _deposit.input_amount > 0, "All traded"
    if _deposit.route[0] == VETH:
        send(msg.sender, _deposit.input_amount)
    else:
        self._safe_transfer(_deposit.route[0], msg.sender, _deposit.input_amount)
    _deposit.input_amount = 0
    _deposit.remaining_counts = 0
    self.deposit_list[deposit_id] = _deposit
    log Canceled(deposit_id)

@external
@nonreentrant('lock')
def cancel(deposit_id: uint256):
    self._cancel(deposit_id)

@external
@nonreentrant('lock')
def multiple_cancel(deposit_ids: DynArray[uint256, MAX_SIZE]):
    for deposit_id in deposit_ids:
        self._cancel(deposit_id)

@external
def update_compass(new_compass: address):
    self._paloma_check()
    self.compass_evm = new_compass
    log UpdateCompass(msg.sender, new_compass)

@external
def update_refund_wallet(new_refund_wallet: address):
    self._paloma_check()
    old_refund_wallet: address = self.refund_wallet
    self.refund_wallet = new_refund_wallet
    log UpdateRefundWallet(old_refund_wallet, new_refund_wallet)

@external
def update_fee(new_fee: uint256):
    self._paloma_check()
    old_fee: uint256 = self.fee
    self.fee = new_fee
    log UpdateFee(old_fee, new_fee)

@external
def set_paloma():
    assert msg.sender == self.compass_evm and self.paloma == empty(bytes32) and len(msg.data) == 36, "Unauthorized"
    _paloma: bytes32 = convert(slice(msg.data, 4, 32), bytes32)
    self.paloma = _paloma
    log SetPaloma(_paloma)

@external
def update_service_fee_collector(new_service_fee_collector: address):
    self._paloma_check()
    self.service_fee_collector = new_service_fee_collector
    log UpdateServiceFeeCollector(msg.sender, new_service_fee_collector)

@external
def update_service_fee(new_service_fee: uint256):
    self._paloma_check()
    assert new_service_fee < DENOMINATOR, "Wrong service fee"
    old_service_fee: uint256 = self.service_fee
    self.service_fee = new_service_fee
    log UpdateServiceFee(old_service_fee, new_service_fee)

@external
@payable
def __default__():
    pass

Contract Security Audit

Contract ABI

[{"name":"Deposited","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"token0","type":"address","indexed":false},{"name":"token1","type":"address","indexed":false},{"name":"input_amount","type":"uint256","indexed":false},{"name":"number_trades","type":"uint256","indexed":false},{"name":"interval","type":"uint256","indexed":false},{"name":"starting_time","type":"uint256","indexed":false},{"name":"depositor","type":"address","indexed":false},{"name":"is_stable_swap","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"Swapped","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"remaining_counts","type":"uint256","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Canceled","inputs":[{"name":"deposit_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateCompass","inputs":[{"name":"old_compass","type":"address","indexed":false},{"name":"new_compass","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateRefundWallet","inputs":[{"name":"old_refund_wallet","type":"address","indexed":false},{"name":"new_refund_wallet","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateFee","inputs":[{"name":"old_fee","type":"uint256","indexed":false},{"name":"new_fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetPaloma","inputs":[{"name":"paloma","type":"bytes32","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateServiceFeeCollector","inputs":[{"name":"old_service_fee_collector","type":"address","indexed":false},{"name":"new_service_fee_collector","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateServiceFee","inputs":[{"name":"old_service_fee","type":"uint256","indexed":false},{"name":"new_service_fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_compass_evm","type":"address"},{"name":"router","type":"address"},{"name":"_refund_wallet","type":"address"},{"name":"_fee","type":"uint256"},{"name":"_service_fee_collector","type":"address"},{"name":"_service_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"deposit","inputs":[{"name":"swap_infos","type":"tuple[]","components":[{"name":"route","type":"address[11]"},{"name":"swap_params","type":"uint256[5][5]"},{"name":"amount","type":"uint256"},{"name":"pools","type":"address[5]"}]},{"name":"number_trades","type":"uint256"},{"name":"interval","type":"uint256"},{"name":"starting_time","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_swap","inputs":[{"name":"deposit_id","type":"uint256[]"},{"name":"remaining_counts","type":"uint256[]"},{"name":"amount_out_min","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_swap_view","inputs":[{"name":"deposit_id","type":"uint256[]"},{"name":"remaining_counts","type":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]"}]},{"stateMutability":"nonpayable","type":"function","name":"cancel","inputs":[{"name":"deposit_id","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_cancel","inputs":[{"name":"deposit_ids","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_compass","inputs":[{"name":"new_compass","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_refund_wallet","inputs":[{"name":"new_refund_wallet","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_fee","inputs":[{"name":"new_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_paloma","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_service_fee_collector","inputs":[{"name":"new_service_fee_collector","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_service_fee","inputs":[{"name":"new_service_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"compass_evm","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"next_deposit","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"refund_wallet","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"paloma","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"service_fee_collector","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"service_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]

Deployed Bytecode

0x5f3560e01c60026012820660011b6119c201601e395f51565b63440e4e7b811861003457346119be5760015460405260206040f35b6340e58ee58118611139576024361034176119be575f546002146119be5760025f55600435610160526100656117fd565b60035f5500611139565b6312ece1ed811861113957346119be5760035460405260206040f3611139565b6322221b0c811861113957346119be5760045460405260206040f3611139565b63ddca3f43811861113957346119be5760055460405260206040f3611139565b63c09f329181186100eb57346119be5760065460405260206040f35b636974af698118611139576024361034176119be576004358060a01c6119be5760c0526101166116ff565b60c0516001557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a3360e05260c05161010052604060e0a100611139565b63d8fe764d811861016f57346119be5760075460405260206040f35b63ff44cecd8118611139576084361034176119be5760043560040160088135116119be57803560208160051b018083610dc03750505060243560040160088135116119be57803560208160051b018083610ee037505050336119be57610dc051611000525f611020525f6008905b8061114052610dc05161114051106101f45761026d565b61102051600781116119be5761114051610dc0518110156119be5760051b610de001516101605261114051610ee0518110156119be5760051b610f0001516101805260016101a0525f6101c05261024c611160611208565b611160518160051b61104001526001810161102052506001018181186101dd575b50506020806111405280611140015f611020518083528060051b5f82600881116119be5780156102b757905b8060051b61104001518160051b602088010152600101818118610299575b50508201602001915050905081019050611140f3611139565b6310d418c281186102ec57346119be5760085460405260206040f35b6323fde8e2811861113957346119be57600154331861031c5760065461031657602436181561031e565b5f61031e565b5f5b61037d57600c6040527f556e617574686f72697a6564000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b366024116119be576020606052602060046080376060805160200360031b6020820151811c811b905090506040526040516006557f2700ed1ef9147da3f7fdcaae08cbe6d1c92ec7fa6bace169d9c49e398e3cb1ca60405160605260206060a100611139565b632930a9a281186111395760a33611156119be5760043560040160088135116119be5780355f81600881116119be57801561068157905b61054081026060016105408202602086010180358060a01c6119be57825260208101358060a01c6119be57602083015260408101358060a01c6119be57604083015260608101358060a01c6119be57606083015260808101358060a01c6119be57608083015260a08101358060a01c6119be5760a083015260c08101358060a01c6119be5760c083015260e08101358060a01c6119be5760e08301526101008101358060a01c6119be576101008301526101208101358060a01c6119be576101208301526101408101358060a01c6119be5761014083015261016082016101608201803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a0820160a082018035825260208101356020830152604081013560408301526060810135606083015260808101356080830152505061014082016101408201803582526020810135602083015260408101356040830152606081013560608301526080810135608083015250506101e082016101e0820180358252602081013560208301526040810135604083015260608101356060830152608081013560808301525050610280820161028082018035825260208101356020830152604081013560408301526060810135606083015260808101356080830152505050506104808101356104808301526104a082016104a0820180358060a01c6119be57825260208101358060a01c6119be57602083015260408101358060a01c6119be57604083015260608101358060a01c6119be57606083015260808101358060a01c6119be5760808301525050505060010181811861041a575b50508060405250505f546002146119be5760025f5534612a605260065461070757600e612a80527f50616c6f6d61206e6f7420736574000000000000000000000000000000000000612aa052612a8050612a805180612aa001601f825f031636823750506308c379a0612a40526020612a6052601f19601f612a80510116604401612a5cfd5b600554612a8052612a8051156107c957612a80516024358082028115838383041417156119be5790509050612a8052612a8051612a605110156107a9576010612aa0527f496e73756666696369656e742066656500000000000000000000000000000000612ac052612aa050612aa05180612ac001601f825f031636823750506308c379a0612a60526020612a8052601f19601f612aa0510116604401612a7cfd5b5f5f5f5f612a80516004545ff1156119be57612a8051612a605103612a60525b600354612aa0525f604051600881116119be578015610cbe57905b6105408102606001610540612ac06105408360045afa50505f613000525f6005905b8061302052613020516130205101600a036130005261300051600a81116119be5760051b612ac001511561083957610844565b600101818118610806575b50506001613020525f6005905b806130405260a061304051600481116119be5702612c200160408101905051610879576108fd565b600860a061304051600481116119be5702612c200160408101905051146108e557600960a061304051600481116119be5702612c200160408101905051186108c25760016108e7565b600160a061304051600481116119be5702612c20016060810190505114156108e7565b5f5b156108f2575f613020525b600101818118610851575b5050612f405161096c576014613040527f496e73756666696369656e74206465706f7369740000000000000000000000006130605261304050613040518061306001601f825f031636823750506308c379a061300052602061302052601f19601f61304051011660440161301cfd5b61300051600a81116119be5760051b612ac001516130405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee612ac05118610a2757612f4051612a60511015610a15576014613060527f496e73756666696369656e74206465706f7369740000000000000000000000006130805261306050613060518061308001601f825f031636823750506308c379a061302052602061304052601f19601f61306051011660440161303cfd5b612f4051612a605103612a6052610aff565b612ac0516323b872dd613060523361308052306130a052612f40516130c0526020613060606461307c5f855af1610a60573d5f5f3e3d5ffd5b3d610a7757803b156119be5760016130e052610a90565b60203d106119be57613060518060011c6119be576130e0525b6130e0905051610aff576013613100527f4661696c6564207472616e7366657246726f6d000000000000000000000000006131205261310050613100518061312001601f825f031636823750506308c379a06130c05260206130e052601f19601f6131005101166044016130dcfd5b606435613060524260643511610b155742613060525b602435610b81576011613080527f57726f6e6720747261646520636f756e740000000000000000000000000000006130a0526130805061308051806130a001601f825f031636823750506308c379a061304052602061306052601f19601f61308051011660440161305cfd5b6002612aa0516020525f5260405f20338155600181015f600b905b8060051b612ac0015181840155600101818118610b9c57505050600c81015f6019905b8060051b612c20015181840155600101818118610bbf5750505060258101612f60518155612f80516001820155612fa0516002820155612fc0516003820155612fe051600482015550612f4051602a820155602435602b820155604435602c820155602435602d82015561306051602e820155507f20d88b5bab36c1ab0d0605dfa6d78c6314c7f4dc7f8ef6079097dd0eb925f548612aa05161308052612ac0516130a05261300051600a81116119be5760051b612ac001516130c052612f40516130e0526040602461310037613060516131405233613160526130205161318052610120613080a16001612aa05101612aa0526001018181186107e4575b5050612aa051600355612a605115610ce1575f5f5f5f612a6051335ff1156119be575b60035f5500611139565b634b1cc18a8118610e9c5760c4361034176119be5760043560040160088135116119be57803560208160051b018083610dc03750505060243560040160088135116119be57803560208160051b018083610ee03750505060443560040160088135116119be57803560208160051b018083611000375050505f546002146119be5760025f55610d786116ff565b610dc05161112052611000516111205118610d9c57610ee051611120511815610d9e565b5f5b610e07576010611140527f56616c69646174696f6e206572726f72000000000000000000000000000000006111605261114050611140518061116001601f825f031636823750506308c379a061110052602061112052601f19601f61114051011660440161111cfd5b5f6008905b8061114052610dc0516111405110610e2357610e94565b61114051610dc0518110156119be5760051b610de001516101605261114051610ee0518110156119be5760051b610f0001516101805261114051611000518110156119be5760051b61102001516101a05260016101c052610e85611160611208565b61116050600101818118610e0c575b505060035f55005b63c98856aa8118611139576024361034176119be576004358060a01c6119be5760c052610ec76116ff565b60045460e05260c0516004557f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a260e0516101005260c051610120526040610100a100611139565b63952258c08118611139576044361034176119be5760043560040160088135116119be57803560208160051b0180836107a0375050505f546002146119be5760025f555f6107a051600881116119be578015610f8e57905b8060051b6107c001516108c0526108c05161016052610f836117fd565b600101818118610f66575b505060035f5500611139565b63fbd159558118611139576024361034176119be57610fb76116ff565b60055460c0526004356005557f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a60c05160e05260043561010052604060e0a100611139565b6330e59cbc8118611139576024361034176119be576004358060a01c6119be5760c0526110276116ff565b60c0516007557f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f313360e05260c05161010052604060e0a100611139565b63c4ec2ff18118611139576024361034176119be576110816116ff565b670de0b6b3a763ffff60043511156110ef57601160c0527f57726f6e6720736572766963652066656500000000000000000000000000000060e05260c05060c0518060e001601f825f031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60085460c0526004356008557f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd48136635460c05160e05260043561010052604060e0a10061113956611139565b5b005b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc5f855af161116a573d5f5f3e3d5ffd5b3d61118157803b156119be57600161010052611199565b60203d106119be5760a0518060011c6119be57610100525b61010090505161120657600f610120527f4661696c6564207472616e7366657200000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6002610160516020525f5260405f205f602f905b808301548160051b6101e0015260010181811861121c575050506101c051156112b257610180516107805118156112b257600b6107c0527f57726f6e6720636f756e740000000000000000000000000000000000000000006107e0526107c0506107c051806107e001601f825f031636823750506308c379a06107805260206107a052601f19601f6107c051011660440161079cfd5b610720516107805180156119be57808204905090506107c0526107c05161072051036107205260016107805103610780526002610160516020525f5260405f205f602f905b8060051b6101e00151818401556001018181186112f7575050506040366107e0375f6005905b8061082052610820516108205101600a036108005261080051600a81116119be5760051b6102000151156113505761135b565b60010181811861131d575b505073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61020051186114215760206119e65f395f5163c872a3c56108205261016061084061016061020060045afa506103206109a061032061036060045afa506107c051610cc0526101a051610ce05261068051610d00526106a051610d20526106c051610d40526106e051610d605261070051610d805230610da052602061082061058461083c6107c051855af161140a573d5f5f3e3d5ffd5b60203d106119be576108209050516107e052611597565b6102005163095ea7b36108205260206119e6610840396107c051610860526020610820604461083c5f855af1611459573d5f5f3e3d5ffd5b3d61147057803b156119be57600161088052611489565b60203d106119be57610820518060011c6119be57610880525b6108809050516114f857600e6108a0527f4661696c656420617070726f76650000000000000000000000000000000000006108c0526108a0506108a051806108c001601f825f031636823750506308c379a061086052602061088052601f19601f6108a051011660440161087cfd5b60206119e65f395f5163c872a3c56108205261016061084061016061020060045afa506103206109a061032061036060045afa506107c051610cc0526101a051610ce05261068051610d00526106a051610d20526106c051610d40526106e051610d605261070051610d805230610da052602061082061058461083c5f855af1611584573d5f5f3e3d5ffd5b60203d106119be576108209050516107e0525b6107e051610820525f610840526008546108605261086051156115ec57670de0b6b3a76400006107e051610860518082028115838383041417156119be57905090500461084052610840516108205103610820525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61080051600a81116119be5760051b61020001511861164d575f5f5f5f610820516101e0515ff1156119be5761084051156116af575f5f5f5f610840516007545ff1156119be576116af565b61080051600a81116119be5760051b61020001516040526101e0516060526108205160805261167a61113b565b61084051156116af5761080051600a81116119be5760051b6102000151604052600754606052610840516080526116af61113b565b7f1073c37866404dc5ccf364f61b6850f80619085a9a66bb67b4a9681c2ac614586101605161088052610780516108a0526107c0516108c0526107e0516108e0526080610880a16107e051815250565b60015433181561176457600b6040527f4e6f7420636f6d7061737300000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3660206020360301116119be5760206040526020602036036060376040805160200360031b6020820151811c811b9050905060065418156117fb57600e6080527f496e76616c69642070616c6f6d6100000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b6002610160516020525f5260405f205f602f905b808301548160051b6101800152600101818118611811575050503361018051181561189b57600c610760527f556e617574686f72697a656400000000000000000000000000000000000000006107805261076050610760518061078001601f825f031636823750506308c379a061072052602061074052601f19601f61076051011660440161073cfd5b6106c05161190857600a610760527f416c6c20747261646564000000000000000000000000000000000000000000006107805261076050610760518061078001601f825f031636823750506308c379a061072052602061074052601f19601f61076051011660440161073cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101a0511861193b575f5f5f5f6106c051335ff1156119be57611955565b6101a051604052336060526106c05160805261195561113b565b5f6106c0525f610720526002610160516020525f5260405f205f602f905b8060051b610180015181840155600101818118611973575050507f829a8683c544ad289ce92d3ce06e9ebad69b18a6916e60ec766c2c217461d8e961016051610760526020610760a1565b5f80fd03e300af0ceb00cf0f0e01530ffc001802d010641138113811380f9a008f11381138006f000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d

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  ]
[ 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.