ETH Price: $3,168.57 (+1.28%)
Gas: 2 Gwei

Contract

0xe3997288987E6297Ad550A69B31439504F513267
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x74010000106524332020-08-13 15:29:511430 days ago1597332591IN
 Contract Creation
0 ETH0.0808465250

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
191937452024-02-09 23:08:35155 days ago1707520115
0xe3997288...04F513267
 Contract Creation0 ETH
188364442023-12-21 19:52:11205 days ago1703188331
0xe3997288...04F513267
 Contract Creation0 ETH
188364442023-12-21 19:52:11205 days ago1703188331
0xe3997288...04F513267
 Contract Creation0 ETH
188364442023-12-21 19:52:11205 days ago1703188331
0xe3997288...04F513267
 Contract Creation0 ETH
188364442023-12-21 19:52:11205 days ago1703188331
0xe3997288...04F513267
 Contract Creation0 ETH
124020692021-05-09 19:34:431161 days ago1620588883
0xe3997288...04F513267
 Contract Creation0 ETH
114392692020-12-12 16:41:551309 days ago1607791315
0xe3997288...04F513267
 Contract Creation0 ETH
Loading...
Loading

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

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.4

Optimization Enabled:
N/A

Other Settings:
MIT license
# @version 0.2.4
"""
@title Vesting Escrow Factory
@author Curve Finance
@license MIT
@notice Stores and distributes `ERC20CRV` tokens by deploying `VestingEscrowSimple` contracts
"""

from vyper.interfaces import ERC20

MIN_VESTING_DURATION: constant(uint256) = 86400 * 365


interface VestingEscrowSimple:
    def initialize(
        _admin: address,
        _token: address,
        _recipient: address,
        _amount: uint256,
        _start_time: uint256,
        _end_time: uint256,
        _can_disable: bool
    ) -> bool: nonpayable


event CommitOwnership:
    admin: address

event ApplyOwnership:
    admin: address


admin: public(address)
future_admin: public(address)
target: public(address)

@external
def __init__(_target: address, _admin: address):
    """
    @notice Contract constructor
    @dev Prior to deployment you must deploy one copy of `VestingEscrowSimple` which
         is used as a library for vesting contracts deployed by this factory
    @param _target `VestingEscrowSimple` contract address
    """
    self.target = _target
    self.admin = _admin


@external
def deploy_vesting_contract(
    _token: address,
    _recipient: address,
    _amount: uint256,
    _can_disable: bool,
    _vesting_duration: uint256,
    _vesting_start: uint256 = block.timestamp
) -> address:
    """
    @notice Deploy a new vesting contract
    @dev Each contract holds tokens which vest for a single account. Tokens
         must be sent to this contract via the regular `ERC20.transfer` method
         prior to calling this method.
    @param _token Address of the ERC20 token being distributed
    @param _recipient Address to vest tokens for
    @param _amount Amount of tokens being vested for `_recipient`
    @param _can_disable Can admin disable recipient's ability to claim tokens?
    @param _vesting_duration Time period over which tokens are released
    @param _vesting_start Epoch time when tokens begin to vest
    """
    assert msg.sender == self.admin  # dev: admin only
    assert _vesting_start >= block.timestamp  # dev: start time too soon
    assert _vesting_duration >= MIN_VESTING_DURATION  # dev: duration too short

    _contract: address = create_forwarder_to(self.target)
    assert ERC20(_token).approve(_contract, _amount)  # dev: approve failed
    VestingEscrowSimple(_contract).initialize(
        self.admin,
        _token,
        _recipient,
        _amount,
        _vesting_start,
        _vesting_start + _vesting_duration,
        _can_disable
    )

    return _contract


@external
def commit_transfer_ownership(addr: address) -> bool:
    """
    @notice Transfer ownership of GaugeController to `addr`
    @param addr Address to have ownership transferred to
    """
    assert msg.sender == self.admin  # dev: admin only
    self.future_admin = addr
    log CommitOwnership(addr)

    return True


@external
def apply_transfer_ownership() -> bool:
    """
    @notice Apply pending ownership transfer
    """
    assert msg.sender == self.admin  # dev: admin only
    _admin: address = self.future_admin
    assert _admin != ZERO_ADDRESS  # dev: admin not set
    self.admin = _admin
    log ApplyOwnership(_admin)

    return True

Contract Security Audit

Contract ABI

[{"name":"CommitOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"_target"},{"type":"address","name":"_admin"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"deploy_vesting_contract","outputs":[{"type":"address","name":""}],"inputs":[{"type":"address","name":"_token"},{"type":"address","name":"_recipient"},{"type":"uint256","name":"_amount"},{"type":"bool","name":"_can_disable"},{"type":"uint256","name":"_vesting_duration"}],"stateMutability":"nonpayable","type":"function"},{"name":"deploy_vesting_contract","outputs":[{"type":"address","name":""}],"inputs":[{"type":"address","name":"_token"},{"type":"address","name":"_recipient"},{"type":"uint256","name":"_amount"},{"type":"bool","name":"_can_disable"},{"type":"uint256","name":"_vesting_duration"},{"type":"uint256","name":"_vesting_start"}],"stateMutability":"nonpayable","type":"function"},{"name":"commit_transfer_ownership","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":37672},{"name":"apply_transfer_ownership","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38572},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1241},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1271},{"name":"target","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1301}]

Deployed Bytecode

0x600436101561000d57610419565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263cff0e79f60005114156100b95742610140526100df565b6385f504f660005114156100d757602060a4610140376000506100df565b6000156102a8575b34156100ea57600080fd5b60043560205181106100fb57600080fd5b50602435602051811061010d57600080fd5b506064356002811061011e57600080fd5b50600054331461012d57600080fd5b4261014051101561013d57600080fd5b6301e13380608435101561015057600080fd5b7f6033600c60003960336000f33660006000376110006000366000730000000000610180526c010000000000000000000000006002540261019b527f5af4602c57600080fd5b6110006000f3000000000000000000000000000000006101af5260606101806000f0806101c257600080fd5b6101605260206102c0604463095ea7b36102205261016051610240526044356102605261023c60006004355af16101f857600080fd5b601f3d1161020557600080fd5b6000506102c05161021557600080fd5b602061042060e463c1561abe6102e0526000546103005260043561032052602435610340526044356103605261014051610380526101405160843581818301101561025f57600080fd5b808201905090506103a0526064356103c0526102fc6000610160515af161028557600080fd5b601f3d1161029257600080fd5b600050610420506101605160005260206000f350005b636b441a4060005114156103225734156102c157600080fd5b60043560205181106102d257600080fd5b5060005433146102e157600080fd5b600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1600160005260206000f350005b636a1c05ae60005114156103a357341561033b57600080fd5b600054331461034957600080fd5b600154610140526000610140511861036057600080fd5b6101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1600160005260206000f350005b63f851a44060005114156103ca5734156103bc57600080fd5b60005460005260206000f350005b6317f7182a60005114156103f15734156103e357600080fd5b60015460005260206000f350005b63d4b83992600051141561041857341561040a57600080fd5b60025460005260206000f350005b5b60006000fd

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.