ETH Price: $2,367.14 (+0.93%)

Contract

0x90c1f9220d90d3966FbeE24045EDd73E1d588aD5
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Modify_lock207189862024-09-10 8:21:233 days ago1725956483IN
Yearn.Finance: Voting YFI
0 ETH0.000924273.3
Modify_lock207189572024-09-10 8:15:353 days ago1725956135IN
Yearn.Finance: Voting YFI
0 ETH0.000877363.1325216
Modify_lock206954552024-09-07 1:32:596 days ago1725672779IN
Yearn.Finance: Voting YFI
0 ETH0.000380081.4
Modify_lock206842452024-09-05 12:00:237 days ago1725537623IN
Yearn.Finance: Voting YFI
0 ETH0.001115914.18416657
Modify_lock206675992024-09-03 4:15:4710 days ago1725336947IN
Yearn.Finance: Voting YFI
0 ETH0.000314221.14142037
Modify_lock206329962024-08-29 8:18:1115 days ago1724919491IN
Yearn.Finance: Voting YFI
0 ETH0.000397411.4384019
Modify_lock206326862024-08-29 7:15:4715 days ago1724915747IN
Yearn.Finance: Voting YFI
0 ETH0.00041530.87340447
Modify_lock206021572024-08-25 0:54:1119 days ago1724547251IN
Yearn.Finance: Voting YFI
0 ETH0.000249260.8899631
Modify_lock205944972024-08-23 23:10:4720 days ago1724454647IN
Yearn.Finance: Voting YFI
0 ETH0.000350841.2
Modify_lock205799322024-08-21 22:19:5922 days ago1724278799IN
Yearn.Finance: Voting YFI
0 ETH0.000295221.08737905
Modify_lock205791432024-08-21 19:40:2322 days ago1724269223IN
Yearn.Finance: Voting YFI
0 ETH0.000609652.20658505
Modify_lock205762412024-08-21 9:56:3523 days ago1724234195IN
Yearn.Finance: Voting YFI
0 ETH0.000348920.98490045
Withdraw205585372024-08-18 22:35:4725 days ago1724020547IN
Yearn.Finance: Voting YFI
0 ETH0.000245450.9742163
Modify_lock205413752024-08-16 13:04:5927 days ago1723813499IN
Yearn.Finance: Voting YFI
0 ETH0.001377554.63517015
Modify_lock205352512024-08-15 16:33:3528 days ago1723739615IN
Yearn.Finance: Voting YFI
0 ETH0.003108678.67629541
Modify_lock205010842024-08-10 22:04:4733 days ago1723327487IN
Yearn.Finance: Voting YFI
0 ETH0.000340431.1
Modify_lock205010822024-08-10 22:04:2333 days ago1723327463IN
Yearn.Finance: Voting YFI
0 ETH0.000298641.1
Modify_lock204986622024-08-10 13:59:3533 days ago1723298375IN
Yearn.Finance: Voting YFI
0 ETH0.000524651.93252484
Modify_lock204767162024-08-07 12:32:4736 days ago1723033967IN
Yearn.Finance: Voting YFI
0 ETH0.001150674.10815196
Modify_lock204767112024-08-07 12:31:4736 days ago1723033907IN
Yearn.Finance: Voting YFI
0 ETH0.001156834.33761834
Modify_lock204667522024-08-06 3:09:5938 days ago1722913799IN
Yearn.Finance: Voting YFI
0 ETH0.000947762.5
Modify_lock204546902024-08-04 10:47:4740 days ago1722768467IN
Yearn.Finance: Voting YFI
0 ETH0.000367051.32864687
Modify_lock204395362024-08-02 8:00:5942 days ago1722585659IN
Yearn.Finance: Voting YFI
0 ETH0.000816093.06
Withdraw204368672024-08-01 23:05:2342 days ago1722553523IN
Yearn.Finance: Voting YFI
0 ETH0.001750025.51130997
Modify_lock204157482024-07-30 0:15:5945 days ago1722298559IN
Yearn.Finance: Voting YFI
0 ETH0.000433561.48285876
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.7
"""
@title Voting YFI
@author Curve Finance, Yearn Finance
@license MIT
@notice
    Votes have a weight depending on time, so that users are
    committed to the future of whatever they are voting for.
@dev
    The voting power is capped at 4 years, but the lock can exceed that duration.
    Vote weight decays linearly over time.
    A user can unlock funds early incurring a penalty.
"""
from vyper.interfaces import ERC20

interface RewardPool:
    def burn(amount: uint256) -> bool: nonpayable

struct Point:
    bias: int128
    slope: int128  # - dweight / dt
    ts: uint256
    blk: uint256  # block

struct LockedBalance:
    amount: uint256
    end: uint256

struct Kink:
    slope: int128
    ts: uint256

struct Withdrawn:
    amount: uint256
    penalty: uint256

event ModifyLock:
    sender: indexed(address)
    user: indexed(address)
    amount: uint256
    locktime: uint256
    ts: uint256

event Withdraw:
    user: indexed(address)
    amount: uint256
    ts: uint256

event Penalty:
    user: indexed(address)
    amount: uint256
    ts: uint256

event Supply:
    old_supply: uint256
    new_supply: uint256
    ts: uint256

event Initialized:
    token: ERC20
    reward_pool: RewardPool

YFI: immutable(ERC20)
REWARD_POOL: immutable(RewardPool)

DAY: constant(uint256) = 86400
WEEK: constant(uint256) = 7 * 86400  # all future times are rounded by week
MAX_LOCK_DURATION: constant(uint256) = 4 * 365 * 86400 / WEEK * WEEK  # 4 years
SCALE: constant(uint256) = 10 ** 18
MAX_PENALTY_RATIO: constant(uint256) = SCALE * 3 / 4  # 75% for early exit of max lock
MAX_N_WEEKS: constant(uint256) = 522

supply: public(uint256)
locked: public(HashMap[address, LockedBalance])
# history
epoch: public(HashMap[address, uint256])
point_history: public(HashMap[address, HashMap[uint256, Point]])  # epoch -> unsigned point
slope_changes: public(HashMap[address, HashMap[uint256, int128]])  # time -> signed slope change


@external
def __init__(token: ERC20, reward_pool: RewardPool):
    """
    @notice Contract constructor
    @param token YFI token address
    @param reward_pool Pool for early exit penalties
    """
    YFI = token
    REWARD_POOL = reward_pool
    self.point_history[self][0].blk = block.number
    self.point_history[self][0].ts = block.timestamp

    log Initialized(token, reward_pool)


@view
@external
def get_last_user_point(addr: address) -> Point:
    """
    @notice Get the most recently recorded point for a user
    @param addr Address of the user wallet
    @return Last recorded point
    """
    epoch: uint256 = self.epoch[addr]
    return self.point_history[addr][epoch]


@pure
@internal
def round_to_week(ts: uint256) -> uint256:
    return ts / WEEK * WEEK


@view
@internal
def lock_to_point(lock: LockedBalance) -> Point:
    point: Point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number})
    if lock.amount > 0:
        # the lock is longer than the max duration
        slope: int128 = convert(lock.amount / MAX_LOCK_DURATION, int128)
        if lock.end > block.timestamp + MAX_LOCK_DURATION:
            point.slope = 0
            point.bias = slope * convert(MAX_LOCK_DURATION, int128)
        # the lock ends in the future but shorter than max duration
        elif lock.end > block.timestamp:
            point.slope = slope
            point.bias = slope * convert(lock.end - block.timestamp, int128)
    return point


@view
@internal
def lock_to_kink(lock: LockedBalance) -> Kink:
    kink: Kink = empty(Kink)
    # the lock is longer than the max duration
    if lock.amount > 0 and lock.end > self.round_to_week(block.timestamp + MAX_LOCK_DURATION):
        kink.ts = self.round_to_week(lock.end - MAX_LOCK_DURATION)
        kink.slope = convert(lock.amount / MAX_LOCK_DURATION, int128)

    return kink


@internal
def _checkpoint_user(user: address, old_lock: LockedBalance, new_lock: LockedBalance) -> Point[2]:
    old_point: Point = self.lock_to_point(old_lock)
    new_point: Point = self.lock_to_point(new_lock)

    old_kink: Kink = self.lock_to_kink(old_lock)        
    new_kink: Kink = self.lock_to_kink(new_lock)

    # schedule slope changes for the lock end
    if old_point.slope != 0 and old_lock.end > block.timestamp:
        self.slope_changes[self][old_lock.end] += old_point.slope
        self.slope_changes[user][old_lock.end] += old_point.slope
    if new_point.slope != 0 and new_lock.end > block.timestamp:
        self.slope_changes[self][new_lock.end] -= new_point.slope
        self.slope_changes[user][new_lock.end] -= new_point.slope

    # schedule kinks for locks longer than max duration
    if old_kink.slope != 0:
        self.slope_changes[self][old_kink.ts] -= old_kink.slope
        self.slope_changes[user][old_kink.ts] -= old_kink.slope
        self.slope_changes[self][old_lock.end] += old_kink.slope
        self.slope_changes[user][old_lock.end] += old_kink.slope
    if new_kink.slope != 0:
        self.slope_changes[self][new_kink.ts] += new_kink.slope
        self.slope_changes[user][new_kink.ts] += new_kink.slope
        self.slope_changes[self][new_lock.end] -= new_kink.slope
        self.slope_changes[user][new_lock.end] -= new_kink.slope

    self.epoch[user] += 1
    self.point_history[user][self.epoch[user]] = new_point
    return [old_point, new_point]

@internal
def _checkpoint_global() -> Point:
    last_point: Point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number})
    epoch: uint256 = self.epoch[self]
    if epoch > 0:
        last_point = self.point_history[self][epoch]
    last_checkpoint: uint256 = last_point.ts
    # initial_last_point is used for extrapolation to calculate block number
    initial_last_point: Point = last_point
    block_slope: uint256 = 0  # dblock/dt
    if block.timestamp > last_checkpoint:
        block_slope = SCALE * (block.number - last_point.blk) / (block.timestamp - last_checkpoint)
    
    # apply weekly slope changes and record weekly global snapshots
    t_i: uint256 = self.round_to_week(last_checkpoint)
    for i in range(255):
        t_i = min(t_i + WEEK, block.timestamp)
        last_point.bias -= last_point.slope * convert(t_i - last_checkpoint, int128)
        last_point.slope += self.slope_changes[self][t_i]  # will read 0 if not aligned to week
        last_point.bias = max(0, last_point.bias)  # this can happen
        last_point.slope = max(0, last_point.slope)  # this shouldn't happen
        last_checkpoint = t_i
        last_point.ts = t_i
        last_point.blk = initial_last_point.blk + block_slope * (t_i - initial_last_point.ts) / SCALE
        epoch += 1
        if t_i < block.timestamp:
            self.point_history[self][epoch] = last_point
        # skip last week
        else:
            last_point.blk = block.number
            break

    self.epoch[self] = epoch
    return last_point


@internal
def _checkpoint(user: address, old_lock: LockedBalance, new_lock: LockedBalance):
    """
    @notice Record global and per-user data to checkpoint
    @param user User's wallet address. No user checkpoint if 0x0
    @param old_lock Pevious locked amount / end lock time for the user
    @param new_lock New locked amount / end lock time for the user
    """
    user_points: Point[2] = empty(Point[2])

    if user != empty(address):
        user_points = self._checkpoint_user(user, old_lock, new_lock)

    # fill point_history until t=now
    last_point: Point = self._checkpoint_global()
    
    # only affects the last checkpoint at t=now
    if user != empty(address):
        # If last point was in this block, the slope change has been applied already
        # But in such case we have 0 slope(s)
        last_point.slope += (user_points[1].slope - user_points[0].slope)
        last_point.bias += (user_points[1].bias - user_points[0].bias)
        last_point.slope = max(0, last_point.slope)
        last_point.bias = max(0, last_point.bias)

    # Record the changed point into history
    epoch: uint256 = self.epoch[self]
    self.point_history[self][epoch] = last_point


@external
def checkpoint():
    """
    @notice Record global data to checkpoint
    """
    self._checkpoint(empty(address), empty(LockedBalance), empty(LockedBalance))


@external
def modify_lock(amount: uint256, unlock_time: uint256, user: address = msg.sender) -> LockedBalance:
    """
    @notice Create or modify a lock for a user. Support deposits on behalf of a user.
    @dev
        Minimum deposit to create a lock is 1 YFI.
        You can lock for longer than 4 years, but less than 10 years, the max voting power is capped at 4 years.
        You can only increase lock duration if it has less than 4 years remaining.
        You can decrease lock duration if it has more than 4 years remaining.
    @param amount YFI amount to add to a lock. 0 to not modify.
    @param unlock_time Unix timestamp when the lock ends, must be in the future. 0 to not modify.
    @param user A user to deposit to. If different from msg.sender, unlock_time has no effect
    """
    old_lock: LockedBalance = self.locked[user]
    new_lock: LockedBalance = old_lock
    new_lock.amount += amount

    unlock_week: uint256 = 0
    # only a user can modify their own unlock time
    if msg.sender == user:
        if unlock_time != 0:
            unlock_week = self.round_to_week(unlock_time)  # locktime is rounded down to weeks
            assert ((unlock_week - self.round_to_week(block.timestamp)) / WEEK) < MAX_N_WEEKS # lock can't exceed 10 years
            assert unlock_week > block.timestamp  #  dev: unlock time must be in the future
            if unlock_week - block.timestamp < MAX_LOCK_DURATION:
                assert unlock_week > old_lock.end  # dev: can only increase lock duration
            else:
                assert unlock_week > block.timestamp + MAX_LOCK_DURATION  # dev: can only decrease to ≥4 years
            new_lock.end = unlock_week

    # create lock
    if old_lock.amount == 0 and old_lock.end == 0:
        assert msg.sender == user  # dev: you can only create a lock for yourself
        assert amount >= 10 ** 18  # dev: minimum amount is 1 YFI
        assert unlock_week != 0  # dev: must specify unlock time in the future
    # modify lock
    else:
        assert old_lock.end > block.timestamp  # dev: lock expired

    supply_before: uint256 = self.supply
    self.supply = supply_before + amount
    self.locked[user] = new_lock
    
    self._checkpoint(user, old_lock, new_lock)

    if amount > 0:
        assert YFI.transferFrom(msg.sender, self, amount)

    log Supply(supply_before, supply_before + amount, block.timestamp)
    log ModifyLock(msg.sender, user, new_lock.amount, new_lock.end, block.timestamp)

    return new_lock


@external
def withdraw() -> Withdrawn:
    """
    @notice Withdraw lock for a sender
    @dev
        If a lock has expired, sends a full amount to the sender.
        If a lock is still active, the sender pays a 75% penalty during the first year
        and a linearly decreasing penalty from 75% to 0 based on the remaining lock time.
    """
    old_locked: LockedBalance = self.locked[msg.sender]
    assert old_locked.amount > 0  # dev: create a lock first to withdraw
    
    time_left: uint256 = 0
    penalty: uint256 = 0

    if old_locked.end > block.timestamp:
        time_left = min(old_locked.end - block.timestamp, MAX_LOCK_DURATION)
        penalty_ratio: uint256 = min(time_left * SCALE / MAX_LOCK_DURATION, MAX_PENALTY_RATIO)
        penalty = old_locked.amount * penalty_ratio / SCALE

    zero_locked: LockedBalance = empty(LockedBalance)
    self.locked[msg.sender] = zero_locked

    supply_before: uint256 = self.supply
    self.supply = supply_before - old_locked.amount

    self._checkpoint(msg.sender, old_locked, zero_locked)

    assert YFI.transfer(msg.sender, old_locked.amount - penalty)
    
    if penalty > 0:
        assert YFI.approve(REWARD_POOL.address, penalty)
        assert REWARD_POOL.burn(penalty)

        log Penalty(msg.sender, penalty, block.timestamp)
    
    log Withdraw(msg.sender, old_locked.amount - penalty, block.timestamp)
    log Supply(supply_before, supply_before - old_locked.amount, block.timestamp)

    return Withdrawn({amount: old_locked.amount - penalty, penalty: penalty})

@view
@internal
def find_epoch_by_block(user: address, height: uint256, max_epoch: uint256) -> uint256:
    """
    @notice Binary search to estimate epoch height number
    @param height Block to find
    @param max_epoch Don't go beyond this epoch
    @return Epoch the block is in
    """
    _min: uint256 = 0
    _max: uint256 = max_epoch
    for i in range(128):  # Will be always enough for 128-bit numbers
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 1) / 2
        if self.point_history[user][_mid].blk <= height:
            _min = _mid
        else:
            _max = _mid - 1
    return _min


@view
@external
def find_epoch_by_timestamp(user: address, ts: uint256) -> uint256:
    return self._find_epoch_by_timestamp(user, ts, self.epoch[user])

@view
@internal
def _find_epoch_by_timestamp(user: address, ts: uint256, max_epoch: uint256) -> uint256:
    """
    @notice Binary search to estimate epoch timestamp
    @param ts Timestamp to find
    @param max_epoch Don't go beyond this epoch
    @return Epoch the timestamp is in
    """
    _min: uint256 = 0
    _max: uint256 = max_epoch
    for i in range(128):  # Will be always enough for 128-bit numbers
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 1) / 2
        if self.point_history[user][_mid].ts <= ts:
            _min = _mid
        else:
            _max = _mid - 1
    return _min


@view
@internal
def replay_slope_changes(user: address, point: Point, ts: uint256) -> Point:
    """
    @dev
        If the `ts` is higher than MAX_N_WEEKS weeks ago, this function will return the 
        balance at exactly MAX_N_WEEKS weeks instead of `ts`. 
        MAX_N_WEEKS weeks is considered sufficient to cover the `MAX_LOCK_DURATION` period.
    """
    upoint: Point = point
    t_i: uint256 = self.round_to_week(upoint.ts)

    for i in range(MAX_N_WEEKS):
        t_i += WEEK
        d_slope: int128 = 0
        if t_i > ts:
            t_i = ts
        else:
            d_slope = self.slope_changes[user][t_i]
        upoint.bias -= upoint.slope * convert(t_i - upoint.ts, int128)
        if t_i == ts:
            break
        upoint.slope += d_slope
        upoint.ts = t_i
    
    upoint.bias = max(0, upoint.bias)
    return upoint

@view
@internal
def _balanceOf(user: address, ts: uint256 = block.timestamp) -> uint256:
    """
    @notice Get the current voting power for `user`
    @param user User wallet address
    @param ts Epoch time to return voting power at
    @return User voting power
    """
    epoch: uint256 = self.epoch[user]
    if epoch == 0:
        return 0
    if ts != block.timestamp:
        epoch = self._find_epoch_by_timestamp(user, ts, epoch)
    upoint: Point = self.point_history[user][epoch]
    
    upoint = self.replay_slope_changes(user, upoint, ts)

    return convert(upoint.bias, uint256)


@view
@external
def balanceOf(user: address, ts: uint256 = block.timestamp) -> uint256:
    """
    @notice Get the current voting power for `user`
    @param user User wallet address
    @param ts Epoch time to return voting power at
    @return User voting power
    """
    return self._balanceOf(user, ts)


@view
@external
def getPriorVotes(user: address, height: uint256) -> uint256:
    """
    @notice Measure voting power of `user` at block height `height`
    @dev 
        Compatible with GovernorAlpha. 
        `user`can be self to get total supply at height.
    @param user User's wallet address
    @param height Block to calculate the voting power at
    @return Voting power
    """
    assert height <= block.number

    uepoch: uint256 = self.epoch[user]
    uepoch = self.find_epoch_by_block(user, height, uepoch)
    upoint: Point = self.point_history[user][uepoch]

    max_epoch: uint256 = self.epoch[self]
    epoch: uint256 = self.find_epoch_by_block(self, height, max_epoch)
    point_0: Point = self.point_history[self][epoch]
    d_block: uint256 = 0
    d_t: uint256 = 0
    if epoch < max_epoch:
        point_1: Point = self.point_history[self][epoch + 1]
        d_block = point_1.blk - point_0.blk
        d_t = point_1.ts - point_0.ts
    else:
        d_block = block.number - point_0.blk
        d_t = block.timestamp - point_0.ts
    block_time: uint256 = point_0.ts
    if d_block != 0:
        block_time += d_t * (height - point_0.blk) / d_block

    upoint = self.replay_slope_changes(user, upoint, block_time)
    return convert(upoint.bias, uint256)
@view
@external
def totalSupply(ts: uint256 = block.timestamp) -> uint256:
    """
    @notice Calculate total voting power
    @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility
    @param ts Epoch time to return voting power at
    @return Total voting power
    """
    return self._balanceOf(self, ts)


@view
@external
def totalSupplyAt(height: uint256) -> uint256:
    """
    @notice Calculate total voting power at some point in the past
    @param height Block to calculate the total voting power at
    @return Total voting power at `height`
    """
    assert height <= block.number
    epoch: uint256 = self.epoch[self]
    target_epoch: uint256 = self.find_epoch_by_block(self, height, epoch)

    point: Point = self.point_history[self][target_epoch]
    dt: uint256 = 0
    if target_epoch < epoch:
        point_next: Point = self.point_history[self][target_epoch + 1]
        if point.blk != point_next.blk:
            dt = (height - point.blk) * (point_next.ts - point.ts) / (point_next.blk - point.blk)
    else:
        if point.blk != block.number:
            dt = (height - point.blk) * (block.timestamp - point.ts) / (block.number - point.blk)

    # Now dt contains info on how far are we beyond point
    point = self.replay_slope_changes(self, point, point.ts + dt)
    return convert(point.bias, uint256)


@view
@external
def token() -> ERC20:
    return YFI


@view
@external
def reward_pool() -> RewardPool:
    return REWARD_POOL


@view
@external
def name() -> String[10]:
    return "Voting YFI"


@view
@external
def symbol() -> String[5]:
    return "veYFI"


@view
@external
def decimals() -> uint8:
    return 18

Contract Security Audit

Contract ABI

[{"name":"ModifyLock","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"user","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"locktime","type":"uint256","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"user","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Penalty","inputs":[{"name":"user","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Supply","inputs":[{"name":"old_supply","type":"uint256","indexed":false},{"name":"new_supply","type":"uint256","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Initialized","inputs":[{"name":"token","type":"address","indexed":false},{"name":"reward_pool","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"token","type":"address"},{"name":"reward_pool","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_last_user_point","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}]}]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"modify_lock","inputs":[{"name":"amount","type":"uint256"},{"name":"unlock_time","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"amount","type":"uint256"},{"name":"end","type":"uint256"}]}]},{"stateMutability":"nonpayable","type":"function","name":"modify_lock","inputs":[{"name":"amount","type":"uint256"},{"name":"unlock_time","type":"uint256"},{"name":"user","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"amount","type":"uint256"},{"name":"end","type":"uint256"}]}]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[],"outputs":[{"name":"","type":"tuple","components":[{"name":"amount","type":"uint256"},{"name":"penalty","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"find_epoch_by_timestamp","inputs":[{"name":"user","type":"address"},{"name":"ts","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"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":"ts","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"getPriorVotes","inputs":[{"name":"user","type":"address"},{"name":"height","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[{"name":"ts","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"totalSupplyAt","inputs":[{"name":"height","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"reward_pool","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8"}]},{"stateMutability":"view","type":"function","name":"supply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"amount","type":"uint256"},{"name":"end","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"epoch","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"point_history","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"slope_changes","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]}]

60206120016000396000518060a01c611ffc5760405260206120216000396000518060a01c611ffc5760605234611ffc57604051611f2d52606051611f4d52436003306020526000526040600020806000602052600052604060002090506003810190505542600330602052600052604060002080600060205260005260406000209050600281019050557f3cd5ec01b1ae7cfec6ca1863e2cd6aa25d6d1702825803ff2b7cc95010fffdc260405160805260605160a05260406080a1611f2d6100ce61000039611f6d610000f36003361161000c5761106a565b60003560e01c34611f1b5763a7afdcae81186100915760243610611f1b576004358060a01c611f1b5760405260026040516020526000526040600020546060526003604051602052600052604060002080606051602052600052604060002090508054608052600181015460a052600281015460c052600381015460e0525060806080f35b63c2c4c5c181186100b55760043610611f1b5760a036610380376100b3611985565b005b63622b6d9681186100d25760443610611f1b5733610620526100f5565b6314557b8c81186103c85760643610611f1b576044358060a01c611f1b57610620525b6001610620516020526000526040600020805461064052600181015461066052506106405161068052610660516106a05261068051600435808201828110611f1b57905090506106805260006106c0526106205133186102065760243515610206576024356040526101686106e0611070565b6106e0516106c0526102096106c051426040526101866106e0611070565b6106e051808203828111611f1b579050905062093a808104905011611f1b57426106c0511115611f1b5763077f87ff6106c05142808203828111611f1b579050905011156101ee574263077f88008101818110611f1b5790506106c0511115611f1b576101fd565b610660516106c0511115611f1b575b6106c0516106a0525b6106405161021857610660511561021b565b60005b61022f5742610660511115611f1b57610254565b610620513318611f1b57670de0b6b3a764000060043510611f1b576106c05115611f1b575b6000546106e0526106e051600435808201828110611f1b579050905060005560016106205160205260005260406000206106805181556106a0516001820155506106205161038052610640516103a052610660516103c052610680516103e0526106a051610400526102c4611985565b60043515610333576020611f2d6000396000516323b872dd6107005233610720523061074052600435610760526020610700606461071c6000855af161030f573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107805261078090505115611f1b575b7f21e69d6eb75b6c23bbc769d20f147b2d4bd10ffdaef330c7bf634c2686302fa76106e051610700526106e051600435808201828110611f1b57905090506107205242610740526060610700a161062051337f01affbd18fb24fa23763acc978a6bb9b9cd159b1cc733a15f3ea571d691cabc161068051610700526106a0516107205242610740526060610700a36040610680f35b633ccfd60b81186107625760043610611f1b576001336020526000526040600020805461062052600181015461064052506106205115611f1b5760403661066037426106405111156104b6576106405142808203828111611f1b579050905063077f880081811863077f88008310021890506106605261066051670de0b6b3a7640000810281670de0b6b3a7640000820418611f1b57905063077f880081049050670a688906bd8b0000818118670a688906bd8b00008310021890506106a052610620516106a051808202811583838304141715611f1b5790509050670de0b6b3a764000081049050610680525b6040366106a03760013360205260005260406000206106a05181556106c0516001820155506000546106e0526106e05161062051808203828111611f1b57905090506000553361038052610620516103a052610640516103c0526106a0516103e0526106c05161040052610528611985565b6020611f2d60003960005163a9059cbb6107005233610720526106205161068051808203828111611f1b5790509050610740526020610700604461071c6000855af1610579573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107605261076090505115611f1b5761068051156106a4576020611f2d60003960005163095ea7b3610700526020611f4d6000396000516107205261068051610740526020610700604461071c6000855af16105ee573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107605261076090505115611f1b576020611f4d6000396000516342966c686107005261068051610720526020610700602461071c6000855af161064b573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107405261074090505115611f1b57337fc25dcb745945a227e2139cc3f70645f2b61a352fe9e7f8d44ac19571f4b89eff610680516107005242610720526040610700a25b337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686106205161068051808203828111611f1b57905090506107005242610720526040610700a27f21e69d6eb75b6c23bbc769d20f147b2d4bd10ffdaef330c7bf634c2686302fa76106e051610700526106e05161062051808203828111611f1b57905090506107205242610740526060610700a16106205161068051808203828111611f1b57905090506107005261068051610720526040610700f35b63b5418e3f81186107b85760443610611f1b576004358060a01c611f1b57610120526020610120516040526024356060526002610120516020526000526040600020546080526107b3610140611bec565b610140f35b6370a0823181186107d55760243610611f1b5742610380526107ef565b62fdd58e81186108205760443610611f1b57602435610380525b6004358060a01c611f1b576103605260206103605161020052610380516102205261081b6103a0611e0e565b6103a0f35b63782d6fe18118610ae95760443610611f1b576004358060a01c611f1b57610200524360243511611f1b57600261020051602052600052604060002054610220526102005160405260243560605261022051608052610880610240611b34565b6102405161022052600361020051602052600052604060002080610220516020526000526040600020905080546102405260018101546102605260028101546102805260038101546102a052506002306020526000526040600020546102c052306040526024356060526102c0516080526108fc610300611b34565b610300516102e0526003306020526000526040600020806102e0516020526000526040600020905080546103005260018101546103205260028101546103405260038101546103605250604036610380376102c0516102e0511061098d574361036051808203828111611f1b5790509050610380524261034051808203828111611f1b57905090506103a052610a11565b6003306020526000526040600020806102e05160018101818110611f1b5790506020526000526040600020905080546103c05260018101546103e052600281015461040052600381015461042052506104205161036051808203828111611f1b5790509050610380526104005161034051808203828111611f1b57905090506103a0525b610340516103c0526103805115610a77576103c0516103a05160243561036051808203828111611f1b5790509050808202811583838304141715611f1b5790509050610380518015611f1b5780820490509050808201828110611f1b57905090506103c0525b61020051606052610240516080526102605160a0526102805160c0526102a05160e0526103c05161010052610aad6103e0611ca4565b6103e080516102405260208101516102605260408101516102805260608101516102a052506102405160008112611f1b576103e05260206103e0f35b6318160ddd8118610b065760043610611f1b574261036052610b21565b63bd85b0398118610b405760243610611f1b57600435610360525b602030610200526103605161022052610b3b610380611e0e565b610380f35b63981b24d08118610d9b5760243610611f1b574360043511611f1b57600230602052600052604060002054610200523060405260043560605261020051608052610b8b610240611b34565b6102405161022052600330602052600052604060002080610220516020526000526040600020905080546102405260018101546102605260028101546102805260038101546102a0525060006102c052610200516102205110610c5757436102a05114610d1a576004356102a051808203828111611f1b57905090504261028051808203828111611f1b5790509050808202811583838304141715611f1b5790509050436102a051808203828111611f1b57905090508015611f1b57808204905090506102c052610d1a565b6003306020526000526040600020806102205160018101818110611f1b5790506020526000526040600020905080546102e05260018101546103005260028101546103205260038101546103405250610340516102a05114610d1a576004356102a051808203828111611f1b57905090506103205161028051808203828111611f1b5790509050808202811583838304141715611f1b5790509050610340516102a051808203828111611f1b57905090508015611f1b57808204905090506102c0525b30606052610240516080526102605160a0526102805160c0526102a05160e052610280516102c051808201828110611f1b579050905061010052610d5f6102e0611ca4565b6102e080516102405260208101516102605260408101516102805260608101516102a052506102405160008112611f1b576102e05260206102e0f35b63fc0c546a8118610dc25760043610611f1b576020611f2d60003960005160405260206040f35b6316bfdd568118610de95760043610611f1b576020611f4d60003960005160405260206040f35b6306fdde038118610e715760043610611f1b57602080608052600a6040527f566f74696e67205946490000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6395d89b418118610ef95760043610611f1b5760208060805260056040527f766559464900000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63313ce5678118610f175760043610611f1b57601260405260206040f35b63047fc9aa8118610f365760043610611f1b5760005460405260206040f35b63cbf9fe5f8118610f7b5760243610611f1b576004358060a01c611f1b5760405260016040516020526000526040600020805460605260018101546080525060406060f35b638b810c368118610fb65760243610611f1b576004358060a01c611f1b57604052600260405160205260005260406000205460605260206060f35b63613a6bea811861101c5760443610611f1b576004358060a01c611f1b5760405260036040516020526000526040600020806024356020526000526040600020905080546060526001810154608052600281015460a052600381015460c0525060806060f35b63bfa7fa8981186110685760443610611f1b576004358060a01c611f1b576040526004604051602052600052604060002080602435602052600052604060002090505460605260206060f35b505b60006000fd5b60405162093a808104905062093a8081028162093a80820418611f1b579050815250565b6040366080374260c0524360e052604051156111435760405163077f88008104905080607f1c611f1b57610100524263077f88008101818110611f1b5790506060511161112357426060511115611143576101005160a0526101005160605142808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b5790509050608052611143565b600060a0526101005163077f8800810280600f0b8118611f1b5790506080525b608051815260a051602082015260c051604082015260e051606082015250565b60403660a0376060511561119b574263077f88008101818110611f1b57905060405261118f60e0611070565b60e0516080511161119e565b60005b156111e35760805163077f88008103818111611f1b5790506040526111c4610100611070565b6101005160c05260605163077f88008104905080607f1c611f1b5760a0525b60a051815260c051602082015250565b610140516040526101605160605261120c610240611094565b61024080516101c05260208101516101e05260408101516102005260608101516102205250610180516040526101a05160605261124a6102c0611094565b6102c080516102405260208101516102605260408101516102805260608101516102a052506101405160605261016051608052611288610300611163565b61030080516102c05260208101516102e05250610180516060526101a0516080526112b4610340611163565b610340805161030052602081015161032052506101e051156112db574261016051116112de565b60005b1561135b57600430602052600052604060002080610160516020526000526040600020905080546101e05180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610160516020526000526040600020905080546101e05180820180600f0b8118611f1b57905090508155505b610260511561136f57426101a05111611372565b60005b156113ef576004306020526000526040600020806101a0516020526000526040600020905080546102605180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806101a0516020526000526040600020905080546102605180820380600f0b8118611f1b57905090508155505b6102c051156114e7576004306020526000526040600020806102e0516020526000526040600020905080546102c05180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806102e0516020526000526040600020905080546102c05180820380600f0b8118611f1b5790509050815550600430602052600052604060002080610160516020526000526040600020905080546102c05180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610160516020526000526040600020905080546102c05180820180600f0b8118611f1b57905090508155505b61030051156115df57600430602052600052604060002080610320516020526000526040600020905080546103005180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610320516020526000526040600020905080546103005180820180600f0b8118611f1b57905090508155506004306020526000526040600020806101a0516020526000526040600020905080546103005180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806101a0516020526000526040600020905080546103005180820380600f0b8118611f1b57905090508155505b6002610120516020526000526040600020805460018101818110611f1b579050815550600361012051602052600052604060002080600261012051602052600052604060002054602052600052604060002090506102405181556102605160018201556102805160028201556102a0516003820155506101c05181526101e0516020820152610200516040820152610220516060820152608081016102405181526102605160208201526102805160408201526102a05160608201525050565b6040366060374260a0524360c05260023060205260005260406000205460e05260e051156117055760033060205260005260406000208060e0516020526000526040600020905080546060526001810154608052600281015460a052600381015460c052505b60a05161010052606051610120526080516101405260a0516101605260c0516101805260006101a0526101005142111561178e574360c051808203828111611f1b5790509050670de0b6b3a7640000810281670de0b6b3a7640000820418611f1b5790504261010051808203828111611f1b57905090508015611f1b57808204905090506101a0525b610100516040526117a06101e0611070565b6101e0516101c052600060ff905b806101e0526101c05162093a808101818110611f1b57905042808281188284100218905090506101c0526060516080516101c05161010051808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b579050905080820380600f0b8118611f1b57905090506060526080516004306020526000526040600020806101c051602052600052604060002090505480820180600f0b8118611f1b579050905060805260605180600081188260001302189050606052608051806000811882600013021890506080526101c051610100526101c05160a052610180516101a0516101c05161016051808203828111611f1b5790509050808202811583838304141715611f1b5790509050670de0b6b3a764000081049050808201828110611f1b579050905060c05260e05160018101818110611f1b57905060e052426101c05110611908574360c05261195156611946565b60033060205260005260406000208060e051602052600052604060002090506060518155608051600182015560a051600282015560c0516003820155505b6001018181186117ae575b505060e0516002306020526000526040600020556060518152608051602082015260a051604082015260c051606082015250565b61010036610420376103805115611a155761038051610120526103a051610140526103c051610160526103e05161018052610400516101a0526119c96105206111f3565b6105208051610420526020810151610440526040810151610460526060810151610480526080810180516104a05260208101516104c05260408101516104e05260608101516105005250505b611a206105a061169f565b6105a0805161052052602081015161054052604081015161056052606081015161058052506103805115611add57610540516104c0516104405180820380600f0b8118611f1b579050905080820180600f0b8118611f1b579050905061054052610520516104a0516104205180820380600f0b8118611f1b579050905080820180600f0b8118611f1b5790509050610520526105405180600081188260001302189050610540526105205180600081188260001302189050610520525b6002306020526000526040600020546105a0526003306020526000526040600020806105a0516020526000526040600020905061052051815561054051600182015561056051600282015561058051600382015550565b600060a05260805160c05260006080905b8060e05260c05160a05110611b5957611be2565b60a05160c051808201828110611f1b579050905060018101818110611f1b5790508060011c90506101005260605160036040516020526000526040600020806101005160205260005260406000209050600381019050541115611bcf576101005160018103818111611f1b57905060c052611bd7565b6101005160a0525b600101818118611b45575b505060a051815250565b600060a05260805160c05260006080905b8060e05260c05160a05110611c1157611c9a565b60a05160c051808201828110611f1b579050905060018101818110611f1b5790508060011c90506101005260605160036040516020526000526040600020806101005160205260005260406000209050600281019050541115611c87576101005160018103818111611f1b57905060c052611c8f565b6101005160a0525b600101818118611bfd575b505060a051815250565b6080516101205260a0516101405260c0516101605260e0516101805261016051604052611cd26101c0611070565b6101c0516101a052600061020a905b806101c0526101a05162093a808101818110611f1b5790506101a05260006101e052610100516101a05111611d3c5760046060516020526000526040600020806101a05160205260005260406000209050546101e052611d45565b610100516101a0525b61012051610140516101a05161016051808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b579050905080820380600f0b8118611f1b579050905061012052610100516101a05118611da357611dd3565b610140516101e05180820180600f0b8118611f1b5790509050610140526101a05161016052600101818118611ce1575b505061012051806000811882600013021890506101205261012051815261014051602082015261016051604082015261018051606082015250565b6002610200516020526000526040600020546102405261024051611e36576000815250611f19565b426102205114611e6957610200516040526102205160605261024051608052611e60610260611bec565b61026051610240525b600361020051602052600052604060002080610240516020526000526040600020905080546102605260018101546102805260028101546102a05260038101546102c0525061020051606052610260516080526102805160a0526102a05160c0526102c05160e0526102205161010052611ee46102e0611ca4565b6102e080516102605260208101516102805260408101516102a05260608101516102c052506102605160008112611f1b578152505b565b600080fda165767970657283000307000b005b600080fd0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000b287a1964aee422911c7b8409f5e5a273c1412fa

Deployed Bytecode

0x6003361161000c5761106a565b60003560e01c34611f1b5763a7afdcae81186100915760243610611f1b576004358060a01c611f1b5760405260026040516020526000526040600020546060526003604051602052600052604060002080606051602052600052604060002090508054608052600181015460a052600281015460c052600381015460e0525060806080f35b63c2c4c5c181186100b55760043610611f1b5760a036610380376100b3611985565b005b63622b6d9681186100d25760443610611f1b5733610620526100f5565b6314557b8c81186103c85760643610611f1b576044358060a01c611f1b57610620525b6001610620516020526000526040600020805461064052600181015461066052506106405161068052610660516106a05261068051600435808201828110611f1b57905090506106805260006106c0526106205133186102065760243515610206576024356040526101686106e0611070565b6106e0516106c0526102096106c051426040526101866106e0611070565b6106e051808203828111611f1b579050905062093a808104905011611f1b57426106c0511115611f1b5763077f87ff6106c05142808203828111611f1b579050905011156101ee574263077f88008101818110611f1b5790506106c0511115611f1b576101fd565b610660516106c0511115611f1b575b6106c0516106a0525b6106405161021857610660511561021b565b60005b61022f5742610660511115611f1b57610254565b610620513318611f1b57670de0b6b3a764000060043510611f1b576106c05115611f1b575b6000546106e0526106e051600435808201828110611f1b579050905060005560016106205160205260005260406000206106805181556106a0516001820155506106205161038052610640516103a052610660516103c052610680516103e0526106a051610400526102c4611985565b60043515610333576020611f2d6000396000516323b872dd6107005233610720523061074052600435610760526020610700606461071c6000855af161030f573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107805261078090505115611f1b575b7f21e69d6eb75b6c23bbc769d20f147b2d4bd10ffdaef330c7bf634c2686302fa76106e051610700526106e051600435808201828110611f1b57905090506107205242610740526060610700a161062051337f01affbd18fb24fa23763acc978a6bb9b9cd159b1cc733a15f3ea571d691cabc161068051610700526106a0516107205242610740526060610700a36040610680f35b633ccfd60b81186107625760043610611f1b576001336020526000526040600020805461062052600181015461064052506106205115611f1b5760403661066037426106405111156104b6576106405142808203828111611f1b579050905063077f880081811863077f88008310021890506106605261066051670de0b6b3a7640000810281670de0b6b3a7640000820418611f1b57905063077f880081049050670a688906bd8b0000818118670a688906bd8b00008310021890506106a052610620516106a051808202811583838304141715611f1b5790509050670de0b6b3a764000081049050610680525b6040366106a03760013360205260005260406000206106a05181556106c0516001820155506000546106e0526106e05161062051808203828111611f1b57905090506000553361038052610620516103a052610640516103c0526106a0516103e0526106c05161040052610528611985565b6020611f2d60003960005163a9059cbb6107005233610720526106205161068051808203828111611f1b5790509050610740526020610700604461071c6000855af1610579573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107605261076090505115611f1b5761068051156106a4576020611f2d60003960005163095ea7b3610700526020611f4d6000396000516107205261068051610740526020610700604461071c6000855af16105ee573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107605261076090505115611f1b576020611f4d6000396000516342966c686107005261068051610720526020610700602461071c6000855af161064b573d600060003e3d6000fd5b60203d10611f1b57610700518060011c611f1b576107405261074090505115611f1b57337fc25dcb745945a227e2139cc3f70645f2b61a352fe9e7f8d44ac19571f4b89eff610680516107005242610720526040610700a25b337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686106205161068051808203828111611f1b57905090506107005242610720526040610700a27f21e69d6eb75b6c23bbc769d20f147b2d4bd10ffdaef330c7bf634c2686302fa76106e051610700526106e05161062051808203828111611f1b57905090506107205242610740526060610700a16106205161068051808203828111611f1b57905090506107005261068051610720526040610700f35b63b5418e3f81186107b85760443610611f1b576004358060a01c611f1b57610120526020610120516040526024356060526002610120516020526000526040600020546080526107b3610140611bec565b610140f35b6370a0823181186107d55760243610611f1b5742610380526107ef565b62fdd58e81186108205760443610611f1b57602435610380525b6004358060a01c611f1b576103605260206103605161020052610380516102205261081b6103a0611e0e565b6103a0f35b63782d6fe18118610ae95760443610611f1b576004358060a01c611f1b57610200524360243511611f1b57600261020051602052600052604060002054610220526102005160405260243560605261022051608052610880610240611b34565b6102405161022052600361020051602052600052604060002080610220516020526000526040600020905080546102405260018101546102605260028101546102805260038101546102a052506002306020526000526040600020546102c052306040526024356060526102c0516080526108fc610300611b34565b610300516102e0526003306020526000526040600020806102e0516020526000526040600020905080546103005260018101546103205260028101546103405260038101546103605250604036610380376102c0516102e0511061098d574361036051808203828111611f1b5790509050610380524261034051808203828111611f1b57905090506103a052610a11565b6003306020526000526040600020806102e05160018101818110611f1b5790506020526000526040600020905080546103c05260018101546103e052600281015461040052600381015461042052506104205161036051808203828111611f1b5790509050610380526104005161034051808203828111611f1b57905090506103a0525b610340516103c0526103805115610a77576103c0516103a05160243561036051808203828111611f1b5790509050808202811583838304141715611f1b5790509050610380518015611f1b5780820490509050808201828110611f1b57905090506103c0525b61020051606052610240516080526102605160a0526102805160c0526102a05160e0526103c05161010052610aad6103e0611ca4565b6103e080516102405260208101516102605260408101516102805260608101516102a052506102405160008112611f1b576103e05260206103e0f35b6318160ddd8118610b065760043610611f1b574261036052610b21565b63bd85b0398118610b405760243610611f1b57600435610360525b602030610200526103605161022052610b3b610380611e0e565b610380f35b63981b24d08118610d9b5760243610611f1b574360043511611f1b57600230602052600052604060002054610200523060405260043560605261020051608052610b8b610240611b34565b6102405161022052600330602052600052604060002080610220516020526000526040600020905080546102405260018101546102605260028101546102805260038101546102a0525060006102c052610200516102205110610c5757436102a05114610d1a576004356102a051808203828111611f1b57905090504261028051808203828111611f1b5790509050808202811583838304141715611f1b5790509050436102a051808203828111611f1b57905090508015611f1b57808204905090506102c052610d1a565b6003306020526000526040600020806102205160018101818110611f1b5790506020526000526040600020905080546102e05260018101546103005260028101546103205260038101546103405250610340516102a05114610d1a576004356102a051808203828111611f1b57905090506103205161028051808203828111611f1b5790509050808202811583838304141715611f1b5790509050610340516102a051808203828111611f1b57905090508015611f1b57808204905090506102c0525b30606052610240516080526102605160a0526102805160c0526102a05160e052610280516102c051808201828110611f1b579050905061010052610d5f6102e0611ca4565b6102e080516102405260208101516102605260408101516102805260608101516102a052506102405160008112611f1b576102e05260206102e0f35b63fc0c546a8118610dc25760043610611f1b576020611f2d60003960005160405260206040f35b6316bfdd568118610de95760043610611f1b576020611f4d60003960005160405260206040f35b6306fdde038118610e715760043610611f1b57602080608052600a6040527f566f74696e67205946490000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6395d89b418118610ef95760043610611f1b5760208060805260056040527f766559464900000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63313ce5678118610f175760043610611f1b57601260405260206040f35b63047fc9aa8118610f365760043610611f1b5760005460405260206040f35b63cbf9fe5f8118610f7b5760243610611f1b576004358060a01c611f1b5760405260016040516020526000526040600020805460605260018101546080525060406060f35b638b810c368118610fb65760243610611f1b576004358060a01c611f1b57604052600260405160205260005260406000205460605260206060f35b63613a6bea811861101c5760443610611f1b576004358060a01c611f1b5760405260036040516020526000526040600020806024356020526000526040600020905080546060526001810154608052600281015460a052600381015460c0525060806060f35b63bfa7fa8981186110685760443610611f1b576004358060a01c611f1b576040526004604051602052600052604060002080602435602052600052604060002090505460605260206060f35b505b60006000fd5b60405162093a808104905062093a8081028162093a80820418611f1b579050815250565b6040366080374260c0524360e052604051156111435760405163077f88008104905080607f1c611f1b57610100524263077f88008101818110611f1b5790506060511161112357426060511115611143576101005160a0526101005160605142808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b5790509050608052611143565b600060a0526101005163077f8800810280600f0b8118611f1b5790506080525b608051815260a051602082015260c051604082015260e051606082015250565b60403660a0376060511561119b574263077f88008101818110611f1b57905060405261118f60e0611070565b60e0516080511161119e565b60005b156111e35760805163077f88008103818111611f1b5790506040526111c4610100611070565b6101005160c05260605163077f88008104905080607f1c611f1b5760a0525b60a051815260c051602082015250565b610140516040526101605160605261120c610240611094565b61024080516101c05260208101516101e05260408101516102005260608101516102205250610180516040526101a05160605261124a6102c0611094565b6102c080516102405260208101516102605260408101516102805260608101516102a052506101405160605261016051608052611288610300611163565b61030080516102c05260208101516102e05250610180516060526101a0516080526112b4610340611163565b610340805161030052602081015161032052506101e051156112db574261016051116112de565b60005b1561135b57600430602052600052604060002080610160516020526000526040600020905080546101e05180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610160516020526000526040600020905080546101e05180820180600f0b8118611f1b57905090508155505b610260511561136f57426101a05111611372565b60005b156113ef576004306020526000526040600020806101a0516020526000526040600020905080546102605180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806101a0516020526000526040600020905080546102605180820380600f0b8118611f1b57905090508155505b6102c051156114e7576004306020526000526040600020806102e0516020526000526040600020905080546102c05180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806102e0516020526000526040600020905080546102c05180820380600f0b8118611f1b5790509050815550600430602052600052604060002080610160516020526000526040600020905080546102c05180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610160516020526000526040600020905080546102c05180820180600f0b8118611f1b57905090508155505b61030051156115df57600430602052600052604060002080610320516020526000526040600020905080546103005180820180600f0b8118611f1b5790509050815550600461012051602052600052604060002080610320516020526000526040600020905080546103005180820180600f0b8118611f1b57905090508155506004306020526000526040600020806101a0516020526000526040600020905080546103005180820380600f0b8118611f1b57905090508155506004610120516020526000526040600020806101a0516020526000526040600020905080546103005180820380600f0b8118611f1b57905090508155505b6002610120516020526000526040600020805460018101818110611f1b579050815550600361012051602052600052604060002080600261012051602052600052604060002054602052600052604060002090506102405181556102605160018201556102805160028201556102a0516003820155506101c05181526101e0516020820152610200516040820152610220516060820152608081016102405181526102605160208201526102805160408201526102a05160608201525050565b6040366060374260a0524360c05260023060205260005260406000205460e05260e051156117055760033060205260005260406000208060e0516020526000526040600020905080546060526001810154608052600281015460a052600381015460c052505b60a05161010052606051610120526080516101405260a0516101605260c0516101805260006101a0526101005142111561178e574360c051808203828111611f1b5790509050670de0b6b3a7640000810281670de0b6b3a7640000820418611f1b5790504261010051808203828111611f1b57905090508015611f1b57808204905090506101a0525b610100516040526117a06101e0611070565b6101e0516101c052600060ff905b806101e0526101c05162093a808101818110611f1b57905042808281188284100218905090506101c0526060516080516101c05161010051808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b579050905080820380600f0b8118611f1b57905090506060526080516004306020526000526040600020806101c051602052600052604060002090505480820180600f0b8118611f1b579050905060805260605180600081188260001302189050606052608051806000811882600013021890506080526101c051610100526101c05160a052610180516101a0516101c05161016051808203828111611f1b5790509050808202811583838304141715611f1b5790509050670de0b6b3a764000081049050808201828110611f1b579050905060c05260e05160018101818110611f1b57905060e052426101c05110611908574360c05261195156611946565b60033060205260005260406000208060e051602052600052604060002090506060518155608051600182015560a051600282015560c0516003820155505b6001018181186117ae575b505060e0516002306020526000526040600020556060518152608051602082015260a051604082015260c051606082015250565b61010036610420376103805115611a155761038051610120526103a051610140526103c051610160526103e05161018052610400516101a0526119c96105206111f3565b6105208051610420526020810151610440526040810151610460526060810151610480526080810180516104a05260208101516104c05260408101516104e05260608101516105005250505b611a206105a061169f565b6105a0805161052052602081015161054052604081015161056052606081015161058052506103805115611add57610540516104c0516104405180820380600f0b8118611f1b579050905080820180600f0b8118611f1b579050905061054052610520516104a0516104205180820380600f0b8118611f1b579050905080820180600f0b8118611f1b5790509050610520526105405180600081188260001302189050610540526105205180600081188260001302189050610520525b6002306020526000526040600020546105a0526003306020526000526040600020806105a0516020526000526040600020905061052051815561054051600182015561056051600282015561058051600382015550565b600060a05260805160c05260006080905b8060e05260c05160a05110611b5957611be2565b60a05160c051808201828110611f1b579050905060018101818110611f1b5790508060011c90506101005260605160036040516020526000526040600020806101005160205260005260406000209050600381019050541115611bcf576101005160018103818111611f1b57905060c052611bd7565b6101005160a0525b600101818118611b45575b505060a051815250565b600060a05260805160c05260006080905b8060e05260c05160a05110611c1157611c9a565b60a05160c051808201828110611f1b579050905060018101818110611f1b5790508060011c90506101005260605160036040516020526000526040600020806101005160205260005260406000209050600281019050541115611c87576101005160018103818111611f1b57905060c052611c8f565b6101005160a0525b600101818118611bfd575b505060a051815250565b6080516101205260a0516101405260c0516101605260e0516101805261016051604052611cd26101c0611070565b6101c0516101a052600061020a905b806101c0526101a05162093a808101818110611f1b5790506101a05260006101e052610100516101a05111611d3c5760046060516020526000526040600020806101a05160205260005260406000209050546101e052611d45565b610100516101a0525b61012051610140516101a05161016051808203828111611f1b579050905080607f1c611f1b5780820280600f0b8118611f1b579050905080820380600f0b8118611f1b579050905061012052610100516101a05118611da357611dd3565b610140516101e05180820180600f0b8118611f1b5790509050610140526101a05161016052600101818118611ce1575b505061012051806000811882600013021890506101205261012051815261014051602082015261016051604082015261018051606082015250565b6002610200516020526000526040600020546102405261024051611e36576000815250611f19565b426102205114611e6957610200516040526102205160605261024051608052611e60610260611bec565b61026051610240525b600361020051602052600052604060002080610240516020526000526040600020905080546102605260018101546102805260028101546102a05260038101546102c0525061020051606052610260516080526102805160a0526102a05160c0526102c05160e0526102205161010052611ee46102e0611ca4565b6102e080516102605260208101516102805260408101516102a05260608101516102c052506102605160008112611f1b578152505b565b600080fda165767970657283000307000b0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000b287a1964aee422911c7b8409f5e5a273c1412fa

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

0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000b287a1964aee422911c7b8409f5e5a273c1412fa

-----Decoded View---------------
Arg [0] : token (address): 0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e
Arg [1] : reward_pool (address): 0xb287a1964AEE422911c7b8409f5E5A273c1412fA

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [1] : 000000000000000000000000b287a1964aee422911c7b8409f5e5a273c1412fa


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.