Holesky Testnet

Contract

0x1548B3200BCb6A3422b45faF1208D9904e4e69D6

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vesting Escrow

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
default evmVersion, 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 ERC20(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() -> uint256:
    if self.is_fully_revoked:
        return 0
    claim_time: uint256 = min(block.timestamp, 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() -> uint256:
    if block.timestamp >= self.disabled_at:
        return 0
    return self.total_locked - self._total_vested_at(block.timestamp)


@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)
) -> 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)

    return 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 = ERC20(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":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"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"}]}]

34611450576001600a5561143461001b61000039611434610000f36003361161000c57610f94565b60003560e01c3461142257633d4da16d81186101fa576101043610611422576004358060a01c611422576040526044358060a01c6114225760605260c4358060011c6114225760805260e4358060a01c6114225760a052600a54156100c857601860c0527f63616e206f6e6c7920696e697469616c697a65206f6e6365000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001600a5560405160015560805160075560643560025560843560035560a4356004556024356040516370a0823160c0523060e052602060c0602460dc845afa610117573d600060003e3d6000fd5b60203d106114225760c0905051101561018d576014610100527f696e73756666696369656e742062616c616e63650000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b60243560065560605160005560843560095560a05160055560405160605160a0517f2d30caaf2a01e6264cf4671ca427c07d01ad37075b1830726c7004e291faf89660243560c05260643560e05260406084610100376080516101405260a060c0a4600160c052602060c0f35b63669416b8811861021f576004361061142257602061021a610100611035565b610100f35b63cf3090128118610242576004361061142257602061023e60e0611085565b60e0f35b634e71d92d811861028457600436106114225733610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b631e83409a81186102d05760243610611422576004358060a01c61142257610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b63aad3ec9681186104525760443610611422576004358060a01c6114225761010052602435610120525b6103026110c0565b61030d610160611035565b6101605161012051808281188284100218905090506101405260085461014051808201828110611422579050905060085560015463a9059cbb610160526101005161018052610140516101a0526020610160604461017c6000855af1610378573d600060003e3d6000fd5b3d61038f57803b156114225760016101c0526103a8565b60203d1061142257610160518060011c611422576101c0525b6101c090505161041857600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b610100517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d461014051610160526020610160a26020610140f35b63c31ab974811861060957600436106114225761046d6111b7565b610478610140611085565b6101405161012052610120516104ee576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b4260095560015463a9059cbb61016052610509610140611129565b6101405161018052610120516101a0526020610160604461017c6000855af1610537573d600060003e3d6000fd5b3d61054e57803b156114225760016101c052610567565b60203d1061142257610160518060011c611422576101c0525b6101c09050516105d757600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337ff23abb1803813c60f11b7ce4b5ae745d16ce0d99b71cf034c699d6634d0a961361012051610140526020610140a2005b637bdbb5f781186108b5576004361061142257610624611247565b60075461068e576020610100527f6e6f7420616c6c6f77656420666f72206f7264696e6172792076657374696e676101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b600b54156106f9576015610100527f616c72656164792066756c6c79207265766f6b656400000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b610704610120611085565b61012051610713610140611035565b6101405180820182811061142257905090506101005261010051610795576011610120527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6001600b554260095560015463a9059cbb610140526107b5610120611129565b610120516101605261010051610180526020610140604461015c6000855af16107e3573d600060003e3d6000fd5b3d6107fa57803b156114225760016101a052610813565b60203d1061142257610140518060011c611422576101a0525b6101a090505161088357600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b337fc1f0f68ce9eb64d4ec0574f3a5ab1a8534d4e6bdc64804f6efefacd72303dd5161010051610120526020610120a2005b6323a50d3c8118610a9b5760443610611422576004358060a01c611422576101005260243561012052600154610100511861097e57610100516370a082316101605230610180526020610160602461017c845afa610918573d600060003e3d6000fd5b60203d10611422576101609050516109316101a0611085565b6101a0516109406101c0611035565b6101c0518082018281106114225790509050808203828111611422579050905061014052610120516101405180828118828410021890509050610120525b6101205115610a99576101005163a9059cbb610140526000546101605261012051610180526020610140604461015c6000855af16109c1573d600060003e3d6000fd5b3d6109d857803b156114225760016101a0526109f1565b60203d1061142257610140518060011c611422576101a0525b6101a0905051610a6157600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b7f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e157999610100516101405261012051610160526040610140a15b005b63644613468118610b0357600436106114225747610120526101205115610b015760005460405261012051606052610ad16112ba565b7f0296f2c4dbc8c0e53c0ffab63f84aeebd5c28aa143475a37346bf15ac003f32761012051610140526020610140a15b005b63412f31218118610c0c5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610b416110c0565b610b4961137d565b63412f312161056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610bdb573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610c0a573d600060003e3d6000fd5b005b63862e69708118610d155760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610c4a6110c0565b610c5261137d565b63862e697061056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ce4573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610d13573d600060003e3d6000fd5b005b630ccfac9e8118610e1e5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610d536110c0565b610d5b61137d565b630ccfac9e61056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ded573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610e1c573d600060003e3d6000fd5b005b6366d003ac8118610e3d57600436106114225760005460405260206040f35b63fc0c546a8118610e5c57600436106114225760015460405260206040f35b63834ee4178118610e7b57600436106114225760025460405260206040f35b63162433568118610e9a57600436106114225760035460405260206040f35b6394abf7608118610eb957600436106114225760045460405260206040f35b63c45a01558118610ed857600436106114225760055460405260206040f35b633c48a6208118610ef757600436106114225760065460405260206040f35b632cbd43d38118610f1657600436106114225760075460405260206040f35b636af904c68118610f3557600436106114225760085460405260206040f35b63ac1a2f698118610f5457600436106114225760095460405260206040f35b63158ef93e8118610f73576004361061142257600a5460405260206040f35b636d01f0028118610f92576004361061142257600b5460405260206040f35b505b60006000fd5b60025460605260035460805260065460a05260605160045480820182811061142257905090506040511015610fd3576000815250611033565b60a0516040516060518082038281116114225790509050808202811583838304141715611422579050905060805160605180820382811161142257905090508015611422578082049050905060a051808281188284100218905090508152505b565b600b5415611047576000815250611083565b426009548082811882841002189050905060c05260c05160405261106b60e0610f9a565b60e05160085480820382811161142257905090508152505b565b60095442106110985760008152506110be565b600654426040526110a960c0610f9a565b60c05180820382811161142257905090508152505b565b6000543318156111275760186040527f6d73672e73656e646572206e6f7420726563697069656e74000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b600554638da5cb5b604052602060406004605c6000855af1611150573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b60055463481c6a75604052602060406004605c6000855af1611197573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b6111c160a0611129565b60a05133186111d15760016111e2565b6111db60c0611170565b60c0513318155b61124557601f60e0527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e61676572006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b61125160a0611129565b60a0513318156112b857601460c0527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b600060c05260c050602061010060c05160e06060516040515af16112e3573d600060003e3d6000fd5b3d602081183d602010021860e05260e080518060805260208201805160a0525050506080511561137b5760a05160805160200360031b1c61137b57601360c0527f455448207472616e73666572206661696c65640000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b6005546336e44612604052602060406004605c6000855af16113a4573d600060003e3d6000fd5b60203d10611422576040518060a01c61142257608052608090505161142057601660a0527f766f74696e672061646170746572206e6f74207365740000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b565b600080fda165767970657283000307000b005b600080fd

Deployed Bytecode

0x6003361161000c57610f94565b60003560e01c3461142257633d4da16d81186101fa576101043610611422576004358060a01c611422576040526044358060a01c6114225760605260c4358060011c6114225760805260e4358060a01c6114225760a052600a54156100c857601860c0527f63616e206f6e6c7920696e697469616c697a65206f6e6365000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001600a5560405160015560805160075560643560025560843560035560a4356004556024356040516370a0823160c0523060e052602060c0602460dc845afa610117573d600060003e3d6000fd5b60203d106114225760c0905051101561018d576014610100527f696e73756666696369656e742062616c616e63650000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b60243560065560605160005560843560095560a05160055560405160605160a0517f2d30caaf2a01e6264cf4671ca427c07d01ad37075b1830726c7004e291faf89660243560c05260643560e05260406084610100376080516101405260a060c0a4600160c052602060c0f35b63669416b8811861021f576004361061142257602061021a610100611035565b610100f35b63cf3090128118610242576004361061142257602061023e60e0611085565b60e0f35b634e71d92d811861028457600436106114225733610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b631e83409a81186102d05760243610611422576004358060a01c61142257610100527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610120526102fa565b63aad3ec9681186104525760443610611422576004358060a01c6114225761010052602435610120525b6103026110c0565b61030d610160611035565b6101605161012051808281188284100218905090506101405260085461014051808201828110611422579050905060085560015463a9059cbb610160526101005161018052610140516101a0526020610160604461017c6000855af1610378573d600060003e3d6000fd5b3d61038f57803b156114225760016101c0526103a8565b60203d1061142257610160518060011c611422576101c0525b6101c090505161041857600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b610100517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d461014051610160526020610160a26020610140f35b63c31ab974811861060957600436106114225761046d6111b7565b610478610140611085565b6101405161012052610120516104ee576011610140527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b4260095560015463a9059cbb61016052610509610140611129565b6101405161018052610120516101a0526020610160604461017c6000855af1610537573d600060003e3d6000fd5b3d61054e57803b156114225760016101c052610567565b60203d1061142257610160518060011c611422576101c0525b6101c09050516105d757600f6101e0527f7472616e73666572206661696c65640000000000000000000000000000000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b337ff23abb1803813c60f11b7ce4b5ae745d16ce0d99b71cf034c699d6634d0a961361012051610140526020610140a2005b637bdbb5f781186108b5576004361061142257610624611247565b60075461068e576020610100527f6e6f7420616c6c6f77656420666f72206f7264696e6172792076657374696e676101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b600b54156106f9576015610100527f616c72656164792066756c6c79207265766f6b656400000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b610704610120611085565b61012051610713610140611035565b6101405180820182811061142257905090506101005261010051610795576011610120527f6e6f7468696e6720746f207265766f6b650000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6001600b554260095560015463a9059cbb610140526107b5610120611129565b610120516101605261010051610180526020610140604461015c6000855af16107e3573d600060003e3d6000fd5b3d6107fa57803b156114225760016101a052610813565b60203d1061142257610140518060011c611422576101a0525b6101a090505161088357600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b337fc1f0f68ce9eb64d4ec0574f3a5ab1a8534d4e6bdc64804f6efefacd72303dd5161010051610120526020610120a2005b6323a50d3c8118610a9b5760443610611422576004358060a01c611422576101005260243561012052600154610100511861097e57610100516370a082316101605230610180526020610160602461017c845afa610918573d600060003e3d6000fd5b60203d10611422576101609050516109316101a0611085565b6101a0516109406101c0611035565b6101c0518082018281106114225790509050808203828111611422579050905061014052610120516101405180828118828410021890509050610120525b6101205115610a99576101005163a9059cbb610140526000546101605261012051610180526020610140604461015c6000855af16109c1573d600060003e3d6000fd5b3d6109d857803b156114225760016101a0526109f1565b60203d1061142257610140518060011c611422576101a0525b6101a0905051610a6157600f6101c0527f7472616e73666572206661696c656400000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b7f505b28e6941631badc363841ecbf8e1214b9379c643936458e87be718e157999610100516101405261012051610160526040610140a15b005b63644613468118610b0357600436106114225747610120526101205115610b015760005460405261012051606052610ad16112ba565b7f0296f2c4dbc8c0e53c0ffab63f84aeebd5c28aa143475a37346bf15ac003f32761012051610140526020610140a15b005b63412f31218118610c0c5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610b416110c0565b610b4961137d565b63412f312161056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610bdb573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610c0a573d600060003e3d6000fd5b005b63862e69708118610d155760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610c4a6110c0565b610c5261137d565b63862e697061056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ce4573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610d13573d600060003e3d6000fd5b005b630ccfac9e8118610e1e5760443610611422576004356004016103e88135116114225780358060e05260208201818161010037505050610d536110c0565b610d5b61137d565b630ccfac9e61056452600460208061058452806105840160e0518082526020820181818361010060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905001610560526105605060006000610560516105806005546336e44612610500526020610500600461051c6000855af1610ded573d600060003e3d6000fd5b60203d1061142257610500518060a01c61142257610540526105409050515af4610e1c573d600060003e3d6000fd5b005b6366d003ac8118610e3d57600436106114225760005460405260206040f35b63fc0c546a8118610e5c57600436106114225760015460405260206040f35b63834ee4178118610e7b57600436106114225760025460405260206040f35b63162433568118610e9a57600436106114225760035460405260206040f35b6394abf7608118610eb957600436106114225760045460405260206040f35b63c45a01558118610ed857600436106114225760055460405260206040f35b633c48a6208118610ef757600436106114225760065460405260206040f35b632cbd43d38118610f1657600436106114225760075460405260206040f35b636af904c68118610f3557600436106114225760085460405260206040f35b63ac1a2f698118610f5457600436106114225760095460405260206040f35b63158ef93e8118610f73576004361061142257600a5460405260206040f35b636d01f0028118610f92576004361061142257600b5460405260206040f35b505b60006000fd5b60025460605260035460805260065460a05260605160045480820182811061142257905090506040511015610fd3576000815250611033565b60a0516040516060518082038281116114225790509050808202811583838304141715611422579050905060805160605180820382811161142257905090508015611422578082049050905060a051808281188284100218905090508152505b565b600b5415611047576000815250611083565b426009548082811882841002189050905060c05260c05160405261106b60e0610f9a565b60e05160085480820382811161142257905090508152505b565b60095442106110985760008152506110be565b600654426040526110a960c0610f9a565b60c05180820382811161142257905090508152505b565b6000543318156111275760186040527f6d73672e73656e646572206e6f7420726563697069656e74000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b600554638da5cb5b604052602060406004605c6000855af1611150573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b60055463481c6a75604052602060406004605c6000855af1611197573d600060003e3d6000fd5b60203d10611422576040518060a01c611422576080526080905051815250565b6111c160a0611129565b60a05133186111d15760016111e2565b6111db60c0611170565b60c0513318155b61124557601f60e0527f6d73672e73656e646572206e6f74206f776e6572206f72206d616e61676572006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b61125160a0611129565b60a0513318156112b857601460c0527f6d73672e73656e646572206e6f74206f776e657200000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b600060c05260c050602061010060c05160e06060516040515af16112e3573d600060003e3d6000fd5b3d602081183d602010021860e05260e080518060805260208201805160a0525050506080511561137b5760a05160805160200360031b1c61137b57601360c0527f455448207472616e73666572206661696c65640000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b565b6005546336e44612604052602060406004605c6000855af16113a4573d600060003e3d6000fd5b60203d10611422576040518060a01c61142257608052608090505161142057601660a0527f766f74696e672061646170746572206e6f74207365740000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b565b600080fda165767970657283000307000b

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

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.