ETH Price: $3,184.97 (-7.47%)
Gas: 3 Gwei

Contract

0x2fc945d48A4d61eC988F8CAbfFbe6F1EfE07137f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim197907332024-05-03 16:19:1182 days ago1714753151IN
0x2fc945d4...EfE07137f
0 ETH0.000762728
Claim197556462024-04-28 18:36:3587 days ago1714329395IN
0x2fc945d4...EfE07137f
0 ETH0.000622397.95487191
Claim197264952024-04-24 16:42:5991 days ago1713976979IN
0x2fc945d4...EfE07137f
0 ETH0.0017082317.91709735
Claim195411202024-03-29 17:24:35117 days ago1711733075IN
0x2fc945d4...EfE07137f
0 ETH0.0036857238.65834644
Claim194092192024-03-11 3:38:11136 days ago1710128291IN
0x2fc945d4...EfE07137f
0 ETH0.0043138945.24696906
Claim192467532024-02-17 9:40:23158 days ago1708162823IN
0x2fc945d4...EfE07137f
0 ETH0.0015436316.19069434
Claim191302522024-02-01 1:13:23175 days ago1706750003IN
0x2fc945d4...EfE07137f
0 ETH0.0021031126.74159655
Claim190111742024-01-15 8:44:23191 days ago1705308263IN
0x2fc945d4...EfE07137f
0 ETH0.0017567118.3476577
Claim189869162024-01-11 23:21:59195 days ago1705015319IN
0x2fc945d4...EfE07137f
0 ETH0.001559919.83451453
Claim189342252024-01-04 13:19:47202 days ago1704374387IN
0x2fc945d4...EfE07137f
0 ETH0.0020435721.34370044
Claim189166102024-01-02 2:03:35205 days ago1704161015IN
0x2fc945d4...EfE07137f
0 ETH0.0011508312.01966302
Claim189156492024-01-01 22:48:47205 days ago1704149327IN
0x2fc945d4...EfE07137f
0 ETH0.0008850111.25317052
Claim189112782024-01-01 8:02:59205 days ago1704096179IN
0x2fc945d4...EfE07137f
0 ETH0.000912419.52953645
Claim189107142024-01-01 6:08:47205 days ago1704089327IN
0x2fc945d4...EfE07137f
0 ETH0.000905369.45589512
Claim188953682023-12-30 2:25:59208 days ago1703903159IN
0x2fc945d4...EfE07137f
0 ETH0.0013239213.82741954
Claim188921702023-12-29 15:36:47208 days ago1703864207IN
0x2fc945d4...EfE07137f
0 ETH0.002879536.61350694
Claim188872762023-12-28 23:08:11209 days ago1703804891IN
0x2fc945d4...EfE07137f
0 ETH0.0018950219.79224011
Claim188784772023-12-27 17:27:35210 days ago1703698055IN
0x2fc945d4...EfE07137f
0 ETH0.0033646842.78262704
Claim188747382023-12-27 4:51:59211 days ago1703652719IN
0x2fc945d4...EfE07137f
0 ETH0.0013330213.92253547
Claim188747272023-12-27 4:49:47211 days ago1703652587IN
0x2fc945d4...EfE07137f
0 ETH0.0013939414.55882094
Claim188611322023-12-25 7:00:11212 days ago1703487611IN
0x2fc945d4...EfE07137f
0 ETH0.0018957719.8
Claim188567722023-12-24 16:19:59213 days ago1703434799IN
0x2fc945d4...EfE07137f
0 ETH0.0019521820.38923211
Claim188523832023-12-24 1:31:23214 days ago1703381483IN
0x2fc945d4...EfE07137f
0 ETH0.0017765618.55501524
Claim188520872023-12-24 0:30:35214 days ago1703377835IN
0x2fc945d4...EfE07137f
0 ETH0.0017245518.01180482
Claim188500182023-12-23 17:31:59214 days ago1703352719IN
0x2fc945d4...EfE07137f
0 ETH0.0022561423.56387023
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
197907332024-05-03 16:19:1182 days ago1714753151
0x2fc945d4...EfE07137f
0 ETH
197907332024-05-03 16:19:1182 days ago1714753151
0x2fc945d4...EfE07137f
0 ETH
197907332024-05-03 16:19:1182 days ago1714753151
0x2fc945d4...EfE07137f
0 ETH
197556462024-04-28 18:36:3587 days ago1714329395
0x2fc945d4...EfE07137f
0 ETH
197556462024-04-28 18:36:3587 days ago1714329395
0x2fc945d4...EfE07137f
0 ETH
197556462024-04-28 18:36:3587 days ago1714329395
0x2fc945d4...EfE07137f
0 ETH
197264952024-04-24 16:42:5991 days ago1713976979
0x2fc945d4...EfE07137f
0 ETH
197264952024-04-24 16:42:5991 days ago1713976979
0x2fc945d4...EfE07137f
0 ETH
197264952024-04-24 16:42:5991 days ago1713976979
0x2fc945d4...EfE07137f
0 ETH
195411202024-03-29 17:24:35117 days ago1711733075
0x2fc945d4...EfE07137f
0 ETH
195411202024-03-29 17:24:35117 days ago1711733075
0x2fc945d4...EfE07137f
0 ETH
195411202024-03-29 17:24:35117 days ago1711733075
0x2fc945d4...EfE07137f
0 ETH
194092192024-03-11 3:38:11136 days ago1710128291
0x2fc945d4...EfE07137f
0 ETH
194092192024-03-11 3:38:11136 days ago1710128291
0x2fc945d4...EfE07137f
0 ETH
194092192024-03-11 3:38:11136 days ago1710128291
0x2fc945d4...EfE07137f
0 ETH
192467532024-02-17 9:40:23158 days ago1708162823
0x2fc945d4...EfE07137f
0 ETH
192467532024-02-17 9:40:23158 days ago1708162823
0x2fc945d4...EfE07137f
0 ETH
192467532024-02-17 9:40:23158 days ago1708162823
0x2fc945d4...EfE07137f
0 ETH
191302522024-02-01 1:13:23175 days ago1706750003
0x2fc945d4...EfE07137f
0 ETH
191302522024-02-01 1:13:23175 days ago1706750003
0x2fc945d4...EfE07137f
0 ETH
191302522024-02-01 1:13:23175 days ago1706750003
0x2fc945d4...EfE07137f
0 ETH
190776952024-01-24 16:29:35182 days ago1706113775
0x2fc945d4...EfE07137f
0 ETH
190776952024-01-24 16:29:35182 days ago1706113775
0x2fc945d4...EfE07137f
0 ETH
190776952024-01-24 16:29:35182 days ago1706113775
0x2fc945d4...EfE07137f
0 ETH
190776952024-01-24 16:29:35182 days ago1706113775
0x2fc945d4...EfE07137f
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VestSplitter

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.10
"""
@title VestSplitter
@author Curve Finance
@license MIT
@notice Split VestingEscrow for a distribution of users, and accepts donations and top-ups.
        Made originally to compensate victims of Vyper hack, but can be used for other purposes.
"""

from vyper.interfaces import ERC20


interface VestingEscrow:
    def claim(): nonpayable
    def balanceOf(user: address) -> uint256: view


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


TOKEN: public(immutable(ERC20))
vest: public(VestingEscrow)
ADMIN: public(immutable(address))

fractions: public(HashMap[address, uint256])
total_fraction: public(uint256)
finalized: public(bool)

last_balance: public(uint256)
total_granted: public(uint256)
claimed: public(HashMap[address, uint256])


@external
def __init__(token: ERC20):
    TOKEN = token
    ADMIN = msg.sender  # Only needed before the distribution is finalized


@external
def set_vest(vest: VestingEscrow):
    assert msg.sender == ADMIN, "Access"
    assert self.vest == empty(VestingEscrow), "Vest already set"
    self.vest = vest


@external
def save_distribution(users: DynArray[address, 200], fractions: DynArray[uint256, 200]):
    assert msg.sender == ADMIN, "Access"
    assert not self.finalized, "Distribution is finalized already"

    for i in range(200):
        if i >= len(users):
            break
        user: address = users[i]
        f_old: uint256 = self.fractions[user]
        f: uint256 = fractions[i]

        self.fractions[user] = f
        self.total_fraction = self.total_fraction + f - f_old


@external
def finalize_distribution():
    assert msg.sender == ADMIN, "Access"
    self.finalized = True


@external
@nonreentrant('lock')
def claim(user: address = msg.sender, use_vest: bool = True):
    vest: VestingEscrow = self.vest
    if use_vest and vest != empty(VestingEscrow) and vest != VestingEscrow(self):
        vest.claim()
    total_granted: uint256 = self.total_granted + (TOKEN.balanceOf(self) - self.last_balance)
    self.total_granted = total_granted

    total_for_user: uint256 = total_granted * self.fractions[user] / self.total_fraction
    to_send: uint256 = total_for_user - self.claimed[user]
    self.claimed[user] = total_for_user
    TOKEN.transfer(user, to_send)

    self.last_balance = TOKEN.balanceOf(self)

    log Claim(user, to_send)


@external
@view
def balanceOf(user: address, use_vest: bool = True) -> uint256:
    total_granted: uint256 = self.total_granted
    vest: VestingEscrow = self.vest
    if use_vest and vest != empty(VestingEscrow) and vest != VestingEscrow(self):
        total_granted += vest.balanceOf(self)
    total_granted = total_granted + TOKEN.balanceOf(self) - self.last_balance
    total_for_user: uint256 = total_granted * self.fractions[user] / self.total_fraction
    return total_for_user - self.claimed[user]

Contract Security Audit

Contract ABI

[{"name":"Claim","inputs":[{"name":"recipient","type":"address","indexed":true},{"name":"claimed","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_vest","inputs":[{"name":"vest","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"save_distribution","inputs":[{"name":"users","type":"address[]"},{"name":"fractions","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"finalize_distribution","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"user","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"user","type":"address"},{"name":"use_vest","type":"bool"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"user","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"user","type":"address"},{"name":"use_vest","type":"bool"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"TOKEN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vest","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"ADMIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"fractions","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"total_fraction","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"finalized","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"last_balance","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"total_granted","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"claimed","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]

61099151503461003b5760206109c65f395f518060a01c61003b5760405260405161097152336109915261097161003f610000396109b1610000f35b5f80fd5f3560e01c60026013820660011b61094b01601e395f51565b6382bfefc88118610036573461094757602061097160403960206040f35b6392fd2daf811861094357604436103417610947576004358060a01c610947576040526024358060011c610947576060525b5f546002146109475760025f55600154608052606051610088575f61009d565b6080511561009b5730608051141561009d565b5f5b156100cd57608051634e71d92d60a052803b15610947575f60a0600460bc5f855af16100cb573d5f5f3e3d5ffd5b505b60065460206109715f395f516370a0823160c0523060e052602060c0602460dc845afa6100fc573d5f5f3e3d5ffd5b60203d106109475760c09050516005548082038281116109475790509050808201828110610947579050905060a05260a05160065560a05160026040516020525f5260405f205480820281158383830414171561094757905090506003548015610947578082049050905060c05260c05160076040516020525f5260405f2054808203828111610947579050905060e05260c05160076040516020525f5260405f205560206109715f395f5163a9059cbb610100526040516101205260e051610140526020610100604461011c5f855af16101d9573d5f5f3e3d5ffd5b60203d1061094757610100518060011c6109475761016052610160505060206109715f395f516370a082316101005230610120526020610100602461011c845afa610226573d5f5f3e3d5ffd5b60203d10610947576101009050516005556040517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d460e051610100526020610100a260035f5500610943565b63458efde3811861094357346109475760015460405260206040f3610943565b632a0acc6a81186102b0573461094757602061099160403960206040f35b6359c0095a8118610943576084361034176109475760043560040160c88135116109475780355f8160c8811161094757801561030d57905b8060051b6020850101358060a01c610947578160051b606001526001018181186102e8575b505080604052505060243560040160c881351161094757803560208160051b0180836119603750505060206109915f395f513318156103ab576006613280527f41636365737300000000000000000000000000000000000000000000000000006132a0526132805061328051806132a001601f825f031636823750506308c379a061324052602061326052601f19601f61328051011660440161325cfd5b6004541561043d576021613280527f446973747269627574696f6e2069732066696e616c697a656420616c726561646132a0527f79000000000000000000000000000000000000000000000000000000000000006132c0526132805061328051806132a001601f825f031636823750506308c379a061324052602061326052601f19601f61328051011660440161325cfd5b5f60c8905b80613280526040516132805110610458576104e9565b613280516040518110156109475760051b606001516132a05260026132a0516020525f5260405f20546132c05261328051611960518110156109475760051b61198001516132e0526132e05160026132a0516020525f5260405f20556003546132e05180820182811061094757905090506132c0518082038281116109475790509050600355600101818118610442575b505000610943565b631d026de4811861094357602436103417610947576004358060a01c6109475760405260026040516020525f5260405f205460605260206060f3610943565b63e987fc11811861054c57346109475760035460405260206040f35b634e71d92d811861094357346109475733604052600160605261006856610943565b63b3f05b97811861058a57346109475760045460405260206040f35b63abf484ff811861094357602436103417610947576004358060a01c6109475760405260206109915f395f513318156106195760066060527f416363657373000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001541561067d5760106060527f5665737420616c7265616479207365740000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405160015500610943565b630727adb3811861094357346109475760055460405260206040f3610943565b63906eba1381186106c557346109475760065460405260206040f35b63772865e2811861094357604436103417610947576024358060011c610947576060525b6004358060a01c6109475760405260065460805260015460a052606051610710575f610725565b60a05115610723573060a0511415610725565b5f5b156107725760805160a0516370a0823160c0523060e052602060c0602460dc845afa610753573d5f5f3e3d5ffd5b60203d106109475760c090505180820182811061094757905090506080525b60805160206109715f395f516370a0823160c0523060e052602060c0602460dc845afa6107a1573d5f5f3e3d5ffd5b60203d106109475760c09050518082018281106109475790509050600554808203828111610947579050905060805260805160026040516020525f5260405f205480820281158383830414171561094757905090506003548015610947578082049050905060c05260c05160076040516020525f5260405f2054808203828111610947579050905060e052602060e0f3610943565b63c884ef83811861087157602436103417610947576004358060a01c6109475760405260076040516020525f5260405f205460605260206060f35b6370a082318118610943576024361034176109475760016060526106e956610943565b632b083797811861091657346109475760206109915f395f5133181561090f5760066040527f416363657373000000000000000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b6001600455005b631e83409a811861094357602436103417610947576004358060a01c610947576040526001606052610068565b5f5ffd5b5f80fd0943094306a9056e06890943029209430943094308360272053009430943094304f100180894841909718118261840a16576797065728300030a0016000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x5f3560e01c60026013820660011b61094b01601e395f51565b6382bfefc88118610036573461094757602061097160403960206040f35b6392fd2daf811861094357604436103417610947576004358060a01c610947576040526024358060011c610947576060525b5f546002146109475760025f55600154608052606051610088575f61009d565b6080511561009b5730608051141561009d565b5f5b156100cd57608051634e71d92d60a052803b15610947575f60a0600460bc5f855af16100cb573d5f5f3e3d5ffd5b505b60065460206109715f395f516370a0823160c0523060e052602060c0602460dc845afa6100fc573d5f5f3e3d5ffd5b60203d106109475760c09050516005548082038281116109475790509050808201828110610947579050905060a05260a05160065560a05160026040516020525f5260405f205480820281158383830414171561094757905090506003548015610947578082049050905060c05260c05160076040516020525f5260405f2054808203828111610947579050905060e05260c05160076040516020525f5260405f205560206109715f395f5163a9059cbb610100526040516101205260e051610140526020610100604461011c5f855af16101d9573d5f5f3e3d5ffd5b60203d1061094757610100518060011c6109475761016052610160505060206109715f395f516370a082316101005230610120526020610100602461011c845afa610226573d5f5f3e3d5ffd5b60203d10610947576101009050516005556040517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d460e051610100526020610100a260035f5500610943565b63458efde3811861094357346109475760015460405260206040f3610943565b632a0acc6a81186102b0573461094757602061099160403960206040f35b6359c0095a8118610943576084361034176109475760043560040160c88135116109475780355f8160c8811161094757801561030d57905b8060051b6020850101358060a01c610947578160051b606001526001018181186102e8575b505080604052505060243560040160c881351161094757803560208160051b0180836119603750505060206109915f395f513318156103ab576006613280527f41636365737300000000000000000000000000000000000000000000000000006132a0526132805061328051806132a001601f825f031636823750506308c379a061324052602061326052601f19601f61328051011660440161325cfd5b6004541561043d576021613280527f446973747269627574696f6e2069732066696e616c697a656420616c726561646132a0527f79000000000000000000000000000000000000000000000000000000000000006132c0526132805061328051806132a001601f825f031636823750506308c379a061324052602061326052601f19601f61328051011660440161325cfd5b5f60c8905b80613280526040516132805110610458576104e9565b613280516040518110156109475760051b606001516132a05260026132a0516020525f5260405f20546132c05261328051611960518110156109475760051b61198001516132e0526132e05160026132a0516020525f5260405f20556003546132e05180820182811061094757905090506132c0518082038281116109475790509050600355600101818118610442575b505000610943565b631d026de4811861094357602436103417610947576004358060a01c6109475760405260026040516020525f5260405f205460605260206060f3610943565b63e987fc11811861054c57346109475760035460405260206040f35b634e71d92d811861094357346109475733604052600160605261006856610943565b63b3f05b97811861058a57346109475760045460405260206040f35b63abf484ff811861094357602436103417610947576004358060a01c6109475760405260206109915f395f513318156106195760066060527f416363657373000000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001541561067d5760106060527f5665737420616c7265616479207365740000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405160015500610943565b630727adb3811861094357346109475760055460405260206040f3610943565b63906eba1381186106c557346109475760065460405260206040f35b63772865e2811861094357604436103417610947576024358060011c610947576060525b6004358060a01c6109475760405260065460805260015460a052606051610710575f610725565b60a05115610723573060a0511415610725565b5f5b156107725760805160a0516370a0823160c0523060e052602060c0602460dc845afa610753573d5f5f3e3d5ffd5b60203d106109475760c090505180820182811061094757905090506080525b60805160206109715f395f516370a0823160c0523060e052602060c0602460dc845afa6107a1573d5f5f3e3d5ffd5b60203d106109475760c09050518082018281106109475790509050600554808203828111610947579050905060805260805160026040516020525f5260405f205480820281158383830414171561094757905090506003548015610947578082049050905060c05260c05160076040516020525f5260405f2054808203828111610947579050905060e052602060e0f3610943565b63c884ef83811861087157602436103417610947576004358060a01c6109475760405260076040516020525f5260405f205460605260206060f35b6370a082318118610943576024361034176109475760016060526106e956610943565b632b083797811861091657346109475760206109915f395f5133181561090f5760066040527f416363657373000000000000000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b6001600455005b631e83409a811861094357602436103417610947576004358060a01c610947576040526001606052610068565b5f5ffd5b5f80fd0943094306a9056e06890943029209430943094308360272053009430943094304f100180894000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a90f91b989ad379f6762d73e453521f760d23580

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

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : token (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


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.