Contract 0x6b5f15E939C8d797E6bd8D5fFda24eDeC655D08d 3

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xed622a761dbaf284e14c7e0b28e81460f84da2966f5a80d7b921bbadaa0336a00x6f7fffff79594722022-03-15 22:04:17198 days 19 hrs ago0x8286dc6df929c4bfa4f6951cab4dae2ec02d4d72 IN  Create: Vyper_contract0 ETH0.011784714276 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x0aae77df7609933c9d9c96f1132c7d9a2bb4386e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x0aae77df7609933c9d9c96f1132c7d9a2bb4386e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x0aae77df7609933c9d9c96f1132c7d9a2bb4386e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x66a06bdadea3cf1097a74ca86980fc0dcc45024a8f56cc758fdd4032c260a8a4276139082022-09-30 14:08:522 hrs 57 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0xdb356c96b6a6f9536ea3c5de3d22ff06b620c3fcc35228d2c5d819ed483b4c4a276135582022-09-30 14:06:552 hrs 59 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0xdb356c96b6a6f9536ea3c5de3d22ff06b620c3fcc35228d2c5d819ed483b4c4a276135582022-09-30 14:06:552 hrs 59 mins ago 0x0aae77df7609933c9d9c96f1132c7d9a2bb4386e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0xdb356c96b6a6f9536ea3c5de3d22ff06b620c3fcc35228d2c5d819ed483b4c4a276135582022-09-30 14:06:552 hrs 59 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0xdb356c96b6a6f9536ea3c5de3d22ff06b620c3fcc35228d2c5d819ed483b4c4a276135582022-09-30 14:06:552 hrs 59 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0xa5b69ce2d974057bbe9c801e0db02ec5d57301ce55c292a655f1c9987e519f11275829472022-09-30 10:48:296 hrs 17 mins ago 0xba0649b1a51ab1f0074e26ba164b26ebf6e9a91e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0xf287c37a433a9d5162898a94cf69827359bad148 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0xf287c37a433a9d5162898a94cf69827359bad148 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d Hundred Finance: veHND0 ETH
0x28ada7ad11e906022652dc2a11bc95af1a8fdd48f56e4b01699f2a63cd406723275780822022-09-30 10:12:326 hrs 53 mins ago 0x5ba443267c09578bfd87e033a401f69d37fe677e 0x6b5f15e939c8d797e6bd8d5ffda24edec655d08d0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.15

Optimization Enabled:
N/A

Other Settings:
, 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 ABI

[{"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

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 Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.