ETH Price: $3,440.24 (+4.37%)

Contract

0xf22995a3EA2C83F6764c711115B23A88411CAfdd
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy_vesting_c...200897142024-06-14 11:21:59162 days ago1718364119IN
Curve.fi: Investors 1
0 ETH0.001646326.21518207
Deploy_vesting_c...170623182023-04-16 22:15:11586 days ago1681683311IN
Curve.fi: Investors 1
0 ETH0.0087061332.28379808
Deploy_vesting_c...106714332020-08-16 13:42:141560 days ago1597585334IN
Curve.fi: Investors 1
0 ETH0.02464171106
Deploy_vesting_c...106578202020-08-14 11:22:221562 days ago1597404142IN
Curve.fi: Investors 1
0 ETH0.04998083215
0x74010000106524152020-08-13 15:26:251562 days ago1597332385IN
 Contract Creation
0 ETH0.0808465250

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
200897142024-06-14 11:21:59162 days ago1718364119
Curve.fi: Investors 1
 Contract Creation0 ETH
170623182023-04-16 22:15:11586 days ago1681683311
Curve.fi: Investors 1
 Contract Creation0 ETH
106714332020-08-16 13:42:141560 days ago1597585334
Curve.fi: Investors 1
 Contract Creation0 ETH
106578202020-08-14 11:22:221562 days ago1597404142
Curve.fi: Investors 1
 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.