ETH Price: $3,909.19 (+5.71%)

Contract

0xcf61782465Ff973638143d6492B51A85986aB347
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Age:7D
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
213139792024-12-02 9:37:599 days ago1733132279
0xcf617824...5986aB347
 Contract Creation0 ETH
213139162024-12-02 9:25:239 days ago1733131523
0xcf617824...5986aB347
 Contract Creation0 ETH
212663382024-11-25 17:43:4716 days ago1732556627
0xcf617824...5986aB347
 Contract Creation0 ETH
212422582024-11-22 9:04:4719 days ago1732266287
0xcf617824...5986aB347
 Contract Creation0 ETH
212420872024-11-22 8:30:1119 days ago1732264211
0xcf617824...5986aB347
 Contract Creation0 ETH
211928552024-11-15 11:39:4726 days ago1731670787
0xcf617824...5986aB347
 Contract Creation0 ETH
211745902024-11-12 22:28:2329 days ago1731450503
0xcf617824...5986aB347
 Contract Creation0 ETH
211745902024-11-12 22:28:2329 days ago1731450503
0xcf617824...5986aB347
 Contract Creation0 ETH
211745902024-11-12 22:28:2329 days ago1731450503
0xcf617824...5986aB347
 Contract Creation0 ETH
211745902024-11-12 22:28:2329 days ago1731450503
0xcf617824...5986aB347
 Contract Creation0 ETH
211745902024-11-12 22:28:2329 days ago1731450503
0xcf617824...5986aB347
 Contract Creation0 ETH
210537022024-10-27 1:33:2346 days ago1729992803
0xcf617824...5986aB347
 Contract Creation0 ETH
210536732024-10-27 1:27:3546 days ago1729992455
0xcf617824...5986aB347
 Contract Creation0 ETH
210311602024-10-23 22:04:1149 days ago1729721051
0xcf617824...5986aB347
 Contract Creation0 ETH
210311142024-10-23 21:54:5949 days ago1729720499
0xcf617824...5986aB347
 Contract Creation0 ETH
210310892024-10-23 21:49:5949 days ago1729720199
0xcf617824...5986aB347
 Contract Creation0 ETH
210310792024-10-23 21:47:5949 days ago1729720079
0xcf617824...5986aB347
 Contract Creation0 ETH
209914072024-10-18 8:59:2354 days ago1729241963
0xcf617824...5986aB347
 Contract Creation0 ETH
209791052024-10-16 15:45:5956 days ago1729093559
0xcf617824...5986aB347
 Contract Creation0 ETH
209790082024-10-16 15:25:4756 days ago1729092347
0xcf617824...5986aB347
 Contract Creation0 ETH
209789432024-10-16 15:12:4756 days ago1729091567
0xcf617824...5986aB347
 Contract Creation0 ETH
209789372024-10-16 15:11:3556 days ago1729091495
0xcf617824...5986aB347
 Contract Creation0 ETH
209788882024-10-16 15:01:4756 days ago1729090907
0xcf617824...5986aB347
 Contract Creation0 ETH
209350402024-10-10 11:54:1162 days ago1728561251
0xcf617824...5986aB347
 Contract Creation0 ETH
208929722024-10-04 15:11:2368 days ago1728054683
0xcf617824...5986aB347
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vesting Escrow Factory

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license
# @version 0.3.10

"""
@title Vesting Escrow Factory
@author Curve Finance, Yearn Finance
@license MIT
@notice Stores and distributes ERC20 tokens by deploying `VestingEscrowSimple` contracts
"""

from vyper.interfaces import ERC20


interface VestingEscrowSimple:
    def initialize(
        owner: address,
        token: ERC20,
        recipient: address,
        amount: uint256,
        start_time: uint256,
        end_time: uint256,
        cliff_length: uint256,
        open_claim: bool,
    ) -> bool: nonpayable


event VestingEscrowCreated:
    funder: indexed(address)
    token: indexed(ERC20)
    recipient: indexed(address)
    escrow: address
    amount: uint256
    vesting_start: uint256
    vesting_duration: uint256
    cliff_length: uint256
    open_claim: bool


TARGET: public(immutable(address))
VYPER: public(immutable(address))
escrows_length: public(uint256)
escrows: public(address[1000000000000])


@external
def __init__(target: address, vyper_donate: 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
    @param vyper_donate Vyper Safe address for donations (vyperlang.eth on mainnet)
    """
    TARGET = target
    VYPER = vyper_donate


@external
def deploy_vesting_contract(
    token: ERC20,
    recipient: address,
    amount: uint256,
    vesting_duration: uint256,
    vesting_start: uint256 = block.timestamp,
    cliff_length: uint256 = 0,
    open_claim: bool = True,
    support_vyper: uint256 = 0,
    owner: address = msg.sender,
) -> address:
    """
    @notice Deploy a new vesting contract
    @dev Prior to deployment you must approve `amount` + `amount` * `support_vyper` / 10_000
         tokens
    @param token ERC20 token being distributed
    @param recipient Address to vest tokens for
    @param amount Amount of tokens being vested for `recipient`
    @param vesting_duration Time period (in seconds) over which tokens are released
    @param vesting_start Epoch time when tokens begin to vest
    @param open_claim Switch if anyone can claim for `recipient`
    @param support_vyper Donation percentage in bps, 0% by default
    @param owner Vesting contract owner
    """
    assert cliff_length <= vesting_duration  # dev: incorrect vesting cliff
    assert vesting_start + vesting_duration > block.timestamp  # dev: just use a transfer, dummy
    assert vesting_duration > 0  # dev: duration must be > 0
    assert recipient not in [self, empty(address), token.address, owner]  # dev: wrong recipient

    escrow: address = create_minimal_proxy_to(TARGET)

    VestingEscrowSimple(escrow).initialize(
        owner,
        token,
        recipient,
        amount,
        vesting_start,
        vesting_start + vesting_duration,
        cliff_length,
        open_claim,
    )
    # skip transferFrom and approve and send directly to escrow
    assert token.transferFrom(msg.sender, escrow, amount, default_return_value=True)  # dev: funding failed
    if support_vyper > 0:
        assert VYPER != empty(address)  # dev: lost donation
        assert token.transferFrom(
            msg.sender,
            VYPER,
            amount * support_vyper / 10_000,
            default_return_value=True
        )  # dev: donation failed

    self.escrows[self.escrows_length] = escrow
    self.escrows_length += 1
    log VestingEscrowCreated(
        msg.sender,
        token,
        recipient,
        escrow,
        amount,
        vesting_start,
        vesting_duration,
        cliff_length,
        open_claim,
    )
    return escrow

Contract Security Audit

Contract ABI

[{"name":"VestingEscrowCreated","inputs":[{"name":"funder","type":"address","indexed":true},{"name":"token","type":"address","indexed":true},{"name":"recipient","type":"address","indexed":true},{"name":"escrow","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"vesting_start","type":"uint256","indexed":false},{"name":"vesting_duration","type":"uint256","indexed":false},{"name":"cliff_length","type":"uint256","indexed":false},{"name":"open_claim","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"target","type":"address"},{"name":"vyper_donate","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"},{"name":"vesting_start","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"},{"name":"vesting_start","type":"uint256"},{"name":"cliff_length","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"},{"name":"vesting_start","type":"uint256"},{"name":"cliff_length","type":"uint256"},{"name":"open_claim","type":"bool"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"},{"name":"vesting_start","type":"uint256"},{"name":"cliff_length","type":"uint256"},{"name":"open_claim","type":"bool"},{"name":"support_vyper","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_vesting_contract","inputs":[{"name":"token","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"vesting_duration","type":"uint256"},{"name":"vesting_start","type":"uint256"},{"name":"cliff_length","type":"uint256"},{"name":"open_claim","type":"bool"},{"name":"support_vyper","type":"uint256"},{"name":"owner","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"TARGET","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"VYPER","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"escrows_length","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"escrows","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]}]

61055f5150346100515760206105a95f395f518060a01c6100515760405260206105c95f395f518060a01c6100515760605260405161053f5260605161055f5261053f6100556100003961057f610000f35b5f80fd5f3560e01c6002600a820660011b61052b01601e395f51565b63cc1f2afa8118610523573461052757602061053f60403960206040f3610523565b636a81ec448118610523573461052757602061055f60403960206040f3610523565b63adf8e96381186100775734610527575f5460405260206040f35b63ab5eea5981186105235760a436103417610527576084356080525f60a052600160c0525f60e05233610100526101bf56610523565b63012f52ee81186100de576024361034176105275760043564e8d4a50fff8111610527576001015460405260206040f35b630551ebac81186105235760843610341761052757426080525f60a052600160c0525f60e05233610100526101bf56610523565b63c367cc8081186105235760c4361034176105275760406084608037600160c0525f60e05233610100526101bf56610523565b63e7eba643811861017d5760e436103417610527576040608460803760c4358060011c6105275760c0525f60e05233610100526101bf565b63babce1b981186105235761012436103417610527576040608460803760c4358060011c6105275760c05260e43560e052610104358060a01c61052757610100525b6004358060a01c610527576040526024358060a01c6105275760605260643560a0511161052757426080516064358082018281106105275790509050111561052757606435156105275760605130811461023a57801561023457604051811461022e576101005181141561023c565b5f61023c565b5f61023c565b5f5b905015610527577f602d3d8160093d39f3363d3d373d3d3d363d730000000000000000000000000061014052602061053f5f395f5160601b610153527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006101675260366101405ff0801561052757610120526101205163f586c19f610140526101005161016052604051610180526060516101a0526044356101c0526080516101e05260805160643580820182811061052757905090506102005260a0516102205260c05161024052602061014061010461015c5f855af1610320573d5f5f3e3d5ffd5b60203d1061052757610140518060011c610527576102605261026050506040516323b872dd61014052336101605261012051610180526044356101a0526020610140606461015c5f855af1610377573d5f5f3e3d5ffd5b3d61038e57803b156105275760016101c0526103a7565b60203d1061052757610140518060011c610527576101c0525b6101c0905051156105275760e0511561045d57602061055f5f395f5115610527576040516323b872dd610140523361016052602061055f6101803960443560e0518082028115838383041417156105275790509050612710810490506101a0526020610140606461015c5f855af1610421573d5f5f3e3d5ffd5b3d61043857803b156105275760016101c052610451565b60203d1061052757610140518060011c610527576101c0525b6101c090505115610527575b610120515f5464e8d4a50fff811161052757600101555f54600181018181106105275790505f55606051604051337f99fd02dbc65944923f77d3e5d3e77e8c4c1b4026201be5445a8e827183e993e2610120516101405260443561016052608051610180526064356101a05260a0516101c05260c0516101e05260c0610140a46020610120f3610523565b6373c258a981186105235761010436103417610527576040608460803760c4358060011c6105275760c05260e43560e05233610100526101bf565b5f5ffd5b5f80fd011204e80018005c003a05230523052300ad01458419053f81141840a16576797065728300030a00150000000000000000000000009dd5cf263327e2d6a608da8c30368eb27514bad20000000000000000000000009e282c47e7238493735a9264400559bb837bcadc

Deployed Bytecode

0x5f3560e01c6002600a820660011b61052b01601e395f51565b63cc1f2afa8118610523573461052757602061053f60403960206040f3610523565b636a81ec448118610523573461052757602061055f60403960206040f3610523565b63adf8e96381186100775734610527575f5460405260206040f35b63ab5eea5981186105235760a436103417610527576084356080525f60a052600160c0525f60e05233610100526101bf56610523565b63012f52ee81186100de576024361034176105275760043564e8d4a50fff8111610527576001015460405260206040f35b630551ebac81186105235760843610341761052757426080525f60a052600160c0525f60e05233610100526101bf56610523565b63c367cc8081186105235760c4361034176105275760406084608037600160c0525f60e05233610100526101bf56610523565b63e7eba643811861017d5760e436103417610527576040608460803760c4358060011c6105275760c0525f60e05233610100526101bf565b63babce1b981186105235761012436103417610527576040608460803760c4358060011c6105275760c05260e43560e052610104358060a01c61052757610100525b6004358060a01c610527576040526024358060a01c6105275760605260643560a0511161052757426080516064358082018281106105275790509050111561052757606435156105275760605130811461023a57801561023457604051811461022e576101005181141561023c565b5f61023c565b5f61023c565b5f5b905015610527577f602d3d8160093d39f3363d3d373d3d3d363d730000000000000000000000000061014052602061053f5f395f5160601b610153527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006101675260366101405ff0801561052757610120526101205163f586c19f610140526101005161016052604051610180526060516101a0526044356101c0526080516101e05260805160643580820182811061052757905090506102005260a0516102205260c05161024052602061014061010461015c5f855af1610320573d5f5f3e3d5ffd5b60203d1061052757610140518060011c610527576102605261026050506040516323b872dd61014052336101605261012051610180526044356101a0526020610140606461015c5f855af1610377573d5f5f3e3d5ffd5b3d61038e57803b156105275760016101c0526103a7565b60203d1061052757610140518060011c610527576101c0525b6101c0905051156105275760e0511561045d57602061055f5f395f5115610527576040516323b872dd610140523361016052602061055f6101803960443560e0518082028115838383041417156105275790509050612710810490506101a0526020610140606461015c5f855af1610421573d5f5f3e3d5ffd5b3d61043857803b156105275760016101c052610451565b60203d1061052757610140518060011c610527576101c0525b6101c090505115610527575b610120515f5464e8d4a50fff811161052757600101555f54600181018181106105275790505f55606051604051337f99fd02dbc65944923f77d3e5d3e77e8c4c1b4026201be5445a8e827183e993e2610120516101405260443561016052608051610180526064356101a05260a0516101c05260c0516101e05260c0610140a46020610120f3610523565b6373c258a981186105235761010436103417610527576040608460803760c4358060011c6105275760c05260e43560e05233610100526101bf565b5f5ffd5b5f80fd011204e80018005c003a05230523052300ad01450000000000000000000000009dd5cf263327e2d6a608da8c30368eb27514bad20000000000000000000000009e282c47e7238493735a9264400559bb837bcadc

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000009dd5cf263327e2d6a608da8c30368eb27514bad20000000000000000000000009e282c47e7238493735a9264400559bb837bcadc

-----Decoded View---------------
Arg [0] : target (address): 0x9dd5cF263327e2D6a608da8c30368Eb27514bAD2
Arg [1] : vyper_donate (address): 0x9e282C47e7238493735a9264400559Bb837BCAdC

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009dd5cf263327e2d6a608da8c30368eb27514bad2
Arg [1] : 0000000000000000000000009e282c47e7238493735a9264400559bb837bcadc


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  ]

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.