ETH Price: $3,992.50 (+2.24%)

Contract

0x90c1f9220d90d3966FbeE24045EDd73E1d588aD5
 
Transaction Hash
Method
Block
From
To
Withdraw213467322024-12-06 23:27:355 hrs ago1733527655IN
Yearn: Voting YFI
0 ETH0.0038008318.2
Modify_lock213404182024-12-06 2:17:2326 hrs ago1733451443IN
Yearn: Voting YFI
0 ETH0.0045950715.71524582
Withdraw213351952024-12-05 8:46:5943 hrs ago1733388419IN
Yearn: Voting YFI
0 ETH0.0058882718.54382601
Withdraw213008162024-11-30 13:33:236 days ago1732973603IN
Yearn: Voting YFI
0 ETH0.001876178.30395397
Modify_lock212955882024-11-29 19:59:237 days ago1732910363IN
Yearn: Voting YFI
0 ETH0.003353729.94683095
Withdraw212955762024-11-29 19:56:597 days ago1732910219IN
Yearn: Voting YFI
0 ETH0.0024180410.70228523
Modify_lock212917162024-11-29 6:58:477 days ago1732863527IN
Yearn: Voting YFI
0 ETH0.001716146.1272658
Modify_lock212901402024-11-29 1:41:358 days ago1732844495IN
Yearn: Voting YFI
0 ETH0.001452975.18785981
Modify_lock212854192024-11-28 9:51:238 days ago1732787483IN
Yearn: Voting YFI
0 ETH0.001862556.65
Modify_lock212853782024-11-28 9:43:118 days ago1732786991IN
Yearn: Voting YFI
0 ETH0.002095147.05
Withdraw212839312024-11-28 4:43:118 days ago1732768991IN
Yearn: Voting YFI
0 ETH0.001515527.25699512
Modify_lock212362412024-11-21 12:55:4715 days ago1732193747IN
Yearn: Voting YFI
0 ETH0.009606330.5645082
Withdraw212125682024-11-18 5:39:4718 days ago1731908387IN
Yearn: Voting YFI
0 ETH0.002198579.73092745
Modify_lock212036522024-11-16 23:49:3520 days ago1731800975IN
Yearn: Voting YFI
0 ETH0.002764858.2
Modify_lock211996662024-11-16 10:29:3520 days ago1731752975IN
Yearn: Voting YFI
0 ETH0.0038623410.53
Withdraw211685842024-11-12 2:20:4725 days ago1731378047IN
Yearn: Voting YFI
0 ETH0.0067751828.8493766
Withdraw211599502024-11-10 21:26:3526 days ago1731273995IN
Yearn: Voting YFI
0 ETH0.0056537825.02373432
Withdraw211566462024-11-10 10:23:3526 days ago1731234215IN
Yearn: Voting YFI
0 ETH0.0028357412.55103808
Modify_lock211159912024-11-04 18:11:2332 days ago1730743883IN
Yearn: Voting YFI
0 ETH0.002089596.02618243
Modify_lock210981232024-11-02 6:18:4734 days ago1730528327IN
Yearn: Voting YFI
0 ETH0.001057243.77473034
Modify_lock210979452024-11-02 5:43:1134 days ago1730526191IN
Yearn: Voting YFI
0 ETH0.000900563.27141182
Modify_lock210979412024-11-02 5:42:2334 days ago1730526143IN
Yearn: Voting YFI
0 ETH0.000996163.73517762
Withdraw210871212024-10-31 17:29:2336 days ago1730395763IN
Yearn: Voting YFI
0 ETH0.0057719718.17757344
Modify_lock210710072024-10-29 11:31:1138 days ago1730201471IN
Yearn: Voting YFI
0 ETH0.00217327.89407297
Modify_lock210588842024-10-27 18:53:3540 days ago1730055215IN
Yearn: Voting YFI
0 ETH0.002370227.29656321
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:
default evmVersion, 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.