ETH Price: $3,278.32 (-3.42%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit200425232024-06-07 21:06:11214 days ago1717794371IN
0xD552B512...77AbB30f9
0.02 ETH0.0036958610.94016701

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
200425232024-06-07 21:06:11214 days ago1717794371
0xD552B512...77AbB30f9
0.02 ETH
Loading...
Loading

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

Contract Name:
Uniswap V3 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 paris

"""
@title Uniswap V3 TWAP Bot
@license Apache 2.0
@author Volume.finance
"""

struct SwapInfo:
    path: Bytes[224]
    amount: uint256

struct ExactInputParams:
    path: Bytes[224]
    recipient: address
    deadline: uint256
    amountIn: uint256
    amountOutMinimum: uint256

struct Deposit:
    depositor: address
    path: Bytes[224]
    input_amount: uint256
    number_trades: uint256
    interval: uint256
    remaining_counts: uint256
    starting_time: uint256

interface SwapRouter:
    def WETH9() -> address: pure
    def exactInput(params: ExactInputParams) -> 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

interface Weth:
    def deposit(): payable
    def withdraw(wad: uint256): nonpayable

VETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # Virtual ETH
WETH: immutable(address)
ROUTER: immutable(address)
MAX_SIZE: constant(uint256) = 8
DENOMINATOR: constant(uint256) = 10 ** 18
compass: public(address)
deposit_list: public(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
    token0: address
    token1: address
    input_amount: 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 = _compass_evm
    ROUTER = router
    WETH = SwapRouter(router).WETH9()
    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
    _fee: uint256 = self.fee
    if _fee > 0:
        _fee = _fee * number_trades
        assert _value >= _fee, "Insuf fee"
        send(self.refund_wallet, _fee)
        _value = unsafe_sub(_value, _fee)
    _next_deposit: uint256 = self.next_deposit
    _starting_time: uint256 = starting_time
    if starting_time <= block.timestamp:
        _starting_time = block.timestamp
    assert number_trades > 0, "Wrong count"
    for swap_info in swap_infos:
        amount: uint256 = 0
        assert len(swap_info.path) >= 43, "Path error"
        token0: address = convert(slice(swap_info.path, 0, 20), address)
        fee_index: uint256 = 20
        if token0 == VETH:
            amount = swap_info.amount
            assert _value >= amount, "Insuf deposit"
            _value = unsafe_sub(_value, amount)
            fee_index = 40
        else:
            amount = ERC20(token0).balanceOf(self)
            assert ERC20(token0).transferFrom(msg.sender, self, swap_info.amount, default_return_value=True), "Failed transferFrom"
            amount = ERC20(token0).balanceOf(self) - amount
        is_stable_swap: bool = True
        for i in range(8):
            if unsafe_add(fee_index, 3) >= len(swap_info.path):
                break
            fee_level: uint256 = convert(slice(swap_info.path, fee_index, 3), uint256)
            if fee_level == 0:
                break
            if fee_level > 500:
                is_stable_swap = False
            fee_index = unsafe_add(fee_index, 23)
        self.deposit_list[_next_deposit] = Deposit({
            depositor: msg.sender,
            path: swap_info.path,
            input_amount: amount,
            number_trades: number_trades,
            interval: interval,
            remaining_counts: number_trades,
            starting_time: _starting_time
        })
        log Deposited(_next_deposit, token0, convert(slice(swap_info.path, unsafe_sub(len(swap_info.path), 20), 20), address), 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) -> uint256:
    _deposit: Deposit = self.deposit_list[deposit_id]
    assert _deposit.remaining_counts > 0 and _deposit.remaining_counts == remaining_count, "Wrong count"
    _amount: uint256 = _deposit.input_amount / _deposit.remaining_counts
    _deposit.input_amount -= _amount
    _deposit.remaining_counts -= 1
    self.deposit_list[deposit_id] = _deposit
    _out_amount: uint256 = 0
    _path: Bytes[224] = _deposit.path
    token0: address = convert(slice(_path, 0, 20), address)
    token1: address = convert(slice(_path, unsafe_sub(len(_path), 20), 20), address)
    if token0 == VETH:
        _path = slice(_path, 20, unsafe_sub(len(_path), 20))
        Weth(WETH).deposit(value=_amount)
        ERC20(WETH).approve(ROUTER, _amount)
        _out_amount = ERC20(token1).balanceOf(self)
        SwapRouter(ROUTER).exactInput(ExactInputParams({
            path: _path,
            recipient: self,
            deadline: block.timestamp,
            amountIn: _amount,
            amountOutMinimum: amount_out_min
        }))
        _out_amount = ERC20(token1).balanceOf(self) - _out_amount
    else:
        assert ERC20(token0).approve(ROUTER, _amount), "Failed approve"
        if token1 == VETH:
            _path = slice(_path, 0, unsafe_sub(len(_path), 20))
            _out_amount = ERC20(WETH).balanceOf(self)
            SwapRouter(ROUTER).exactInput(ExactInputParams({
                path: _path,
                recipient: self,
                deadline: block.timestamp,
                amountIn: _amount,
                amountOutMinimum: amount_out_min
            }))
            _out_amount = ERC20(WETH).balanceOf(self) - _out_amount
            Weth(WETH).withdraw(_out_amount)
        else:
            _out_amount = ERC20(token1).balanceOf(self)
            SwapRouter(ROUTER).exactInput(ExactInputParams({
                path: _path,
                recipient: self,
                deadline: block.timestamp,
                amountIn: _amount,
                amountOutMinimum: amount_out_min
            }))
            _out_amount = ERC20(token1).balanceOf(self) - _out_amount
    _service_fee: uint256 = self.service_fee
    service_fee_amount: uint256 = 0
    if _service_fee > 0:
        service_fee_amount = unsafe_div(_out_amount * _service_fee, DENOMINATOR)
    if token1 == VETH:
        if service_fee_amount > 0:
            send(self.service_fee_collector, service_fee_amount)
            send(_deposit.depositor, unsafe_sub(_out_amount, service_fee_amount))
        else:
            send(_deposit.depositor, _out_amount)
    else:
        if service_fee_amount > 0:
            self._safe_transfer(token1, self.service_fee_collector, service_fee_amount)
            self._safe_transfer(token1, _deposit.depositor, unsafe_sub(_out_amount, service_fee_amount))
        else:
            self._safe_transfer(token1, _deposit.depositor, _out_amount)
    log Swapped(deposit_id, _deposit.remaining_counts, _amount, _out_amount)
    return _out_amount

@internal
def _paloma_check():
    assert msg.sender == self.compass, "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))
    return res

@external
@nonreentrant('lock')
def cancel(deposit_id: uint256):
    _deposit: Deposit = self.deposit_list[deposit_id]
    assert _deposit.depositor == msg.sender, "Unauth"
    assert _deposit.input_amount > 0, "All traded"
    token0: address = convert(slice(_deposit.path, 0, 20), address)
    if token0 == VETH:
        send(msg.sender, _deposit.input_amount)
    else:
        self._safe_transfer(token0, msg.sender, _deposit.input_amount)
    log Canceled(deposit_id, token0, convert(slice(_deposit.path, unsafe_sub(len(_deposit.path), 20), 20), address), _deposit.input_amount)
    _deposit.input_amount = 0
    _deposit.remaining_counts = 0
    self.deposit_list[deposit_id] = _deposit

@external
@nonreentrant('lock')
def multiple_cancel(deposit_ids: DynArray[uint256, MAX_SIZE]):
    for deposit_id in deposit_ids:
        _deposit: Deposit = self.deposit_list[deposit_id]
        assert _deposit.depositor == msg.sender, "Unauth"
        assert _deposit.input_amount > 0, "All traded"
        token0: address = convert(slice(_deposit.path, 0, 20), address)
        if token0 == VETH:
            send(msg.sender, _deposit.input_amount)
        else:
            self._safe_transfer(token0, msg.sender, _deposit.input_amount)
        log Canceled(deposit_id, token0, convert(slice(_deposit.path, unsafe_sub(len(_deposit.path), 20), 20), address), _deposit.input_amount)
        _deposit.input_amount = 0
        _deposit.remaining_counts = 0
        self.deposit_list[deposit_id] = _deposit

@external
def update_compass(new_compass: address):
    self._paloma_check()
    self.compass = 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 and self.paloma == empty(bytes32) and len(msg.data) == 36, "Invalid"
    _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()
    old_service_fee_collector: address = self.service_fee_collector
    self.service_fee_collector = new_service_fee_collector
    log UpdateServiceFeeCollector(old_service_fee_collector, new_service_fee_collector)

@external
def update_service_fee(new_service_fee: uint256):
    self._paloma_check()
    assert new_service_fee < DENOMINATOR
    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__():
    assert msg.sender == WETH

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},{"name":"token0","type":"address","indexed":false},{"name":"token1","type":"address","indexed":false},{"name":"input_amount","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":"path","type":"bytes"},{"name":"amount","type":"uint256"}]},{"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","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"deposit_list","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"depositor","type":"address"},{"name":"path","type":"bytes"},{"name":"input_amount","type":"uint256"},{"name":"number_trades","type":"uint256"},{"name":"interval","type":"uint256"},{"name":"remaining_counts","type":"uint256"},{"name":"starting_time","type":"uint256"}]}]},{"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

0x60003560e01c60026012820660011b611fa401601e39600051565b63eb8acce681186100365734611f9f5760015460405260206040f35b6330e59cbc811861142957602436103417611f9f576004358060a01c611f9f5760c052610061611e9e565b60075460e05260c0516007557f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f3160e0516101005260c051610120526040610100a100611429565b63e25f7230811861142957602436103417611f9f57602080604052600260043560205260005260406000208160400160e082548252806020830152600183018183016020825401600081601f0160051c60088111611f9f57801561011e57905b808501548160051b850152600101818118610108575b5050508051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060098301546040830152600a8301546060830152600b8301546080830152600c83015460a0830152600d83015460c083015290509050810190506040f3611429565b6312ece1ed81186114295734611f9f5760035460405260206040f3611429565b6322221b0c81186114295734611f9f5760045460405260206040f3611429565b63ddca3f4381186114295734611f9f5760055460405260206040f3611429565b63c09f329181186102075734611f9f5760065460405260206040f35b636974af69811861142957602436103417611f9f576004358060a01c611f9f5760c052610232611e9e565b60c0516001557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a3360e05260c05161010052604060e0a100611429565b63d8fe764d811861028b5734611f9f5760075460405260206040f35b63ff44cecd811861142957608436103417611f9f576004356004016008813511611f9f57803560208160051b018083610700375050506024356004016008813511611f9f57803560208160051b0180836108203750505033611f9f57610700516109405260006109605260006008905b80610a805261070051610a80511061031257610386565b6109605160078111611f9f57610a805161070051811015611f9f5760051b610720015161016052610a805161082051811015611f9f5760051b61084001516101805260016101a052610365610aa061150e565b610aa0518160051b61098001526001810161096052506001018181186102fb575b5050602080610a805280610a80016000610960518083528060051b60008260088111611f9f5780156103d257905b8060051b61098001518160051b6020880101526001018181186103b4575b50508201602001915050905081019050610a80f3611429565b6310d418c281186104075734611f9f5760085460405260206040f35b6323fde8e281186114295734611f9f5760015433186104385760065461043157602436181561043b565b600061043b565b60005b61049c5760076040527f496e76616c69640000000000000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b36602411611f9f576020606052602060046080376060805160200360031b6020820151811c811b905090506040526040516006557f2700ed1ef9147da3f7fdcaae08cbe6d1c92ec7fa6bace169d9c49e398e3cb1ca60405160605260206060a100611429565b637c95b0ef8118610be65760a3361115611f9f576004356004016008813511611f9f57803560008160088111611f9f57801561058157905b61012081026060018160051b60208601013560208601018035810160e0813511611f9f5760208135018082853750506020810135610100830152505060010181811861053a575b5050806040525050600054600214611f9f57600260005534610960526005546109805261098051156106655761098051602435808202811583838304141715611f9f579050905061098052610980516109605110156106405760096109a0527f496e7375662066656500000000000000000000000000000000000000000000006109c0526109a0506109a051806109c001601f826000031636823750506308c379a061096052602061098052601f19601f6109a051011660440161097cfd5b6000600060006000610980516004546000f115611f9f57610980516109605103610960525b6003546109a0526064356109c052426064351161068257426109c0525b6024356106ef57600b6109e0527f57726f6e6720636f756e74000000000000000000000000000000000000000000610a00526109e0506109e05180610a0001601f826000031636823750506308c379a06109a05260206109c052601f19601f6109e05101166044016109bcfd5b600060405160088111611f9f578015610bb757905b61012081026060016101206109e06101208360045afa50506000610b0052602b6109e051101561079457600a610b20527f50617468206572726f7200000000000000000000000000000000000000000000610b4052610b2050610b205180610b4001601f826000031636823750506308c379a0610ae0526020610b0052601f19601f610b20510116604401610afcfd5b6109e051601411611f9f57610a0051610b60526014610b4052610b406020810151815160200360031b1c9050610b20526014610b405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610b20511861087c57610ae051610b0052610b005161096051101561086457600d610b60527f496e737566206465706f73697400000000000000000000000000000000000000610b8052610b6050610b605180610b8001601f826000031636823750506308c379a0610b20526020610b4052601f19601f610b60510116604401610b3cfd5b610b00516109605103610960526028610b40526109ec565b610b20516370a08231610b605230610b80526020610b606024610b7c845afa6108aa573d600060003e3d6000fd5b60203d10611f9f57610b60905051610b0052610b20516323b872dd610b605233610b805230610ba052610ae051610bc0526020610b606064610b7c6000855af16108f9573d600060003e3d6000fd5b3d61091057803b15611f9f576001610be052610929565b60203d10611f9f57610b60518060011c611f9f57610be0525b610be0905051610999576013610c00527f4661696c6564207472616e7366657246726f6d00000000000000000000000000610c2052610c0050610c005180610c2001601f826000031636823750506308c379a0610bc0526020610be052601f19601f610c00510116604401610bdcfd5b610b20516370a08231610b605230610b80526020610b606024610b7c845afa6109c7573d600060003e3d6000fd5b60203d10611f9f57610b60905051610b0051808203828111611f9f5790509050610b00525b6001610b605260006008905b80610b80526109e0516003610b40510110610a1257610a84565b610b40516109e0516003820111611f9f5780610a00018051610be052506003610bc052610bc090506020810151815160200360031b1c9050610ba052610ba051610a5b57610a84565b6101f5610ba05110610a6e576000610b60525b6017610b405101610b40526001018181186109f8575b505060026109a051602052600052604060002033815560206109e0510160018201600082601f0160051c60088111611f9f578015610ad657905b8060051b6109e0015181840155600101818118610abe575b50505050610b00516009820155602435600a820155604435600b820155602435600c8201556109c051600d820155507f20d88b5bab36c1ab0d0605dfa6d78c6314c7f4dc7f8ef6079097dd0eb925f5486109a051610bc052610b2051610be05260146109e051036109e0516014820111611f9f5780610a00018051610ba052506014610b8052610b8090506020810151815160200360031b1c9050610c0052610b0051610c205260406024610c40376109c051610c805233610ca052610b6051610cc052610120610bc0a160016109a051016109a052600101818118610704575b50506109a0516003556109605115610bdf57600060006000600061096051336000f115611f9f575b6003600055005b63fbd15955811861142957602436103417611f9f57610c03611e9e565b60055460c0526004356005557f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a60c05160e05260043561010052604060e0a100611429565b634b1cc18a8118610df95760c436103417611f9f576004356004016008813511611f9f57803560208160051b018083610700375050506024356004016008813511611f9f57803560208160051b018083610820375050506044356004016008813511611f9f57803560208160051b01808361094037505050600054600214611f9f576002600055610cd7611e9e565b61070051610a605261094051610a605118610cfb5761082051610a60511815610cfe565b60005b610d68576010610a80527f56616c69646174696f6e206572726f7200000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b60006008905b80610a805261070051610a805110610d8557610df0565b610a805161070051811015611f9f5760051b610720015161016052610a805161082051811015611f9f5760051b610840015161018052610a805161094051811015611f9f5760051b61096001516101a052610de1610aa061150e565b610aa050600101818118610d6e575b50506003600055005b63c98856aa811861142957602436103417611f9f576004358060a01c611f9f5760c052610e24611e9e565b60045460e05260c0516004557f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a260e0516101005260c051610120526040610100a100611429565b6340e58ee5811861142957602436103417611f9f57600054600214611f9f576002600055600260043560205260005260406000206000600e905b808301548160051b6101600152600101818118610ea55750505033610160511815610f30576006610320527f556e6175746800000000000000000000000000000000000000000000000000006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b61028051610f9e57600a610320527f416c6c20747261646564000000000000000000000000000000000000000000006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b61018051601411611f9f576101a051610360526014610340526103406020810151815160200360031b1c90506103205273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610320511861100657600060006000600061028051336000f115611f9f57611020565b61032051604052336060526102805160805261102061143c565b7f7d4911303d58b75c74db1c8fdcddfd5edbe6529674bc81be823e5e1b42f9ad1660043561038052610320516103a05260146101805103610180516014820111611f9f57806101a0018051610360525060146103405261034090506020810151815160200360031b1c90506103c052610280516103e0526080610380a160006102805260006102e052600260043560205260005260406000206000600e905b8060051b6101600151818401556001018181186110bf57505050600360005500611429565b63952258c0811861142957604436103417611f9f576004356004016008813511611f9f57803560208160051b01808361016037505050600054600214611f9f57600260005560006101605160088111611f9f5780156113a457905b8060051b61018001516102805260026102805160205260005260406000206000600e905b808301548160051b6102a0015260010181811861116357505050336102a05118156111ee576006610460527f556e6175746800000000000000000000000000000000000000000000000000006104805261046050610460518061048001601f826000031636823750506308c379a061042052602061044052601f19601f61046051011660440161043cfd5b6103c05161125c57600a610460527f416c6c20747261646564000000000000000000000000000000000000000000006104805261046050610460518061048001601f826000031636823750506308c379a061042052602061044052601f19601f61046051011660440161043cfd5b6102c051601411611f9f576102e0516104a0526014610480526104806020810151815160200360031b1c90506104605273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61046051186112c45760006000600060006103c051336000f115611f9f576112de565b61046051604052336060526103c0516080526112de61143c565b7f7d4911303d58b75c74db1c8fdcddfd5edbe6529674bc81be823e5e1b42f9ad16610280516104c052610460516104e05260146102c051036102c0516014820111611f9f57806102e00180516104a0525060146104805261048090506020810151815160200360031b1c9050610500526103c0516105205260806104c0a160006103c05260006104205260026102805160205260005260406000206000600e905b8060051b6102a001518184015560010181811861137f5750505060010181811861113f575b5050600360005500611429565b63c4ec2ff1811861142957602436103417611f9f576113ce611e9e565b670de0b6b3a763ffff60043511611f9f5760085460c0526004356008557f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd48136635460c05160e05260043561010052604060e0a10061142956611429565b5b6020611fc86000396000513318611f9f57005b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af161146f573d600060003e3d6000fd5b3d61148657803b15611f9f5760016101005261149e565b60203d10611f9f5760a0518060011c611f9f57610100525b61010090505161150c57600f610120527f4661696c6564205472616e7366657200000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b60026101605160205260005260406000206000600e905b808301548160051b6101c00152600101818118611525575050506103405115611557576101805161034051181561155a565b60005b6115c457600b610380527f57726f6e6720636f756e740000000000000000000000000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b6102e051610340518015611f9f5780820490509050610380526102e05161038051808203828111611f9f57905090506102e0526103405160018103818111611f9f5790506103405260026101605160205260005260406000206000600e905b8060051b6101c00151818401556001018181186116235750505060006103a05260206101e05101806103c0826101e060045afa50506103c051601411611f9f576103e0516105005260146104e0526104e06020810151815160200360031b1c90506104c05260146103c051036103c0516014820111611f9f57806103e0018051610520525060146105005261050090506020810151815160200360031b1c90506104e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104c0511861191b5760146103c051036103c0518160140111611f9f5780610520826103f460045afa5080610500526105009050602081510180610600828460045afa50505060206106005101806103c08261060060045afa50506020611fc860003960005163d0e30db061050052803b15611f9f576000610500600461051c61038051855af1611772573d600060003e3d6000fd5b506020611fc860003960005163095ea7b3610500526020611fe86105203961038051610540526020610500604461051c6000855af16117b6573d600060003e3d6000fd5b60203d10611f9f57610500518060011c611f9f576105605261056050506104e0516370a082316105005230610520526020610500602461051c845afa611801573d600060003e3d6000fd5b60203d10611f9f576105009050516103a0526020611fe860003960005163c04b8d596105005260208061052052806105200160a080825280820160206103c051018082826103c060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190503060208301524260408301526103805160608301526101a051608083015290508101505060206105006101c461051c6000855af16118b7573d600060003e3d6000fd5b60203d10611f9f5761050050506104e0516370a082316105005230610520526020610500602461051c845afa6118f2573d600060003e3d6000fd5b60203d10611f9f576105009050516103a051808203828111611f9f57905090506103a052611d28565b6104c05163095ea7b3610500526020611fe86105203961038051610540526020610500604461051c6000855af1611957573d600060003e3d6000fd5b60203d10611f9f57610500518060011c611f9f57610560526105609050516119df57600e610580527f4661696c656420617070726f76650000000000000000000000000000000000006105a0526105805061058051806105a001601f826000031636823750506308c379a061054052602061056052601f19601f61058051011660440161055cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104e05118611be45760146103c051036103c0518111611f9f5780610520826103e060045afa5080610500526105009050602081510180610600828460045afa50505060206106005101806103c08261060060045afa50506020611fc86000396000516370a082316105005230610520526020610500602461051c845afa611a81573d600060003e3d6000fd5b60203d10611f9f576105009050516103a0526020611fe860003960005163c04b8d596105005260208061052052806105200160a080825280820160206103c051018082826103c060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190503060208301524260408301526103805160608301526101a051608083015290508101505060206105006101c461051c6000855af1611b37573d600060003e3d6000fd5b60203d10611f9f5761050050506020611fc86000396000516370a082316105005230610520526020610500602461051c845afa611b79573d600060003e3d6000fd5b60203d10611f9f576105009050516103a051808203828111611f9f57905090506103a0526020611fc8600039600051632e1a7d4d610500526103a05161052052803b15611f9f576000610500602461051c6000855af1611bde573d600060003e3d6000fd5b50611d28565b6104e0516370a082316105005230610520526020610500602461051c845afa611c12573d600060003e3d6000fd5b60203d10611f9f576105009050516103a0526020611fe860003960005163c04b8d596105005260208061052052806105200160a080825280820160206103c051018082826103c060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190503060208301524260408301526103805160608301526101a051608083015290508101505060206105006101c461051c6000855af1611cc8573d600060003e3d6000fd5b60203d10611f9f5761050050506104e0516370a082316105005230610520526020610500602461051c845afa611d03573d600060003e3d6000fd5b60203d10611f9f576105009050516103a051808203828111611f9f57905090506103a0525b600854610500526000610520526105005115611d6957670de0b6b3a76400006103a05161050051808202811583838304141715611f9f579050905004610520525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6104e05118611de6576105205115611dc9576000600060006000610520516007546000f115611f9f576000600060006000610520516103a051036101c0516000f115611f9f57611e4e565b60006000600060006103a0516101c0516000f115611f9f57611e4e565b6105205115611e31576104e05160405260075460605261052051608052611e0b61143c565b6104e0516040526101c051606052610520516103a05103608052611e4e61143c56611e4e565b6104e0516040526101c0516060526103a051608052611e4e61143c565b7f1073c37866404dc5ccf364f61b6850f80619085a9a66bb67b4a9681c2ac614586101605161054052610340516105605261038051610580526103a0516105a0526080610540a16103a051815250565b600154331815611f0557600b6040527f4e6f7420636f6d7061737300000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b366020602036030111611f9f5760206040526020602036036060376040805160200360031b6020820151811c811b905090506006541815611f9d57600e6080527f496e76616c69642070616c6f6d6100000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fd00a801cb0c4801eb10e4026f001a0e6b03eb13b1142814281428050201ab14281428018b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564

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.