ETH Price: $2,375.55 (+2.71%)

Contract

0x6b5f15E939C8d797E6bd8D5fFda24eDeC655D08d

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
715332182023-03-19 19:45:571050 days ago1679255157
0x6b5f15E9...eC655D08d
0 ETH
715332182023-03-19 19:45:571050 days ago1679255157
0x6b5f15E9...eC655D08d
0 ETH
715332182023-03-19 19:45:571050 days ago1679255157
0x6b5f15E9...eC655D08d
0 ETH
715332182023-03-19 19:45:571050 days ago1679255157
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
711098492023-03-18 13:58:231052 days ago1679147903
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
705895862023-03-17 1:43:311053 days ago1679017411
0x6b5f15E9...eC655D08d
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.15

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.2.15
"""
@title Mirrored Voting Escrow
@author Hundred Finance
@license MIT
"""

interface VotingEscrow:
    def user_point_epoch(_user: address) -> uint256: view
    def get_last_user_slope(_addr: address) -> int128: view
    def user_point_history__ts(_addr: address, _idx: uint256) -> uint256: view
    def locked__end(_addr: address) -> uint256: view
    def totalSupply(_t: uint256) -> uint256: view
    def balanceOf(_addr: address, _t: uint256) -> uint256: view
    def decimals() -> uint256: view

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

struct LockedBalance:
    amount: int128
    end: uint256

struct MirroredChain:
    chain_id: uint256
    escrow_count: uint256

event MirrorLock:
    provider: indexed(address)
    chain_id: uint256
    escrow_id: uint256
    value: uint256
    locktime: indexed(uint256)

event CommitOwnership:
    admin: address

event ApplyOwnership:
    admin: address

event SetMirrorWhitelist:
    addr: address
    is_whitelisted: bool

event AddVotingEscrow:
    addr: address

admin: public(address)
future_admin: public(address)

whitelisted_mirrors: public(HashMap[address, bool])

voting_escrow_count: public(uint256)
voting_escrows: public(address[100])

mirrored_chains_count: public(uint256)
mirrored_chains: public(MirroredChain[100])

# user -> chain -> escrow_id -> lock
mirrored_locks: public(HashMap[address, HashMap[uint256, HashMap[uint256, LockedBalance]]])

# user -> chain -> escrow_id -> Point[user_epoch]
mirrored_user_point_history: public(HashMap[address, HashMap[uint256, HashMap[uint256, Point[1000000000]]]])
mirrored_user_point_epoch: public(HashMap[address, HashMap[uint256, HashMap[uint256, uint256]]])

mirrored_epoch: public(uint256)
mirrored_point_history: public(Point[100000000000000000000000000000])  # epoch -> unsigned point
mirrored_slope_changes: public(HashMap[uint256, int128])  # time -> signed slope change

name: public(String[64])
symbol: public(String[32])
version: public(String[32])
decimals: public(uint256)

WEEK: constant(uint256) = 7 * 86400  # all future times are rounded by week
MAXTIME: constant(uint256) = 4 * 365 * 86400  # 4 years
MULTIPLIER: constant(uint256) = 10 ** 18

@external
def __init__(_admin: address, _voting_escrow: address, _name: String[64], _symbol: String[32], _version: String[32]):
    self.admin = _admin

    self.name = _name
    self.symbol = _symbol
    self.version = _version
    self.decimals = VotingEscrow(_voting_escrow).decimals()

    self.voting_escrows[0] = _voting_escrow
    self.voting_escrow_count = 1


@internal
def _checkpoint(addr: address, _chain: uint256, _escrow_id: uint256, old_locked: LockedBalance, new_locked: LockedBalance):
    """
    @notice Record global and per-user data to checkpoint
    @param addr User's wallet address. No user checkpoint if 0x0
    @param old_locked Pevious locked amount / end lock time for the user
    @param new_locked New locked amount / end lock time for the user
    """
    u_old: Point = empty(Point)
    u_new: Point = empty(Point)
    old_dslope: int128 = 0
    new_dslope: int128 = 0
    _epoch: uint256 = self.mirrored_epoch

    if addr != ZERO_ADDRESS:
        # Calculate slopes and biases
        # Kept at zero when they have to
        if old_locked.end > block.timestamp and old_locked.amount > 0:
            u_old.slope = old_locked.amount / MAXTIME
            u_old.bias = u_old.slope * convert(old_locked.end - block.timestamp, int128)
        if new_locked.end > block.timestamp and new_locked.amount > 0:
            u_new.slope = new_locked.amount / MAXTIME
            u_new.bias = u_new.slope * convert(new_locked.end - block.timestamp, int128)

        # Read values of scheduled changes in the slope
        # old_locked.end can be in the past and in the future
        # new_locked.end can ONLY by in the FUTURE unless everything expired: than zeros
        old_dslope = self.mirrored_slope_changes[old_locked.end]
        if new_locked.end != 0:
            if new_locked.end == old_locked.end:
                new_dslope = old_dslope
            else:
                new_dslope = self.mirrored_slope_changes[new_locked.end]

    last_point: Point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number})
    if _epoch > 0:
        last_point = self.mirrored_point_history[_epoch]
    last_checkpoint: uint256 = last_point.ts
    # initial_last_point is used for extrapolation to calculate block number
    # (approximately, for *At methods) and save them
    # as we cannot figure that out exactly from inside the contract
    initial_last_point: Point = last_point
    block_slope: uint256 = 0  # dblock/dt
    if block.timestamp > last_point.ts:
        block_slope = MULTIPLIER * (block.number - last_point.blk) / (block.timestamp - last_point.ts)
    # If last point is already recorded in this block, slope=0
    # But that's ok b/c we know the block in such case

    # Go over weeks to fill history and calculate what the current point is
    t_i: uint256 = (last_checkpoint / WEEK) * WEEK
    for i in range(255):
        # Hopefully it won't happen that this won't get used in 5 years!
        # If it does, users will be able to withdraw but vote weight will be broken
        t_i += WEEK
        d_slope: int128 = 0
        if t_i > block.timestamp:
            t_i = block.timestamp
        else:
            d_slope = self.mirrored_slope_changes[t_i]
        last_point.bias -= last_point.slope * convert(t_i - last_checkpoint, int128)
        last_point.slope += d_slope
        if last_point.bias < 0:  # This can happen
            last_point.bias = 0
        if last_point.slope < 0:  # This cannot happen - just in case
            last_point.slope = 0
        last_checkpoint = t_i
        last_point.ts = t_i
        last_point.blk = initial_last_point.blk + block_slope * (t_i - initial_last_point.ts) / MULTIPLIER
        _epoch += 1
        if t_i == block.timestamp:
            last_point.blk = block.number
            break
        else:
            self.mirrored_point_history[_epoch] = last_point

    self.mirrored_epoch = _epoch
    # Now point_history is filled until t=now

    if addr != ZERO_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 += (u_new.slope - u_old.slope)
        last_point.bias += (u_new.bias - u_old.bias)
        if last_point.slope < 0:
            last_point.slope = 0
        if last_point.bias < 0:
            last_point.bias = 0

    # Record the changed point into history
    self.mirrored_point_history[_epoch] = last_point

    if addr != ZERO_ADDRESS:
        # Schedule the slope changes (slope is going down)
        # We subtract new_user_slope from [new_locked.end]
        # and add old_user_slope to [old_locked.end]
        if old_locked.end > block.timestamp:
            # old_dslope was <something> - u_old.slope, so we cancel that
            old_dslope += u_old.slope
            if new_locked.end == old_locked.end:
                old_dslope -= u_new.slope  # It was a new deposit, not extension
            self.mirrored_slope_changes[old_locked.end] = old_dslope

        if new_locked.end > block.timestamp:
            if new_locked.end > old_locked.end:
                new_dslope -= u_new.slope  # old slope disappeared at this point
                self.mirrored_slope_changes[new_locked.end] = new_dslope
            # else: we recorded it already in old_dslope

        # Now handle user history
        user_epoch: uint256 = self.mirrored_user_point_epoch[addr][_chain][_escrow_id] + 1

        self.mirrored_user_point_epoch[addr][_chain][_escrow_id] = user_epoch
        u_new.ts = block.timestamp
        u_new.blk = block.number
        self.mirrored_user_point_history[addr][_chain][_escrow_id][user_epoch] = u_new


@external
def mirror_lock(_user: address, _chain: uint256, _escrow_id: uint256, _value: uint256, _unlock_time: uint256):
    assert self.whitelisted_mirrors[msg.sender] == True # dev: only whitelisted address can mirror locks

    old_locked: LockedBalance = self.mirrored_locks[_user][_chain][_escrow_id]

    new_locked: LockedBalance = empty(LockedBalance)
    new_locked.amount = convert(_value, int128)
    new_locked.end = _unlock_time

    self.mirrored_locks[_user][_chain][_escrow_id] = new_locked

    chain_already_mirrored: bool = False
    for i in range(99):
        if i >= self.mirrored_chains_count:
            break

        if self.mirrored_chains[i].chain_id == _chain:
            chain_already_mirrored = True
            self.mirrored_chains[i].escrow_count = max(self.mirrored_chains[i].escrow_count, _escrow_id + 1)

            break
    
    if not chain_already_mirrored:
        self.mirrored_chains[self.mirrored_chains_count] = empty(MirroredChain)
        self.mirrored_chains[self.mirrored_chains_count].chain_id = _chain
        self.mirrored_chains[self.mirrored_chains_count].escrow_count = _escrow_id + 1

        self.mirrored_chains_count += 1
    
    self._checkpoint(_user, _chain, _escrow_id, old_locked, new_locked)

    log MirrorLock(_user, _chain, _escrow_id, _value, _unlock_time)


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


@external
@view
def user_point_epoch(_user: address, _chain: uint256 = 0, _escrow_id: uint256 = 0) -> uint256:
    if _chain == 0:
        return VotingEscrow(self.voting_escrows[_escrow_id]).user_point_epoch(_user)

    return self.mirrored_user_point_epoch[_user][_chain][_escrow_id]
    

@external
@view
def user_point_history__ts(_addr: address, _idx: uint256, _chain: uint256 = 0, _escrow_id: uint256 = 0) -> uint256:
    if _chain == 0:
        return VotingEscrow(self.voting_escrows[_escrow_id]).user_point_history__ts(_addr, _idx)

    return self.mirrored_user_point_history[_addr][_chain][_escrow_id][_idx].ts


@external
@view
def user_last_checkpoint_ts(_user: address) -> uint256:
    _epoch: uint256 = 0
    _ts: uint256 = 0

    for i in range(99):
        if i >= self.voting_escrow_count:
            break

        _escrow_epoch: uint256 = VotingEscrow(self.voting_escrows[i]).user_point_epoch(_user)
        _escrow_ts: uint256 = VotingEscrow(self.voting_escrows[i]).user_point_history__ts(_user, _epoch)

        if _escrow_ts < _ts or _ts == 0:
            _ts = _escrow_ts

    for i in range(99):
        if i >= self.mirrored_chains_count:
            break

        _chain: MirroredChain = self.mirrored_chains[i]

        for j in range(499):
            if j >= _chain.escrow_count:
                break

            _escrow_epoch: uint256 = self.mirrored_user_point_epoch[_user][_chain.chain_id][j]
            _escrow_ts: uint256 = self.mirrored_user_point_history[_user][_chain.chain_id][j][_escrow_epoch].ts

            if _escrow_ts < _ts or _ts == 0:
                _ts = _escrow_ts
    
    return _ts


@internal
@view
def mirrored_supply_at(point: Point, t: uint256) -> uint256:
    """
    @notice Calculate total voting power at some point in the past
    @param point The point (bias/slope) to start search from
    @param t Time to calculate the total voting power at
    @return Total voting power at that time
    """
    last_point: Point = point
    t_i: uint256 = (last_point.ts / WEEK) * WEEK
    for i in range(255):
        t_i += WEEK
        d_slope: int128 = 0
        if t_i > t:
            t_i = t
        else:
            d_slope = self.mirrored_slope_changes[t_i]
        last_point.bias -= last_point.slope * convert(t_i - last_point.ts, int128)
        if t_i == t:
            break
        last_point.slope += d_slope
        last_point.ts = t_i

    if last_point.bias < 0:
        last_point.bias = 0
    return convert(last_point.bias, uint256)


@external
@view
def total_mirrored_supply(t: uint256 = block.timestamp) -> uint256:
    """
    @notice Calculate total voting power
    @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility
    @return Total voting power
    """
    _epoch: uint256 = self.mirrored_epoch
    last_point: Point = self.mirrored_point_history[_epoch]
    return self.mirrored_supply_at(last_point, t)


@external
@view
def totalSupply(_t: uint256 = block.timestamp) -> uint256:
    _local_supply: uint256 = 0

    for i in range(99):
        if i >= self.voting_escrow_count:
            break

        _local_supply += VotingEscrow(self.voting_escrows[i]).totalSupply(_t)

    _epoch: uint256 = self.mirrored_epoch
    _last_point: Point = self.mirrored_point_history[_epoch]
    _mirrored_supply: uint256 = self.mirrored_supply_at(_last_point, _t)

    return _local_supply + _mirrored_supply


@internal
@view
def _mirrored_balance_of(addr: address, _t: uint256) -> uint256:
    _chain_count: uint256 = self.mirrored_chains_count
    _mirrored_balance: uint256 = 0

    for i in range(99):
        if i >= _chain_count:
            break

        _chain: MirroredChain = self.mirrored_chains[i]

        for j in range(499):
            if j >= _chain.escrow_count:
                break

            _escrow_epoch: uint256 = self.mirrored_user_point_epoch[addr][_chain.chain_id][j]
            if _escrow_epoch > 0:
                _last_point: Point = self.mirrored_user_point_history[addr][_chain.chain_id][j][_escrow_epoch]
                _last_point.bias -= _last_point.slope * convert(_t - _last_point.ts, int128)
                if _last_point.bias < 0:
                    _last_point.bias = 0
                _mirrored_balance += convert(_last_point.bias, uint256)

    return _mirrored_balance


@external
@view
def balanceOf(_addr: address, _t: uint256 = block.timestamp) -> uint256:
    _local_balance: uint256 = 0
    for i in range(99):
        if i >= self.voting_escrow_count:
            break

        _local_balance += VotingEscrow(self.voting_escrows[i]).balanceOf(_addr, _t)

    _mirrored_balance: uint256 = self._mirrored_balance_of(_addr, _t)

    return _local_balance + _mirrored_balance


@external
@view
def mirrored_balance_of(addr: address, _t: uint256) -> uint256:
    return self._mirrored_balance_of(addr, _t)


@external
@view
def locked__end(_addr: address, _chain: uint256 = 0, _escrow_id: uint256 = 0) -> uint256:

    if _chain == 0:
        return VotingEscrow(self.voting_escrows[_escrow_id]).locked__end(_addr)

    return self.mirrored_locks[_addr][_chain][_escrow_id].end


@external
@view
def nearest_locked__end(_addr: address) -> uint256:
    _lock_end: uint256 = 0

    for i in range(99):
        if i >= self.voting_escrow_count:
            break

        _escrow_lock_end: uint256 = VotingEscrow(self.voting_escrows[i]).locked__end(_addr)
        if _escrow_lock_end < _lock_end or _lock_end == 0:
            _lock_end = _escrow_lock_end

    _chain_count: uint256 = self.mirrored_chains_count
    for i in range(99):
        if i >= _chain_count:
            break
        
        _chain: MirroredChain = self.mirrored_chains[i]
        for j in range(499):
            if j >= _chain.escrow_count:
                break

            _escrow_lock_end: uint256 = self.mirrored_locks[_addr][_chain.chain_id][j].end
            if _escrow_lock_end != 0 and (_escrow_lock_end < _lock_end or _lock_end == 0):
                _lock_end = _escrow_lock_end
    
    return _lock_end

@external
@view
def get_last_user_slope(_addr: address, _chain: uint256 = 0, _escrow_id: uint256 = 0) -> int128:
    if _chain == 0:
        return VotingEscrow(self.voting_escrows[_escrow_id]).get_last_user_slope(_addr)
    
    _chain_uepoch: uint256 = self.mirrored_user_point_epoch[_addr][_chain][_escrow_id]
    return self.mirrored_user_point_history[_addr][_chain][_escrow_id][_chain_uepoch].slope


@external
def commit_transfer_ownership(addr: address):
    """
    @notice Transfer ownership to `addr`
    @param addr Address to have ownership transferred to
    """
    assert msg.sender == self.admin  # dev: admin only
    self.future_admin = addr
    log CommitOwnership(addr)


@external
def apply_transfer_ownership():
    """
    @notice Apply pending ownership transfer
    """
    assert msg.sender == self.admin  # dev: admin only
    _admin: address = self.future_admin
    assert _admin != ZERO_ADDRESS  # dev: admin not set
    self.admin = _admin
    log ApplyOwnership(_admin)


@external
def set_mirror_whitelist(_addr: address, _is_whitelisted: bool):
    assert msg.sender == self.admin # dev: only admin

    self.whitelisted_mirrors[_addr] = _is_whitelisted
    log SetMirrorWhitelist(_addr, _is_whitelisted)


@external
def add_voting_escrow(_addr: address):
    assert msg.sender == self.admin # dev: only admin

    self.voting_escrows[self.voting_escrow_count] = _addr
    self.voting_escrow_count += 1
    log AddVotingEscrow(_addr)

Contract Security Audit

Contract ABI

API
[{"name":"MirrorLock","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"chain_id","type":"uint256","indexed":false},{"name":"escrow_id","type":"uint256","indexed":false},{"name":"value","type":"uint256","indexed":false},{"name":"locktime","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetMirrorWhitelist","inputs":[{"name":"addr","type":"address","indexed":false},{"name":"is_whitelisted","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddVotingEscrow","inputs":[{"name":"addr","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_admin","type":"address"},{"name":"_voting_escrow","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_version","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"mirror_lock","inputs":[{"name":"_user","type":"address"},{"name":"_chain","type":"uint256"},{"name":"_escrow_id","type":"uint256"},{"name":"_value","type":"uint256"},{"name":"_unlock_time","type":"uint256"}],"outputs":[],"gas":41811079},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[],"gas":37425044},{"stateMutability":"view","type":"function","name":"user_point_epoch","inputs":[{"name":"_user","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_point_epoch","inputs":[{"name":"_user","type":"address"},{"name":"_chain","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_point_epoch","inputs":[{"name":"_user","type":"address"},{"name":"_chain","type":"uint256"},{"name":"_escrow_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_point_history__ts","inputs":[{"name":"_addr","type":"address"},{"name":"_idx","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_point_history__ts","inputs":[{"name":"_addr","type":"address"},{"name":"_idx","type":"uint256"},{"name":"_chain","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_point_history__ts","inputs":[{"name":"_addr","type":"address"},{"name":"_idx","type":"uint256"},{"name":"_chain","type":"uint256"},{"name":"_escrow_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"user_last_checkpoint_ts","inputs":[{"name":"_user","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":261346662},{"stateMutability":"view","type":"function","name":"total_mirrored_supply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"total_mirrored_supply","inputs":[{"name":"t","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":"_t","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"_addr","type":"address"},{"name":"_t","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"mirrored_balance_of","inputs":[{"name":"addr","type":"address"},{"name":"_t","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":628686267},{"stateMutability":"view","type":"function","name":"locked__end","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked__end","inputs":[{"name":"_addr","type":"address"},{"name":"_chain","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked__end","inputs":[{"name":"_addr","type":"address"},{"name":"_chain","type":"uint256"},{"name":"_escrow_id","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"nearest_locked__end","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":138077599},{"stateMutability":"view","type":"function","name":"get_last_user_slope","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"get_last_user_slope","inputs":[{"name":"_addr","type":"address"},{"name":"_chain","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"get_last_user_slope","inputs":[{"name":"_addr","type":"address"},{"name":"_chain","type":"uint256"},{"name":"_escrow_id","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":39255},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":41394},{"stateMutability":"nonpayable","type":"function","name":"set_mirror_whitelist","inputs":[{"name":"_addr","type":"address"},{"name":"_is_whitelisted","type":"bool"}],"outputs":[],"gas":40121},{"stateMutability":"nonpayable","type":"function","name":"add_voting_escrow","inputs":[{"name":"_addr","type":"address"}],"outputs":[],"gas":78781},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2868},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2898},{"stateMutability":"view","type":"function","name":"whitelisted_mirrors","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":3143},{"stateMutability":"view","type":"function","name":"voting_escrow_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2958},{"stateMutability":"view","type":"function","name":"voting_escrows","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3033},{"stateMutability":"view","type":"function","name":"mirrored_chains_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3018},{"stateMutability":"view","type":"function","name":"mirrored_chains","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"chain_id","type":"uint256"},{"name":"escrow_count","type":"uint256"}],"gas":5483},{"stateMutability":"view","type":"function","name":"mirrored_locks","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"uint256"}],"outputs":[{"name":"amount","type":"int128"},{"name":"end","type":"uint256"}],"gas":5913},{"stateMutability":"view","type":"function","name":"mirrored_user_point_history","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"uint256"},{"name":"arg3","type":"uint256"}],"outputs":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}],"gas":10408},{"stateMutability":"view","type":"function","name":"mirrored_user_point_epoch","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3583},{"stateMutability":"view","type":"function","name":"mirrored_epoch","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3168},{"stateMutability":"view","type":"function","name":"mirrored_point_history","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}],"gas":10053},{"stateMutability":"view","type":"function","name":"mirrored_slope_changes","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"int128"}],"gas":3343},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":13488},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":11241},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":11271},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3348}]

6f7fffffffffffffffffffffffffffffff60405260a06125c66101403960206125c660c03960c05160a01c6125c157602060206125c60160c03960c05160a01c6125c1576060602060406125c60160c03960c0516125c6016101e0396040602060406125c60160c03960c05160040135116125c1576040602060606125c60160c03960c0516125c601610260396020602060606125c60160c03960c05160040135116125c1576040602060806125c60160c03960c0516125c6016102c0396020602060806125c60160c03960c05160040135116125c157610140516000556101e0806c050c783eb9b5c8400000000136602082510161012060006003818352015b8261012051602002111561011357610135565b61012051602002850151610120518501555b8151600101808352811415610100575b505050505050610260806c050c783eb9b5c840000000013a602082510161012060006002818352015b8261012051602002111561017157610193565b61012051602002850151610120518501555b815160010180835281141561015e575b5050505050506102c0806c050c783eb9b5c840000000013d602082510161012060006002818352015b826101205160200211156101cf576101f1565b61012051602002850151610120518501555b81516001018083528114156101bc575b5050505050506020610380600463313ce5676103205261033c610160515afa156125c157601f3d11156125c157600050610380516c050c783eb9b5c8400000000140556101605160045560016003556125a956600436101561000d57611783565b600035601c526f7fffffffffffffffffffffffffffffff6040526000513461235f57633ad9b9678114156102f85760043560a01c61235f57600160023360e05260c052604060c02054141561235f5761014061013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0208054825260018101548260200152505060403661018037606435604051811161235f57610180526084356101a05261013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0206101808051825580602001516001830155505060006101c0526101e060006063818352015b6068546101e0511061011d576101ad565b60243560026101e051606481101561235f570260690154141561019c5760016101c052600160026101e051606481101561235f570260690101546044356001818183011061235f57808201905090508082101561017a578061017c565b815b90509050600160026101e051606481101561235f570260690101556101ad565b5b815160010180835281141561010c575b50506101c051610230576002606854606481101561235f57026069016000815560006001820155506024356002606854606481101561235f5702606901556044356001818183011061235f578082019050905060016002606854606481101561235f57026069010155606880546001818183011061235f57808201905090508155505b6101405161016051610180516101a0516101c051606060046101e03761024061014080518252806020015182602001525050610280610180805182528060200151826020015250506102a05161028051610260516102405161022051610200516101e05160065801611789565b6101c0526101a0526101805261016052610140526000506024356101e05260443561020052606435610220526084356004357ffc4ec19a3e0de16df8e3fbafa186f184ea96ecb19fd948f7044d88402597361160606101e0a3005b63c2c4c5c181141561038f5760403661014037604036610180376101405161016051610180516101a0516060366101c037610220610140805182528060200151826020015250506102606101808051825280602001518260200152505061028051610260516102405161022051610200516101e0516101c05160065801611789565b6101a052610180526101605261014052600050005b63010ae7578114156103ac576000610140526000610160526103f7565b63e55f04608114156103ce5760006101605260206024610140376000506103f7565b638c970b0b8114156103f257602060246101403760206044610160376000506103f7565b610490565b60043560a01c61235f5761014051610457576020610200602463010ae757610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b61013360043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c0205460005260206000f35b63da020a188114156104ad576000610140526000610160526104f8565b634cf702a08114156104cf5760006101605260206044610140376000506104f8565b63de4842c98114156104f357602060446101403760206064610160376000506104f8565b6105a8565b60043560a01c61235f5761014051610559576020610220604463da020a1861018052604060046101a03761019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102205160005260206000f35b60026004602435633b9aca0081101561235f570261013260043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02001015460005260206000f35b6380c0e83e8114156107f75760043560a01c61235f576040366101403761018060006063818352015b60035461018051106105e2576106b7565b6020610240602463010ae7576101c0526004356101e0526101dc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610240516101a0526020610280604463da020a186101e0526004356102005261014051610220526101fc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610280516101c052610160516101c0511015610691576001610697565b61016051155b5b156106a6576101c051610160525b5b81516001018083528114156105d1575b505061018060006063818352015b60685461018051106106d6576107e8565b6101a0600261018051606481101561235f5702606901805482526001810154826020015250506101e060006101f3818352015b6101c0516101e0511061071b576107d5565b61013360043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c02054610200526002600461020051633b9aca0081101561235f570261013260043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c02001015461022052610160516102205110156107af5760016107b5565b61016051155b5b156107c45761022051610160525b5b8151600101808352811415610709575b50505b81516001018083528114156106c5575b50506101605160005260206000f35b63b73b512181141561080d57426101405261082e565b63a37198fa81141561082957602060046101403760005061082e565b61090d565b61013454610160526101806004610160516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250506101405161016051610180516101a0516101c0516101e0516102006101808051825280602001518260200152806040015182604001528060600151826060015250506101405161028052610280516102605161024051610220516102005160065801611fa1565b6102e0526101e0526101c0526101a0526101805261016052610140526102e05160005260206000f35b6318160ddd811415610923574261014052610944565b63bd85b03981141561093f576020600461014037600050610944565b610ae3565b60006101605261018060006063818352015b6003546101805110610967576109d6565b61016080516020610220602463bd85b0396101a052610140516101c0526101bc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f5760005061022051818183011061235f57808201905090508152505b8151600101808352811415610956575b505061013454610180526101a06004610180516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102406101a0805182528060200151826020015280604001518260400152806060015182606001525050610140516102c0526102c0516102a05161028051610260516102405160065801611fa1565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101605161022051818183011061235f578082019050905060005260206000f35b6370a08231811415610af9574261014052610b19565b62fdd58e811415610b14576020602461014037600050610b19565b610c22565b60043560a01c61235f5760006101605261018060006063818352015b6003546101805110610b4657610bbb565b61016080516020610240604462fdd58e6101a0526004356101c052610140516101e0526101bc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f5760005061024051818183011061235f57808201905090508152505b8151600101808352811415610b35575b50506101405161016051610180516004356101a052610140516101c0526101c0516101a05160065801612164565b6102205261018052610160526101405261022051610180526101605161018051818183011061235f578082019050905060005260206000f35b63b76e6044811415610c685760043560a01c61235f576004356101405260243561016052610160516101405160065801612164565b6101c0526101c05160005260206000f35b63adc63589811415610c8557600061014052600061016052610cd0565b63f0914f4a811415610ca7576000610160526020602461014037600050610cd0565b63cca604d2811415610ccb5760206024610140376020604461016037600050610cd0565b610d6c565b60043560a01c61235f5761014051610d30576020610200602463adc63589610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b600161013160043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c020015460005260206000f35b63afe8dbd1811415610f3d5760043560a01c61235f5760006101405261016060006063818352015b6003546101605110610da557610e29565b6020610220602463adc635896101a0526004356101c0526101bc600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610220516101805261014051610180511015610e03576001610e09565b61014051155b5b15610e185761018051610140525b5b8151600101808352811415610d94575b50506068546101605261018060006063818352015b610160516101805110610e5057610f2e565b6101a0600261018051606481101561235f5702606901805482526001810154826020015250506101e060006101f3818352015b6101c0516101e05110610e9557610f1b565b600161013160043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c0200154610200526000610200511815610ef95761014051610200511015610eed576001610ef3565b61014051155b5b610efc565b60005b15610f0a5761020051610140525b5b8151600101808352811415610e83575b50505b8151600101808352811415610e3e575b50506101405160005260206000f35b637c74a174811415610f5a57600061014052600061016052610fa5565b63c422abe0811415610f7c576000610160526020602461014037600050610fa5565b633e7e92cf811415610fa05760206024610140376020604461016037600050610fa5565b611089565b60043560a01c61235f57610140516110055760206102006024637c74a174610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b61013360043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02054610180526001600461018051633b9aca0081101561235f570261013260043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02001015460005260206000f35b636b441a408114156110df5760043560a01c61235f5760005433141561235f57600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae8114156111405760005433141561235f5760015461014052600061014051181561235f576101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b63b4027b048114156111b55760043560a01c61235f5760243560011c61235f5760005433141561235f57602435600260043560e05260c052604060c0205560043561014052602435610160527fc2a4c21ce00cc344718078afc8a2fb244cf57e2cd182e6870f443813408c51196040610140a1005b63ec7b5cda8114156112345760043560a01c61235f5760005433141561235f576004356001600354606481101561235f570260040155600380546001818183011061235f5780820190509050815550600435610140527fcb28779aca1175c330a0dc64a20ac1713e3d984f3e25ab20408e5d7614b6e6bc6020610140a1005b63f851a44081141561124c5760005460005260206000f35b6317f7182a8114156112645760015460005260206000f35b632e98f2668114156112945760043560a01c61235f57600260043560e05260c052604060c0205460005260206000f35b63730762b88114156112ac5760035460005260206000f35b63556e5f4f8114156112d4576001600435606481101561235f57026004015460005260206000f35b63f1d90a158114156112ec5760685460005260206000f35b6327294447811415611338576002600435606481101561235f5702606901610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63c32367978114156113a95760043560a01c61235f5761013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63bfac6b3e81141561144f5760043560a01c61235f576004606435633b9aca0081101561235f570261013260043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0200161014080808084548152505060208101905080806001850154815250506020810190508080600285015481525050602081019050808060038501548152505060809050905060c05260c051610140f35b638f472cbb81141561149c5760043560a01c61235f5761013360043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0205460005260206000f35b63a9605a028114156114b5576101345460005260206000f35b630640490f8114156115305760046004356c01431e0fae6d7217caa000000081101561235f57026101350161014080808084548152505060208101905080806001850154815250506020810190508080600285015481525050602081019050808060038501548152505060809050905060c05260c051610140f35b639cc776bd811415611562576c050c783eb9b5c840000000013560043560e05260c052604060c0205460005260206000f35b6306fdde0381141561160b576c050c783eb9b5c840000000013680610180602082540161012060006003818352015b826101205160200211156115a4576115c6565b61012051850154610120516020028501525b8151600101808352811415611591575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6395d89b418114156116b4576c050c783eb9b5c840000000013a80610180602082540161012060006002818352015b8261012051602002111561164d5761166f565b61012051850154610120516020028501525b815160010180835281141561163a575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6354fd4d5081141561175d576c050c783eb9b5c840000000013d80610180602082540161012060006002818352015b826101205160200211156116f657611718565b61012051850154610120516020028501525b81516001018083528114156116e3575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63313ce567811415611781576c050c783eb9b5c84000000001405460005260206000f35b505b60006000fd5b610220526101405261016052610180526101a0526101c0526101e0526102005261014036610240376101345461038052600061014051181561194957426101c05111156117dc5760006101a051136117df565b60005b15611850576101a051630784ce00808205808060008112156117fd57195b607f1c61235f5790509050905061026052610260516101c0514280821061235f5780820390509050604051811161235f578082028080600081121561183e57195b607f1c61235f57905090509050610240525b426102005111156118675760006101e0511361186a565b60005b156118db576101e051630784ce008082058080600081121561188857195b607f1c61235f579050905090506102e0526102e051610200514280821061235f5780820390509050604051811161235f57808202808060008112156118c957195b607f1c61235f579050905090506102c0525b6c050c783eb9b5c84000000001356101c05160e05260c052604060c02054610340526000610200511815611948576101c051610200511415611924576103405161036052611947565b6c050c783eb9b5c84000000001356102005160e05260c052604060c02054610360525b5b5b6103a060008152600081602001524281604001524381606001525060006103805111156119b8576103a06004610380516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250505b6103e051610420526104406103a080518252806020015182602001528060400151826040015280606001518260600152505060006104c0526103e051421115611a5357670de0b6b3a7640000436104005180821061235f578082039050905080820282158284830414171561235f5780905090509050426103e05180821061235f578082039050905080801561235f578204905090506104c0525b6104205162093a808082049050905062093a8080820282158284830414171561235f57809050905090506104e052610500600060ff818352015b6104e0805162093a80818183011061235f5780820190509050815250600061052052426104e0511115611ac457426104e052611ae7565b6c050c783eb9b5c84000000001356104e05160e05260c052604060c02054610520525b6103a080516103c0516104e0516104205180821061235f5780820390509050604051811161235f5780820280806000811215611b1f57195b607f1c61235f5790509050905080820380806000811215611b3c57195b607f1c61235f579050905090508152506103c080516105205180820180806000811215611b6557195b607f1c61235f5790509050905081525060006103a0511215611b885760006103a0525b60006103c0511215611b9b5760006103c0525b6104e051610420526104e0516103e0526104a0516104c0516104e0516104805180821061235f578082039050905080820282158284830414171561235f5780905090509050670de0b6b3a764000080820490509050818183011061235f57808201905090506104005261038080516001818183011061235f5780820190509050815250426104e0511415611c37574361040052611c9056611c7f565b6004610380516c01431e0fae6d7217caa000000081101561235f5702610135016103a08051825580602001516001830155806040015160028301558060600151600383015550505b5b8151600101808352811415611a8d575b505061038051610134556000610140511815611d61576103c080516102e0516102605180820380806000811215611cc357195b607f1c61235f5790509050905080820180806000811215611ce057195b607f1c61235f579050905090508152506103a080516102c0516102405180820380806000811215611d0d57195b607f1c61235f5790509050905080820180806000811215611d2a57195b607f1c61235f5790509050905081525060006103c0511215611d4d5760006103c0525b60006103a0511215611d605760006103a0525b5b6004610380516c01431e0fae6d7217caa000000081101561235f5702610135016103a08051825580602001516001830155806040015160028301558060600151600383015550506000610140511815611f9b57426101c0511115611e435761034080516102605180820180806000811215611dd857195b607f1c61235f579050905090508152506101c051610200511415611e205761034080516102e05180820380806000811215611e0f57195b607f1c61235f579050905090508152505b610340516c050c783eb9b5c84000000001356101c05160e05260c052604060c020555b42610200511115611ea9576101c051610200511115611ea85761036080516102e05180820380806000811215611e7557195b607f1c61235f57905090509050815250610360516c050c783eb9b5c84000000001356102005160e05260c052604060c020555b5b6101336101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020546001818183011061235f578082019050905061050052610500516101336101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c0205542610300524361032052600461050051633b9aca0081101561235f57026101326101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020016102c08051825580602001516001830155806040015160028301558060600151600383015550505b61022051565b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a808082049050905062093a8080820282158284830414171561235f5780905090509050610280526102a0600060ff818352015b610280805162093a80818183011061235f578082019050905081525060006102c0526101c05161028051111561205a576101c0516102805261207d565b6c050c783eb9b5c84000000001356102805160e05260c052604060c020546102c0525b610200805161022051610280516102405180821061235f5780820390509050604051811161235f57808202808060008112156120b557195b607f1c61235f57905090509050808203808060008112156120d257195b607f1c61235f579050905090508152506101c0516102805114156120f557612137565b61022080516102c0518082018080600081121561210e57195b607f1c61235f5790509050905081525061028051610240525b815160010180835281141561201d575b5050600061020051121561214c576000610200525b610200516000811261235f576000526000516101e051565b6101805261014052610160526068546101a05260006101c0526101e060006063818352015b6101a0516101e0511061219b5761234d565b61020060026101e051606481101561235f57026069018054825260018101548260200152505061024060006101f3818352015b6102205161024051106121e05761233a565b6101336101405160e05260c052604060c0206102005160e05260c052604060c0206102405160e05260c052604060c0205461026052600061026051111561232957610280600461026051633b9aca0081101561235f57026101326101405160e05260c052604060c0206102005160e05260c052604060c0206102405160e05260c052604060c0200180548252600181015482602001526002810154826040015260038101548260600152505061028080516102a051610160516102c05180821061235f5780820390509050604051811161235f57808202808060008112156122c457195b607f1c61235f57905090509050808203808060008112156122e157195b607f1c61235f579050905090508152506000610280511215612304576000610280525b6101c08051610280516000811261235f57818183011061235f57808201905090508152505b5b81516001018083528114156121ce575b50505b8151600101808352811415612189575b50506101c05160005260005161018051565b600080fd5b6102456125a9036102456000396102456125a9036000f35b600080fd000000000000000000000000b982841d8caf7ccc1b5c8ec414347316f54a06c9000000000000000000000000ba57440fa35fdb671e58f6f56c1a4447ab1f6c2b00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001a4d6972726f72656420566f74652d657363726f77656420484e4400000000000000000000000000000000000000000000000000000000000000000000000000066d7665484e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d7665484e445f312e302e300000000000000000000000000000000000000000

Deployed Bytecode

0x600436101561000d57611783565b600035601c526f7fffffffffffffffffffffffffffffff6040526000513461235f57633ad9b9678114156102f85760043560a01c61235f57600160023360e05260c052604060c02054141561235f5761014061013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0208054825260018101548260200152505060403661018037606435604051811161235f57610180526084356101a05261013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0206101808051825580602001516001830155505060006101c0526101e060006063818352015b6068546101e0511061011d576101ad565b60243560026101e051606481101561235f570260690154141561019c5760016101c052600160026101e051606481101561235f570260690101546044356001818183011061235f57808201905090508082101561017a578061017c565b815b90509050600160026101e051606481101561235f570260690101556101ad565b5b815160010180835281141561010c575b50506101c051610230576002606854606481101561235f57026069016000815560006001820155506024356002606854606481101561235f5702606901556044356001818183011061235f578082019050905060016002606854606481101561235f57026069010155606880546001818183011061235f57808201905090508155505b6101405161016051610180516101a0516101c051606060046101e03761024061014080518252806020015182602001525050610280610180805182528060200151826020015250506102a05161028051610260516102405161022051610200516101e05160065801611789565b6101c0526101a0526101805261016052610140526000506024356101e05260443561020052606435610220526084356004357ffc4ec19a3e0de16df8e3fbafa186f184ea96ecb19fd948f7044d88402597361160606101e0a3005b63c2c4c5c181141561038f5760403661014037604036610180376101405161016051610180516101a0516060366101c037610220610140805182528060200151826020015250506102606101808051825280602001518260200152505061028051610260516102405161022051610200516101e0516101c05160065801611789565b6101a052610180526101605261014052600050005b63010ae7578114156103ac576000610140526000610160526103f7565b63e55f04608114156103ce5760006101605260206024610140376000506103f7565b638c970b0b8114156103f257602060246101403760206044610160376000506103f7565b610490565b60043560a01c61235f5761014051610457576020610200602463010ae757610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b61013360043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c0205460005260206000f35b63da020a188114156104ad576000610140526000610160526104f8565b634cf702a08114156104cf5760006101605260206044610140376000506104f8565b63de4842c98114156104f357602060446101403760206064610160376000506104f8565b6105a8565b60043560a01c61235f5761014051610559576020610220604463da020a1861018052604060046101a03761019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102205160005260206000f35b60026004602435633b9aca0081101561235f570261013260043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02001015460005260206000f35b6380c0e83e8114156107f75760043560a01c61235f576040366101403761018060006063818352015b60035461018051106105e2576106b7565b6020610240602463010ae7576101c0526004356101e0526101dc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610240516101a0526020610280604463da020a186101e0526004356102005261014051610220526101fc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610280516101c052610160516101c0511015610691576001610697565b61016051155b5b156106a6576101c051610160525b5b81516001018083528114156105d1575b505061018060006063818352015b60685461018051106106d6576107e8565b6101a0600261018051606481101561235f5702606901805482526001810154826020015250506101e060006101f3818352015b6101c0516101e0511061071b576107d5565b61013360043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c02054610200526002600461020051633b9aca0081101561235f570261013260043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c02001015461022052610160516102205110156107af5760016107b5565b61016051155b5b156107c45761022051610160525b5b8151600101808352811415610709575b50505b81516001018083528114156106c5575b50506101605160005260206000f35b63b73b512181141561080d57426101405261082e565b63a37198fa81141561082957602060046101403760005061082e565b61090d565b61013454610160526101806004610160516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250506101405161016051610180516101a0516101c0516101e0516102006101808051825280602001518260200152806040015182604001528060600151826060015250506101405161028052610280516102605161024051610220516102005160065801611fa1565b6102e0526101e0526101c0526101a0526101805261016052610140526102e05160005260206000f35b6318160ddd811415610923574261014052610944565b63bd85b03981141561093f576020600461014037600050610944565b610ae3565b60006101605261018060006063818352015b6003546101805110610967576109d6565b61016080516020610220602463bd85b0396101a052610140516101c0526101bc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f5760005061022051818183011061235f57808201905090508152505b8151600101808352811415610956575b505061013454610180526101a06004610180516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102406101a0805182528060200151826020015280604001518260400152806060015182606001525050610140516102c0526102c0516102a05161028051610260516102405160065801611fa1565b6103205261022052610200526101e0526101c0526101a05261018052610160526101405261032051610220526101605161022051818183011061235f578082019050905060005260206000f35b6370a08231811415610af9574261014052610b19565b62fdd58e811415610b14576020602461014037600050610b19565b610c22565b60043560a01c61235f5760006101605261018060006063818352015b6003546101805110610b4657610bbb565b61016080516020610240604462fdd58e6101a0526004356101c052610140516101e0526101bc600161018051606481101561235f5702600401545afa1561235f57601f3d111561235f5760005061024051818183011061235f57808201905090508152505b8151600101808352811415610b35575b50506101405161016051610180516004356101a052610140516101c0526101c0516101a05160065801612164565b6102205261018052610160526101405261022051610180526101605161018051818183011061235f578082019050905060005260206000f35b63b76e6044811415610c685760043560a01c61235f576004356101405260243561016052610160516101405160065801612164565b6101c0526101c05160005260206000f35b63adc63589811415610c8557600061014052600061016052610cd0565b63f0914f4a811415610ca7576000610160526020602461014037600050610cd0565b63cca604d2811415610ccb5760206024610140376020604461016037600050610cd0565b610d6c565b60043560a01c61235f5761014051610d30576020610200602463adc63589610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b600161013160043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c020015460005260206000f35b63afe8dbd1811415610f3d5760043560a01c61235f5760006101405261016060006063818352015b6003546101605110610da557610e29565b6020610220602463adc635896101a0526004356101c0526101bc600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f57600050610220516101805261014051610180511015610e03576001610e09565b61014051155b5b15610e185761018051610140525b5b8151600101808352811415610d94575b50506068546101605261018060006063818352015b610160516101805110610e5057610f2e565b6101a0600261018051606481101561235f5702606901805482526001810154826020015250506101e060006101f3818352015b6101c0516101e05110610e9557610f1b565b600161013160043560e05260c052604060c0206101a05160e05260c052604060c0206101e05160e05260c052604060c0200154610200526000610200511815610ef95761014051610200511015610eed576001610ef3565b61014051155b5b610efc565b60005b15610f0a5761020051610140525b5b8151600101808352811415610e83575b50505b8151600101808352811415610e3e575b50506101405160005260206000f35b637c74a174811415610f5a57600061014052600061016052610fa5565b63c422abe0811415610f7c576000610160526020602461014037600050610fa5565b633e7e92cf811415610fa05760206024610140376020604461016037600050610fa5565b611089565b60043560a01c61235f57610140516110055760206102006024637c74a174610180526004356101a05261019c600161016051606481101561235f5702600401545afa1561235f57601f3d111561235f576000506102005160005260206000f35b61013360043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02054610180526001600461018051633b9aca0081101561235f570261013260043560e05260c052604060c0206101405160e05260c052604060c0206101605160e05260c052604060c02001015460005260206000f35b636b441a408114156110df5760043560a01c61235f5760005433141561235f57600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae8114156111405760005433141561235f5760015461014052600061014051181561235f576101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b63b4027b048114156111b55760043560a01c61235f5760243560011c61235f5760005433141561235f57602435600260043560e05260c052604060c0205560043561014052602435610160527fc2a4c21ce00cc344718078afc8a2fb244cf57e2cd182e6870f443813408c51196040610140a1005b63ec7b5cda8114156112345760043560a01c61235f5760005433141561235f576004356001600354606481101561235f570260040155600380546001818183011061235f5780820190509050815550600435610140527fcb28779aca1175c330a0dc64a20ac1713e3d984f3e25ab20408e5d7614b6e6bc6020610140a1005b63f851a44081141561124c5760005460005260206000f35b6317f7182a8114156112645760015460005260206000f35b632e98f2668114156112945760043560a01c61235f57600260043560e05260c052604060c0205460005260206000f35b63730762b88114156112ac5760035460005260206000f35b63556e5f4f8114156112d4576001600435606481101561235f57026004015460005260206000f35b63f1d90a158114156112ec5760685460005260206000f35b6327294447811415611338576002600435606481101561235f5702606901610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63c32367978114156113a95760043560a01c61235f5761013160043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63bfac6b3e81141561144f5760043560a01c61235f576004606435633b9aca0081101561235f570261013260043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0200161014080808084548152505060208101905080806001850154815250506020810190508080600285015481525050602081019050808060038501548152505060809050905060c05260c051610140f35b638f472cbb81141561149c5760043560a01c61235f5761013360043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0205460005260206000f35b63a9605a028114156114b5576101345460005260206000f35b630640490f8114156115305760046004356c01431e0fae6d7217caa000000081101561235f57026101350161014080808084548152505060208101905080806001850154815250506020810190508080600285015481525050602081019050808060038501548152505060809050905060c05260c051610140f35b639cc776bd811415611562576c050c783eb9b5c840000000013560043560e05260c052604060c0205460005260206000f35b6306fdde0381141561160b576c050c783eb9b5c840000000013680610180602082540161012060006003818352015b826101205160200211156115a4576115c6565b61012051850154610120516020028501525b8151600101808352811415611591575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6395d89b418114156116b4576c050c783eb9b5c840000000013a80610180602082540161012060006002818352015b8261012051602002111561164d5761166f565b61012051850154610120516020028501525b815160010180835281141561163a575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6354fd4d5081141561175d576c050c783eb9b5c840000000013d80610180602082540161012060006002818352015b826101205160200211156116f657611718565b61012051850154610120516020028501525b81516001018083528114156116e3575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63313ce567811415611781576c050c783eb9b5c84000000001405460005260206000f35b505b60006000fd5b610220526101405261016052610180526101a0526101c0526101e0526102005261014036610240376101345461038052600061014051181561194957426101c05111156117dc5760006101a051136117df565b60005b15611850576101a051630784ce00808205808060008112156117fd57195b607f1c61235f5790509050905061026052610260516101c0514280821061235f5780820390509050604051811161235f578082028080600081121561183e57195b607f1c61235f57905090509050610240525b426102005111156118675760006101e0511361186a565b60005b156118db576101e051630784ce008082058080600081121561188857195b607f1c61235f579050905090506102e0526102e051610200514280821061235f5780820390509050604051811161235f57808202808060008112156118c957195b607f1c61235f579050905090506102c0525b6c050c783eb9b5c84000000001356101c05160e05260c052604060c02054610340526000610200511815611948576101c051610200511415611924576103405161036052611947565b6c050c783eb9b5c84000000001356102005160e05260c052604060c02054610360525b5b5b6103a060008152600081602001524281604001524381606001525060006103805111156119b8576103a06004610380516c01431e0fae6d7217caa000000081101561235f5702610135018054825260018101548260200152600281015482604001526003810154826060015250505b6103e051610420526104406103a080518252806020015182602001528060400151826040015280606001518260600152505060006104c0526103e051421115611a5357670de0b6b3a7640000436104005180821061235f578082039050905080820282158284830414171561235f5780905090509050426103e05180821061235f578082039050905080801561235f578204905090506104c0525b6104205162093a808082049050905062093a8080820282158284830414171561235f57809050905090506104e052610500600060ff818352015b6104e0805162093a80818183011061235f5780820190509050815250600061052052426104e0511115611ac457426104e052611ae7565b6c050c783eb9b5c84000000001356104e05160e05260c052604060c02054610520525b6103a080516103c0516104e0516104205180821061235f5780820390509050604051811161235f5780820280806000811215611b1f57195b607f1c61235f5790509050905080820380806000811215611b3c57195b607f1c61235f579050905090508152506103c080516105205180820180806000811215611b6557195b607f1c61235f5790509050905081525060006103a0511215611b885760006103a0525b60006103c0511215611b9b5760006103c0525b6104e051610420526104e0516103e0526104a0516104c0516104e0516104805180821061235f578082039050905080820282158284830414171561235f5780905090509050670de0b6b3a764000080820490509050818183011061235f57808201905090506104005261038080516001818183011061235f5780820190509050815250426104e0511415611c37574361040052611c9056611c7f565b6004610380516c01431e0fae6d7217caa000000081101561235f5702610135016103a08051825580602001516001830155806040015160028301558060600151600383015550505b5b8151600101808352811415611a8d575b505061038051610134556000610140511815611d61576103c080516102e0516102605180820380806000811215611cc357195b607f1c61235f5790509050905080820180806000811215611ce057195b607f1c61235f579050905090508152506103a080516102c0516102405180820380806000811215611d0d57195b607f1c61235f5790509050905080820180806000811215611d2a57195b607f1c61235f5790509050905081525060006103c0511215611d4d5760006103c0525b60006103a0511215611d605760006103a0525b5b6004610380516c01431e0fae6d7217caa000000081101561235f5702610135016103a08051825580602001516001830155806040015160028301558060600151600383015550506000610140511815611f9b57426101c0511115611e435761034080516102605180820180806000811215611dd857195b607f1c61235f579050905090508152506101c051610200511415611e205761034080516102e05180820380806000811215611e0f57195b607f1c61235f579050905090508152505b610340516c050c783eb9b5c84000000001356101c05160e05260c052604060c020555b42610200511115611ea9576101c051610200511115611ea85761036080516102e05180820380806000811215611e7557195b607f1c61235f57905090509050815250610360516c050c783eb9b5c84000000001356102005160e05260c052604060c020555b5b6101336101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020546001818183011061235f578082019050905061050052610500516101336101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c0205542610300524361032052600461050051633b9aca0081101561235f57026101326101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020016102c08051825580602001516001830155806040015160028301558060600151600383015550505b61022051565b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a808082049050905062093a8080820282158284830414171561235f5780905090509050610280526102a0600060ff818352015b610280805162093a80818183011061235f578082019050905081525060006102c0526101c05161028051111561205a576101c0516102805261207d565b6c050c783eb9b5c84000000001356102805160e05260c052604060c020546102c0525b610200805161022051610280516102405180821061235f5780820390509050604051811161235f57808202808060008112156120b557195b607f1c61235f57905090509050808203808060008112156120d257195b607f1c61235f579050905090508152506101c0516102805114156120f557612137565b61022080516102c0518082018080600081121561210e57195b607f1c61235f5790509050905081525061028051610240525b815160010180835281141561201d575b5050600061020051121561214c576000610200525b610200516000811261235f576000526000516101e051565b6101805261014052610160526068546101a05260006101c0526101e060006063818352015b6101a0516101e0511061219b5761234d565b61020060026101e051606481101561235f57026069018054825260018101548260200152505061024060006101f3818352015b6102205161024051106121e05761233a565b6101336101405160e05260c052604060c0206102005160e05260c052604060c0206102405160e05260c052604060c0205461026052600061026051111561232957610280600461026051633b9aca0081101561235f57026101326101405160e05260c052604060c0206102005160e05260c052604060c0206102405160e05260c052604060c0200180548252600181015482602001526002810154826040015260038101548260600152505061028080516102a051610160516102c05180821061235f5780820390509050604051811161235f57808202808060008112156122c457195b607f1c61235f57905090509050808203808060008112156122e157195b607f1c61235f579050905090508152506000610280511215612304576000610280525b6101c08051610280516000811261235f57818183011061235f57808201905090508152505b5b81516001018083528114156121ce575b50505b8151600101808352811415612189575b50506101c05160005260005161018051565b600080fd

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

000000000000000000000000b982841d8caf7ccc1b5c8ec414347316f54a06c9000000000000000000000000ba57440fa35fdb671e58f6f56c1a4447ab1f6c2b00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001a4d6972726f72656420566f74652d657363726f77656420484e4400000000000000000000000000000000000000000000000000000000000000000000000000066d7665484e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d7665484e445f312e302e300000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _admin (address): 0xb982841d8Caf7cCc1b5c8ec414347316F54A06c9
Arg [1] : _voting_escrow (address): 0xBa57440fA35Fdb671E58F6F56c1A4447aB1f6C2B
Arg [2] : _name (string): Mirrored Vote-escrowed HND
Arg [3] : _symbol (string): mveHND
Arg [4] : _version (string): mveHND_1.0.0

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000b982841d8caf7ccc1b5c8ec414347316f54a06c9
Arg [1] : 000000000000000000000000ba57440fa35fdb671e58f6f56c1a4447ab1f6c2b
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [6] : 4d6972726f72656420566f74652d657363726f77656420484e44000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 6d7665484e440000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [10] : 6d7665484e445f312e302e300000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.