Goerli Testnet

Contract

0x7915be0b4BF48b46E594988AcE5553bc0eF7F2E3

Overview

ETH Balance

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Value
0x3461147883736622023-01-25 11:43:00427 days ago1674646980IN
 Contract Creation
0 ETH00.00000003

Latest 25 internal transactions (View All)

Advanced mode:
Parent Txn Hash Block From To Value
104135992024-01-22 4:10:3666 days ago1705896636
0x7915be0b...c0eF7F2E3
0 ETH
104129662024-01-22 1:26:3666 days ago1705886796
0x7915be0b...c0eF7F2E3
0 ETH
104127082024-01-22 0:16:2466 days ago1705882584
0x7915be0b...c0eF7F2E3
0 ETH
103577362024-01-11 15:32:4876 days ago1704987168
0x7915be0b...c0eF7F2E3
0 ETH
98029032023-10-03 16:06:48176 days ago1696349208
0x7915be0b...c0eF7F2E3
0 ETH
97632912023-09-26 15:24:48183 days ago1695741888
0x7915be0b...c0eF7F2E3
0 ETH
94168082023-07-27 11:28:12244 days ago1690457292
0x7915be0b...c0eF7F2E3
0 ETH
94167862023-07-27 11:23:12244 days ago1690456992
0x7915be0b...c0eF7F2E3
0 ETH
93757162023-07-20 8:15:00252 days ago1689840900
0x7915be0b...c0eF7F2E3
0 ETH
93757052023-07-20 8:11:24252 days ago1689840684
0x7915be0b...c0eF7F2E3
0 ETH
93721952023-07-19 17:13:24252 days ago1689786804
0x7915be0b...c0eF7F2E3
0 ETH
92275432023-06-23 15:35:36278 days ago1687534536
0x7915be0b...c0eF7F2E3
0 ETH
92268012023-06-23 12:22:00278 days ago1687522920
0x7915be0b...c0eF7F2E3
0 ETH
92158732023-06-21 13:44:12280 days ago1687355052
0x7915be0b...c0eF7F2E3
0 ETH
90677032023-05-26 14:05:24306 days ago1685109924
0x7915be0b...c0eF7F2E3
0 ETH
90612862023-05-25 12:24:24307 days ago1685017464
0x7915be0b...c0eF7F2E3
0 ETH
90607672023-05-25 10:16:00308 days ago1685009760
0x7915be0b...c0eF7F2E3
0 ETH
90607632023-05-25 10:15:00308 days ago1685009700
0x7915be0b...c0eF7F2E3
0 ETH
90607612023-05-25 10:14:12308 days ago1685009652
0x7915be0b...c0eF7F2E3
0 ETH
90451332023-05-22 17:35:48310 days ago1684776948
0x7915be0b...c0eF7F2E3
0 ETH
90451292023-05-22 17:35:00310 days ago1684776900
0x7915be0b...c0eF7F2E3
0 ETH
90268972023-05-19 11:28:36313 days ago1684495716
0x7915be0b...c0eF7F2E3
0 ETH
90268962023-05-19 11:28:12313 days ago1684495692
0x7915be0b...c0eF7F2E3
0 ETH
90267822023-05-19 10:58:12313 days ago1684493892
0x7915be0b...c0eF7F2E3
0 ETH
90263022023-05-19 8:55:24314 days ago1684486524
0x7915be0b...c0eF7F2E3
0 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x9111973d...371c0a7ce
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.3.7

Optimization Enabled:
N/A

Other Settings:
GNU GPLv3 license

Contract Source Code (Vyper language format)

# @version 0.3.7

"""
@title Vesting Escrow
@author Curve Finance, Yearn Finance, Lido Finance
@license GPL-3.0
@notice Vests ERC20 tokens for a single address
@dev Intended to be deployed many times via `VotingEscrowFactory`
"""

from vyper.interfaces import ERC20


interface IVestingEscrowFactory:
    def voting_adapter() -> address: nonpayable
    def owner() -> address: nonpayable
    def manager() -> address: nonpayable


event VestingEscrowInitialized:
    factory: indexed(address)
    recipient: indexed(address)
    token: indexed(address)
    amount: uint256
    start_time: uint256
    end_time: uint256
    cliff_length: uint256
    is_fully_revokable: bool


event Claim:
    beneficiary: indexed(address)
    claimed: uint256


event UnvestedTokensRevoked:
    recoverer: indexed(address)
    revoked: uint256


event VestingFullyRevoked:
    recoverer: indexed(address)
    revoked: uint256


event ERC20Recovered:
    token: address
    amount: uint256


event ETHRecovered:
    amount: uint256


recipient: public(address)
token: public(ERC20)
start_time: public(uint256)
end_time: public(uint256)
cliff_length: public(uint256)
factory: public(IVestingEscrowFactory)
total_locked: public(uint256)
is_fully_revokable: public(bool)

total_claimed: public(uint256)
disabled_at: public(uint256)
initialized: public(bool)
is_fully_revoked: public(bool)


@external
def __init__():
    """
    @notice Initialize source contract implementation.
    """
    # ensure that the original contract cannot be initialized
    self.initialized = True


@external
def initialize(
    token: address,
    amount: uint256,
    recipient: address,
    start_time: uint256,
    end_time: uint256,
    cliff_length: uint256,
    is_fully_revokable: bool,
    factory: address,
) -> bool:
    """
    @notice Initialize the contract.
    @dev This function is separate from `__init__` because of the factory pattern
         used in `VestingEscrowFactory.deploy_vesting_contract`. It may be called
         once per deployment.
    @param token Address of the ERC20 token being distributed
    @param amount Amount of the ERC20 token to be controleed by escrow
    @param recipient Address to vest tokens for
    @param start_time Epoch time at which token distribution starts
    @param end_time Time until everything should be vested
    @param cliff_length Duration after which the first portion vests
    @param factory Address of the parent factory
    """
    assert not self.initialized, "can only initialize once"
    self.initialized = True

    self.token = ERC20(token)
    self.is_fully_revokable = is_fully_revokable
    self.start_time = start_time
    self.end_time = end_time
    self.cliff_length = cliff_length

    assert self.token.balanceOf(self) >= amount, "insufficient balance"

    self.total_locked = amount
    self.recipient = recipient
    self.disabled_at = end_time  # Set to maximum time
    self.factory = IVestingEscrowFactory(factory)
    log VestingEscrowInitialized(
        factory,
        recipient,
        token,
        amount,
        start_time,
        end_time,
        cliff_length,
        is_fully_revokable,
    )

    return True


@internal
@view
def _total_vested_at(time: uint256) -> uint256:
    start: uint256 = self.start_time
    end: uint256 = self.end_time
    locked: uint256 = self.total_locked
    if time < start + self.cliff_length:
        return 0
    return min(locked * (time - start) / (end - start), locked)


@internal
@view
def _unclaimed(time: uint256 = block.timestamp) -> uint256:
    if self.is_fully_revoked:
        return 0
    claim_time: uint256 = min(time, self.disabled_at)
    return self._total_vested_at(claim_time) - self.total_claimed


@external
@view
def unclaimed() -> uint256:
    """
    @notice Get the number of unclaimed, vested tokens for recipient
    """
    return self._unclaimed()


@internal
@view
def _locked(time: uint256 = block.timestamp) -> uint256:
    if time >= self.disabled_at:
        return 0
    return self.total_locked - self._total_vested_at(time)


@external
@view
def locked() -> uint256:
    """
    @notice Get the number of locked tokens for recipient
    """
    return self._locked()


@external
def claim(
    beneficiary: address = msg.sender, amount: uint256 = max_value(uint256)
):
    """
    @notice Claim tokens which have vested
    @param beneficiary Address to transfer claimed tokens to
    @param amount Amount of tokens to claim
    """
    self._check_sender_is_recipient()

    claimable: uint256 = min(self._unclaimed(), amount)
    self.total_claimed += claimable

    assert self.token.transfer(
        beneficiary, claimable, default_return_value=True
    ), "transfer failed"

    log Claim(beneficiary, claimable)


@external
def revoke_unvested():
    """
    @notice Disable further flow of tokens and revoke the unvested part to owner
    """
    self._check_sender_is_owner_or_manager()

    revokable: uint256 = self._locked()
    assert revokable > 0, "nothing to revoke"
    self.disabled_at = block.timestamp

    assert self.token.transfer(
        self._owner(), revokable, default_return_value=True
    ), "transfer failed"

    log UnvestedTokensRevoked(msg.sender, revokable)


@external
def revoke_all():
    """
    @notice Disable further flow of tokens and revoke all tokens to owner
    """
    self._check_sender_is_owner()
    assert self.is_fully_revokable, "not allowed for ordinary vesting"
    assert not self.is_fully_revoked, "already fully revoked"

    # NOTE: do not revoke extra tokens
    revokable: uint256 = self._locked() + self._unclaimed()
    assert revokable > 0, "nothing to revoke"

    self.is_fully_revoked = True
    self.disabled_at = block.timestamp

    assert self.token.transfer(
        self._owner(), revokable, default_return_value=True
    ), "transfer failed"

    log VestingFullyRevoked(msg.sender, revokable)


@external
def recover_erc20(token: address, amount: uint256):
    """
    @notice Recover ERC20 tokens to recipient
    @param token Address of the ERC20 token to be recovered
    @param amount Amount of the ERC20 token to be recovered
    """
    recoverable: uint256 = amount
    if token == self.token.address:
        available: uint256 = self.token.balanceOf(self) - (
            self._locked() + self._unclaimed()
        )
        recoverable = min(recoverable, available)
    if recoverable > 0:
        assert ERC20(token).transfer(
            self.recipient, recoverable, default_return_value=True
        ), "transfer failed"
        log ERC20Recovered(token, recoverable)


@external
def recover_ether():
    """
    @notice Recover Ether to recipient
    """
    amount: uint256 = self.balance
    if amount != 0:
        self._safe_send_ether(self.recipient, amount)
        log ETHRecovered(amount)


@external
def aragon_vote(abi_encoded_params: Bytes[1000]):
    """
    @notice Participate Aragon vote using all available tokens on the contract's balance
    @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_aragon_vote_calldata
    """
    self._check_sender_is_recipient()
    self._check_voting_adapter_is_set()
    raw_call(
        self.factory.voting_adapter(),
        _abi_encode(
            abi_encoded_params,
            method_id=method_id("aragon_vote(bytes)"),
        ),
        is_delegate_call=True,
    )


@external
def snapshot_set_delegate(abi_encoded_params: Bytes[1000]):
    """
    @notice Delegate Snapshot voting power of all available tokens on the contract's balance
    @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_snapshot_set_delegate_calldata
    """
    self._check_sender_is_recipient()
    self._check_voting_adapter_is_set()
    raw_call(
        self.factory.voting_adapter(),
        _abi_encode(
            abi_encoded_params,
            method_id=method_id("snapshot_set_delegate(bytes)"),
        ),
        is_delegate_call=True,
    )


@external
def delegate(abi_encoded_params: Bytes[1000]):
    """
    @notice Delegate voting power of all available tokens on the contract's balance
    @param abi_encoded_params Abi encoded data for call. Can be obtained from VotingAdapter.encode_delegate_calldata
    """
    self._check_sender_is_recipient()
    self._check_voting_adapter_is_set()
    raw_call(
        self.factory.voting_adapter(),
        _abi_encode(
            abi_encoded_params,
            method_id=method_id("delegate(bytes)"),
        ),
        is_delegate_call=True,
    )


@internal
def _owner() -> address:
    return self.factory.owner()


@internal
def _manager() -> address:
    return self.factory.manager()


@internal
def _check_sender_is_owner_or_manager():
    assert (
        msg.sender == self._owner() or msg.sender == self._manager()
    ), "msg.sender not owner or manager"


@internal
def _check_sender_is_owner():
    assert msg.sender == self._owner(), "msg.sender not owner"


@internal
def _check_sender_is_recipient():
    assert msg.sender == self.recipient, "msg.sender not recipient"


@internal
def _check_voting_adapter_is_set():
    assert self.factory.voting_adapter() != empty(
        address
    ), "voting adapter not set"


@internal
def _safe_send_ether(_to: address, _value: uint256):
    """
    @notice Overcome 2300 gas limit on simple send
    """
    _response: Bytes[32] = raw_call(
        _to, empty(bytes32), value=_value, max_outsize=32
    )
    if len(_response) > 0:
        assert convert(_response, bool), "ETH transfer failed"

Contract ABI

[{"name":"VestingEscrowInitialized","inputs":[{"name":"factory","type":"address","indexed":true},{"name":"recipient","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"start_time","type":"uint256","indexed":false},{"name":"end_time","type":"uint256","indexed":false},{"name":"cliff_length","type":"uint256","indexed":false},{"name":"is_fully_revokable","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claim","inputs":[{"name":"beneficiary","type":"address","indexed":true},{"name":"claimed","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UnvestedTokensRevoked","inputs":[{"name":"recoverer","type":"address","indexed":true},{"name":"revoked","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"VestingFullyRevoked","inputs":[{"name":"recoverer","type":"address","indexed":true},{"name":"revoked","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ERC20Recovered","inputs":[{"name":"token","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ETHRecovered","inputs":[{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initialize","inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"recipient","type":"address"},{"name":"start_time","type":"uint256"},{"name":"end_time","type":"uint256"},{"name":"cliff_length","type":"uint256"},{"name":"is_fully_revokable","type":"bool"},{"name":"factory","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"unclaimed","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"revoke_unvested","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"revoke_all","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"recover_erc20","inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"recover_ether","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"aragon_vote","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"snapshot_set_delegate","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"delegate","inputs":[{"name":"abi_encoded_params","type":"bytes"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"recipient","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"start_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"end_time","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"cliff_length","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"total_locked","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"is_fully_revokable","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"total_claimed","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"disabled_at","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"initialized","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_fully_revoked","inputs":[],"outputs":[{"name":"","type":"bool"}]}]

Deployed Bytecode

0x6003361161000c57610fb4565b60003560e01c3461144a57633d4da16d81186101fa57610104361061144a576004358060a01c61144a576040526044358060a01c61144a5760605260c4358060011c61144a5760805260e4358060a01c61144a5760a052600a54156100c857601860c0527f63616e206f6e6c7920696e697469616c697a65206f6e6365000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001600a5560405160015560805160075560643560025560843560035560a4356004556024356001546370a0823160c0523060e052602060c0602460dc845afa610117573d600060003e3d6000fd5b60203d1061144a5760c0905051101561018d576014610100527f696e73756666696369656e742062616c616e63650000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b60243560065560605160005560843560095560a05160055560405160605160a0517f2d30caaf2a01e6264cf4671ca427c07d01ad37075b1830726c7004e291faf89660243560c05260643560e05260406084610100376080516101405260a060c0a4600160c052602060c0f35b63669416b88118610223576004361061144a5760204260c05261021e610120611055565b610120f35b63cf309012811861024c576004361061144a5760204260c0526102476101006110a9565b610100f35b634e71d92d811861028e576004361061144a5733610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61014052610304565b631e83409a81186102da576024361061144a576004358060a01c61144a57610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61014052610304565b63aad3ec96811861045b576044361061144a576004358060a01c61144a5761012052602435610140525b61030c6110e8565b4260c05261031b610180611055565b610180516101405180828118828410021890509050610160526008546101605180820182811061144a579050905060085560015463a9059cbb61018052610120516101a052610160516101c0526020610180604461019c6000855af1610386573d600060003e3d6000fd5b3d61039d57803b1561144a5760016101e0526103b6565b60203d1061144a57610180518060011c61144a576101e0525b6101e090505161042657600f610200527f7472616e73666572206661696c656400000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b610120517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d461016051610180526020610180a2005b63c31ab9748118610616576004361061144a576104766111df565b4260c0526104856101406110a9565b6101405161012052610120516104fb576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b4260095560015463a9059cbb61016052610516610140611198565b6101405161018052610120516101a0526020610160604461017c6000855af1610544573d600060003e3d6000fd5b3d61055b57803b1561144a5760016101c052610574565b60203d1061144a57610160518060011c61144a576101c0525b6101c09050516105e457600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337ff23abb1803813c60f11b7ce4b5ae745d16ce0d99b71cf034c699d6634d0a961361012051610140526020610140a2005b637bdbb5f781186108ce576004361061144a5761063161126f565b60075461069c576020610120527f6e6f7420616c6c6f77656420666f72206f7264696e6172792076657374696e676101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b600b5415610708576015610120527f616c72656164792066756c6c79207265766f6b656400000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b4260c0526107176101406110a9565b610140514260c05261072a610160611055565b6101605180820182811061144a579050905061012052610120516107ae576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b6001600b554260095560015463a9059cbb610160526107ce610140611198565b6101405161018052610120516101a0526020610160604461017c6000855af16107fc573d600060003e3d6000fd5b3d61081357803b1561144a5760016101c05261082c565b60203d1061144a57610160518060011c61144a576101c0525b6101c090505161089c57600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337fc1f0f68ce9eb64d4ec0574f3a5ab1a8534d4e6bdc64804f6efefacd72303dd5161012051610140526020610140a2005b6323a50d3c8118610abb576044361061144a576004358060a01c61144a576101205260243561014052600154610120511861099e576001546370a0823161018052306101a0526020610180602461019c845afa610930573d600060003e3d6000fd5b60203d1061144a576101809050514260c05261094d6101c06110a9565b6101c0514260c0526109606101e0611055565b6101e05180820182811061144a579050905080820382811161144a579050905061016052610140516101605180828118828410021890509050610140525b6101405115610ab9576101205163a9059cbb6101605260005461018052610140516101a0526020610160604461017c6000855af16109e1573d600060003e3d6000fd5b3d6109f857803b1561144a5760016101c052610a11565b60203d1061144a57610160518060011c61144a576101c0525b6101c0905051610a8157600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b7f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e157999610120516101605261014051610180526040610160a15b005b63644613468118610b23576004361061144a5747610120526101205115610b215760005460405261012051606052610af16112e2565b7f0296f2c4dbc8c0e53c0ffab63f84aeebd5c28aa143475a37346bf15ac003f32761012051610140526020610140a15b005b63412f31218118610c2c576044361061144a576004356004016103e881351161144a5780358060e05260208201818161010037505050610b616110e8565b610b696113a5565b63412f312161056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610bfb573d600060003e3d6000fd5b60203d1061144a57610500518060a01c61144a57610540526105409050515af4610c2a573d600060003e3d6000fd5b005b63862e69708118610d35576044361061144a576004356004016103e881351161144a5780358060e05260208201818161010037505050610c6a6110e8565b610c726113a5565b63862e697061056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610d04573d600060003e3d6000fd5b60203d1061144a57610500518060a01c61144a57610540526105409050515af4610d33573d600060003e3d6000fd5b005b630ccfac9e8118610e3e576044361061144a576004356004016103e881351161144a5780358060e05260208201818161010037505050610d736110e8565b610d7b6113a5565b630ccfac9e61056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610e0d573d600060003e3d6000fd5b60203d1061144a57610500518060a01c61144a57610540526105409050515af4610e3c573d600060003e3d6000fd5b005b6366d003ac8118610e5d576004361061144a5760005460405260206040f35b63fc0c546a8118610e7c576004361061144a5760015460405260206040f35b63834ee4178118610e9b576004361061144a5760025460405260206040f35b63162433568118610eba576004361061144a5760035460405260206040f35b6394abf7608118610ed9576004361061144a5760045460405260206040f35b63c45a01558118610ef8576004361061144a5760055460405260206040f35b633c48a6208118610f17576004361061144a5760065460405260206040f35b632cbd43d38118610f36576004361061144a5760075460405260206040f35b636af904c68118610f55576004361061144a5760085460405260206040f35b63ac1a2f698118610f74576004361061144a5760095460405260206040f35b63158ef93e8118610f93576004361061144a57600a5460405260206040f35b636d01f0028118610fb2576004361061144a57600b5460405260206040f35b505b60006000fd5b60025460605260035460805260065460a05260605160045480820182811061144a57905090506040511015610ff3576000815250611053565b60a05160405160605180820382811161144a579050905080820281158383830414171561144a579050905060805160605180820382811161144a5790509050801561144a578082049050905060a051808281188284100218905090508152505b565b600b54156110675760008152506110a7565b60c0516009548082811882841002189050905060e05260e05160405261108e610100610fba565b6101005160085480820382811161144a57905090508152505b565b60095460c051106110be5760008152506110e6565b60065460c0516040526110d160e0610fba565b60e05180820382811161144a57905090508152505b565b60005433181561114f5760186040527f6d73672e73656e646572206e6f7420726563697069656e74000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b60055463481c6a75604052602060406004605c6000855af1611178573d600060003e3d6000fd5b60203d1061144a576040518060a01c61144a576080526080905051815250565b600554638da5cb5b604052602060406004605c6000855af16111bf573d600060003e3d6000fd5b60203d1061144a576040518060a01c61144a576080526080905051815250565b6111e960a0611198565b60a05133186111f957600161120a565b61120360c0611151565b60c0513318155b61126d57601f60e0527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e61676572006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b61127960a0611198565b60a0513318156112e057601460c0527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b600060c05260c050602061010060c05160e06060516040515af161130b573d600060003e3d6000fd5b3d602081183d602010021860e05260e080518060805260208201805160a052505050608051156113a35760a05160805160200360031b1c6113a357601360c0527f455448207472616e73666572206661696c65640000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b6005546336e44612604052602060406004605c6000855af16113cc573d600060003e3d6000fd5b60203d1061144a576040518060a01c61144a57608052608090505161144857601660a0527f766f74696e672061646170746572206e6f74207365740000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b565b600080fda165767970657283000307000b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.