Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 855 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 23454257 | 31 days ago | IN | 0 ETH | 0.00028289 | ||||
| Withdraw | 23454244 | 31 days ago | IN | 0 ETH | 0.00028398 | ||||
| Withdraw | 23141664 | 75 days ago | IN | 0 ETH | 0.0002545 | ||||
| Withdraw | 22783610 | 125 days ago | IN | 0 ETH | 0.00202971 | ||||
| Withdraw | 22186662 | 208 days ago | IN | 0 ETH | 0.00019519 | ||||
| Withdraw | 22091040 | 222 days ago | IN | 0 ETH | 0.00018651 | ||||
| Increase_unlock_... | 21937583 | 243 days ago | IN | 0 ETH | 0.00023673 | ||||
| Withdraw | 21911613 | 247 days ago | IN | 0 ETH | 0.00029095 | ||||
| Withdraw | 21900667 | 248 days ago | IN | 0 ETH | 0.00014366 | ||||
| Increase_amount | 21900130 | 248 days ago | IN | 0 ETH | 0.0001722 | ||||
| Increase_unlock_... | 21900093 | 248 days ago | IN | 0 ETH | 0.00018263 | ||||
| Increase_amount | 21900076 | 248 days ago | IN | 0 ETH | 0.00017692 | ||||
| Withdraw | 21891172 | 250 days ago | IN | 0 ETH | 0.00026206 | ||||
| Withdraw | 21891170 | 250 days ago | IN | 0 ETH | 0.00027089 | ||||
| Withdraw | 21838977 | 257 days ago | IN | 0 ETH | 0.00126465 | ||||
| Withdraw | 21756756 | 268 days ago | IN | 0 ETH | 0.00056402 | ||||
| Withdraw | 21473064 | 308 days ago | IN | 0 ETH | 0.00258312 | ||||
| Increase_unlock_... | 21424922 | 315 days ago | IN | 0 ETH | 0.00373308 | ||||
| Increase_amount | 21424888 | 315 days ago | IN | 0 ETH | 0.00398637 | ||||
| Withdraw | 21407270 | 317 days ago | IN | 0 ETH | 0.0012564 | ||||
| Increase_unlock_... | 21358077 | 324 days ago | IN | 0 ETH | 0.00327016 | ||||
| Withdraw | 21352655 | 325 days ago | IN | 0 ETH | 0.00321355 | ||||
| Withdraw | 21352651 | 325 days ago | IN | 0 ETH | 0.00333074 | ||||
| Withdraw | 21347652 | 325 days ago | IN | 0 ETH | 0.00420057 | ||||
| Increase_amount | 21227233 | 342 days ago | IN | 0 ETH | 0.00275153 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
|||
|---|---|---|---|---|---|---|---|
| 0x60206127 | 16345397 | 1026 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7
"""
@title Voting Escrow
@author Curve Finance
@license MIT
@notice Votes have a weight depending on time, so that users are
committed to the future of (whatever they are voting for)
@dev Vote weight decays linearly over time. Lock time cannot be
more than `MAXTIME` (1 year).
"""
# Voting escrow to have time-weighted votes
# Votes have a weight depending on time, so that users are committed
# to the future of (whatever they are voting for).
# The weight in this implementation is linear, and lock cannot be more than maxtime:
# w ^
# 1 + /
# | /
# | /
# | /
# |/
# 0 +--------+------> time
# maxtime (1 year?)
struct Point:
bias: int128
slope: int128 # - dweight / dt
ts: uint256
blk: uint256 # block
# We cannot really do block numbers per se b/c slope is per time, not per block
# and per block could be fairly bad b/c Ethereum changes blocktimes.
# What we can do is to extrapolate ***At functions
struct LockedBalance:
amount: int128
end: uint256
interface ERC20:
def decimals() -> uint256: view
def name() -> String[64]: view
def symbol() -> String[32]: view
def transfer(to: address, amount: uint256) -> bool: nonpayable
def transferFrom(spender: address, to: address, amount: uint256) -> bool: nonpayable
# Interface for checking whether address belongs to a whitelisted
# type of a smart wallet.
# When new types are added - the whole contract is changed
# The check() method is modifying to be able to use caching
# for individual wallet addresses
interface SmartWalletChecker:
def check(addr: address) -> bool: nonpayable
DEPOSIT_FOR_TYPE: constant(int128) = 0
CREATE_LOCK_TYPE: constant(int128) = 1
INCREASE_LOCK_AMOUNT: constant(int128) = 2
INCREASE_UNLOCK_TIME: constant(int128) = 3
event Deposit:
provider: indexed(address)
value: uint256
locktime: indexed(uint256)
type: int128
ts: uint256
event Withdraw:
provider: indexed(address)
value: uint256
ts: uint256
event Supply:
prevSupply: uint256
supply: uint256
event NewPendingAdmin:
new_pending_admin: address
event NewAdmin:
new_admin: address
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
TOKEN: immutable(address)
NAME: immutable(String[64])
SYMBOL: immutable(String[32])
DECIMALS: immutable(uint256)
pending_admin: public(address)
admin: public(address)
supply: public(uint256)
locked: public(HashMap[address, LockedBalance])
epoch: public(uint256)
point_history: public(Point[100000000000000000000000000000]) # epoch -> unsigned point
user_point_history: public(HashMap[address, Point[1000000000]]) # user -> Point[user_epoch]
user_point_epoch: public(HashMap[address, uint256])
slope_changes: public(HashMap[uint256, int128]) # time -> signed slope change
# Checker for whitelisted (smart contract) wallets which are allowed to deposit
# The goal is to prevent tokenizing the escrow
future_smart_wallet_checker: public(address)
smart_wallet_checker: public(address)
@external
def __init__(token_addr: address, _name: String[64], _symbol: String[32], _admin: address):
"""
@notice Contract constructor
@param token_addr The token to escrow
@param _name Token name
@param _symbol Token symbol
@param _admin The admin address
"""
assert _admin != empty(address)
TOKEN = token_addr
self.admin = _admin
self.point_history[0].blk = block.number
self.point_history[0].ts = block.timestamp
_decimals: uint256 = ERC20(token_addr).decimals()
assert _decimals <= 255
NAME = _name
SYMBOL = _symbol
DECIMALS = _decimals
@external
@view
def token() -> address:
return TOKEN
@external
@view
def name() -> String[64]:
return NAME
@external
@view
def symbol() -> String[32]:
return SYMBOL
@external
@view
def decimals() -> uint256:
return DECIMALS
@external
def commit_smart_wallet_checker(addr: address):
"""
@notice Set an external contract to check for approved smart contract wallets
@param addr Address of Smart contract checker
"""
assert msg.sender == self.admin
self.future_smart_wallet_checker = addr
@external
def apply_smart_wallet_checker():
"""
@notice Apply setting external contract to check approved smart contract wallets
"""
assert msg.sender == self.admin
self.smart_wallet_checker = self.future_smart_wallet_checker
@internal
def assert_not_contract(addr: address):
"""
@notice Check if the call is from a whitelisted smart contract, revert if not
@param addr Address to be checked
"""
if addr != tx.origin:
checker: address = self.smart_wallet_checker
if checker != empty(address):
if SmartWalletChecker(checker).check(addr):
return
raise "Smart contract depositors not allowed"
@external
@view
def get_last_user_slope(addr: address) -> int128:
"""
@notice Get the most recently recorded rate of voting power decrease for `addr`
@param addr Address of the user wallet
@return Value of the slope
"""
uepoch: uint256 = self.user_point_epoch[addr]
return self.user_point_history[addr][uepoch].slope
@external
@view
def user_point_history__ts(_addr: address, _idx: uint256) -> uint256:
"""
@notice Get the timestamp for checkpoint `_idx` for `_addr`
@param _addr User wallet address
@param _idx User epoch number
@return Epoch time of the checkpoint
"""
return self.user_point_history[_addr][_idx].ts
@external
@view
def locked__end(_addr: address) -> uint256:
"""
@notice Get timestamp when `_addr`'s lock finishes
@param _addr User wallet
@return Epoch time of the lock end
"""
return self.locked[_addr].end
@internal
def _checkpoint(addr: address, 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.epoch
if addr != empty(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 / convert(MAXTIME, int128)
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 / convert(MAXTIME, int128)
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.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.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.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.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.point_history[_epoch] = last_point
self.epoch = _epoch
# Now point_history is filled until t=now
if addr != empty(address):
# If last point was in this block, the slope change has been applied already
# But in such case we have 0 slope(s)
last_point.slope += (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.point_history[_epoch] = last_point
if addr != empty(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.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.slope_changes[new_locked.end] = new_dslope
# else: we recorded it already in old_dslope
# Now handle user history
user_epoch: uint256 = self.user_point_epoch[addr] + 1
self.user_point_epoch[addr] = user_epoch
u_new.ts = block.timestamp
u_new.blk = block.number
self.user_point_history[addr][user_epoch] = u_new
@internal
def _deposit_for(_addr: address, _value: uint256, unlock_time: uint256, locked_balance: LockedBalance, type: int128):
"""
@notice Deposit and lock tokens for a user
@param _addr User's wallet address
@param _value Amount to deposit
@param unlock_time New time when to unlock the tokens, or 0 if unchanged
@param locked_balance Previous locked amount / timestamp
"""
_locked: LockedBalance = locked_balance
supply_before: uint256 = self.supply
self.supply = supply_before + _value
old_locked: LockedBalance = _locked
# Adding to existing lock, or if a lock is expired - creating a new one
_locked.amount += convert(_value, int128)
if unlock_time != 0:
_locked.end = unlock_time
self.locked[_addr] = _locked
# Possibilities:
# Both old_locked.end could be current or expired (>/< block.timestamp)
# value == 0 (extend lock) or value > 0 (add to lock or extend lock)
# _locked.end > block.timestamp (always)
self._checkpoint(_addr, old_locked, _locked)
if _value != 0:
assert ERC20(TOKEN).transferFrom(_addr, self, _value)
log Deposit(_addr, _value, _locked.end, type, block.timestamp)
log Supply(supply_before, supply_before + _value)
@external
def checkpoint():
"""
@notice Record global data to checkpoint
"""
self._checkpoint(empty(address), empty(LockedBalance), empty(LockedBalance))
@external
@nonreentrant('lock')
def deposit_for(_addr: address, _value: uint256):
"""
@notice Deposit `_value` tokens for `_addr` and add to the lock
@dev Anyone (even a smart contract) can deposit for someone else, but
cannot extend their locktime and deposit for a brand new user
@param _addr User's wallet address
@param _value Amount to add to user's lock
"""
_locked: LockedBalance = self.locked[_addr]
assert _value > 0 # dev: need non-zero value
assert _locked.amount > 0, "No existing lock found"
assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw"
self._deposit_for(_addr, _value, 0, self.locked[_addr], DEPOSIT_FOR_TYPE)
@external
@nonreentrant('lock')
def create_lock(_value: uint256, _unlock_time: uint256):
"""
@notice Deposit `_value` tokens for `msg.sender` and lock until `_unlock_time`
@param _value Amount to deposit
@param _unlock_time Epoch time when tokens unlock, rounded down to whole weeks
"""
self.assert_not_contract(msg.sender)
unlock_time: uint256 = (_unlock_time / WEEK) * WEEK # Locktime is rounded down to weeks
_locked: LockedBalance = self.locked[msg.sender]
assert _value > 0 # dev: need non-zero value
assert _locked.amount == 0, "Withdraw old tokens first"
assert unlock_time > block.timestamp, "Can only lock until time in the future"
assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 1 year max"
self._deposit_for(msg.sender, _value, unlock_time, _locked, CREATE_LOCK_TYPE)
@external
@nonreentrant('lock')
def increase_amount(_value: uint256):
"""
@notice Deposit `_value` additional tokens for `msg.sender`
without modifying the unlock time
@param _value Amount of tokens to deposit and add to the lock
"""
self.assert_not_contract(msg.sender)
_locked: LockedBalance = self.locked[msg.sender]
assert _value > 0 # dev: need non-zero value
assert _locked.amount > 0, "No existing lock found"
assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw"
self._deposit_for(msg.sender, _value, 0, _locked, INCREASE_LOCK_AMOUNT)
@external
@nonreentrant('lock')
def increase_unlock_time(_unlock_time: uint256):
"""
@notice Extend the unlock time for `msg.sender` to `_unlock_time`
@param _unlock_time New epoch time for unlocking
"""
self.assert_not_contract(msg.sender)
_locked: LockedBalance = self.locked[msg.sender]
unlock_time: uint256 = (_unlock_time / WEEK) * WEEK # Locktime is rounded down to weeks
assert _locked.end > block.timestamp, "Lock expired"
assert _locked.amount > 0, "Nothing is locked"
assert unlock_time > _locked.end, "Can only increase lock duration"
assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 1 year max"
self._deposit_for(msg.sender, 0, unlock_time, _locked, INCREASE_UNLOCK_TIME)
@external
@nonreentrant('lock')
def withdraw():
"""
@notice Withdraw all tokens for `msg.sender`
@dev Only possible if the lock has expired
"""
_locked: LockedBalance = self.locked[msg.sender]
assert block.timestamp >= _locked.end, "The lock didn't expire"
value: uint256 = convert(_locked.amount, uint256)
old_locked: LockedBalance = _locked
_locked.end = 0
_locked.amount = 0
self.locked[msg.sender] = _locked
supply_before: uint256 = self.supply
self.supply = supply_before - value
# old_locked can have either expired <= timestamp or zero end
# _locked has only 0 end
# Both can have >= 0 amount
self._checkpoint(msg.sender, old_locked, _locked)
assert ERC20(TOKEN).transfer(msg.sender, value)
log Withdraw(msg.sender, value, block.timestamp)
log Supply(supply_before, supply_before - value)
# The following ERC20/minime-compatible methods are not real balanceOf and supply!
# They measure the weights for the purpose of voting, so they don't represent
# real coins.
@internal
@view
def find_block_epoch(_block: uint256, max_epoch: uint256) -> uint256:
"""
@notice Binary search to find epoch containing block number
@param _block Block to find
@param max_epoch Don't go beyond this epoch
@return Epoch which contains _block
"""
# Binary search
_min: uint256 = 0
_max: uint256 = max_epoch
for i in range(128): # Will be always enough for 128-bit numbers
if _min >= _max:
break
_mid: uint256 = (_min + _max + 1) / 2
if self.point_history[_mid].blk <= _block:
_min = _mid
else:
_max = _mid - 1
return _min
@internal
@view
def find_timestamp_epoch(_timestamp: uint256, max_epoch: uint256) -> uint256:
"""
@notice Binary search to find epoch for timestamp
@param _timestamp timestamp to find
@param max_epoch Don't go beyond this epoch
@return Epoch which contains _timestamp
"""
# Binary search
_min: uint256 = 0
_max: uint256 = max_epoch
for i in range(128): # Will be always enough for 128-bit numbers
if _min >= _max:
break
_mid: uint256 = (_min + _max + 1) / 2
if self.point_history[_mid].ts <= _timestamp:
_min = _mid
else:
_max = _mid - 1
return _min
@internal
@view
def find_block_user_epoch(_addr: address, _block: uint256, max_epoch: uint256) -> uint256:
"""
@notice Binary search to find epoch for block number
@param _addr User for which to find user epoch for
@param _block Block to find
@param max_epoch Don't go beyond this epoch
@return Epoch which contains _block
"""
# Binary search
_min: uint256 = 0
_max: uint256 = max_epoch
for i in range(128): # Will be always enough for 128-bit numbers
if _min >= _max:
break
_mid: uint256 = (_min + _max + 1) / 2
if self.user_point_history[_addr][_mid].blk <= _block:
_min = _mid
else:
_max = _mid - 1
return _min
@internal
@view
def find_timestamp_user_epoch(_addr: address, _timestamp: uint256, max_epoch: uint256) -> uint256:
"""
@notice Binary search to find user epoch for timestamp
@param _addr User for which to find user epoch for
@param _timestamp timestamp to find
@param max_epoch Don't go beyond this epoch
@return Epoch which contains _timestamp
"""
# Binary search
_min: uint256 = 0
_max: uint256 = max_epoch
for i in range(128): # Will be always enough for 128-bit numbers
if _min >= _max:
break
_mid: uint256 = (_min + _max + 1) / 2
if self.user_point_history[_addr][_mid].ts <= _timestamp:
_min = _mid
else:
_max = _mid - 1
return _min
@external
@view
def balanceOf(addr: address, _t: uint256 = block.timestamp) -> uint256:
"""
@notice Get the current voting power for `msg.sender`
@dev Adheres to the ERC20 `balanceOf` interface for Aragon compatibility
@param addr User wallet address
@param _t Epoch time to return voting power at
@return User voting power
"""
_epoch: uint256 = 0
if _t == block.timestamp:
# No need to do binary search, will always live in current epoch
_epoch = self.user_point_epoch[addr]
else:
_epoch = self.find_timestamp_user_epoch(addr, _t, self.user_point_epoch[addr])
if _epoch == 0:
return 0
else:
last_point: Point = self.user_point_history[addr][_epoch]
last_point.bias -= last_point.slope * convert(_t - last_point.ts, int128)
if last_point.bias < 0:
last_point.bias = 0
return convert(last_point.bias, uint256)
@external
@view
def balanceOfAt(addr: address, _block: uint256) -> uint256:
"""
@notice Measure voting power of `addr` at block height `_block`
@dev Adheres to MiniMe `balanceOfAt` interface: https://github.com/Giveth/minime
@param addr User's wallet address
@param _block Block to calculate the voting power at
@return Voting power
"""
# Copying and pasting totalSupply code because Vyper cannot pass by
# reference yet
assert _block <= block.number
_user_epoch: uint256 = self.find_block_user_epoch(addr, _block, self.user_point_epoch[addr])
upoint: Point = self.user_point_history[addr][_user_epoch]
max_epoch: uint256 = self.epoch
_epoch: uint256 = self.find_block_epoch(_block, max_epoch)
point_0: Point = self.point_history[_epoch]
d_block: uint256 = 0
d_t: uint256 = 0
if _epoch < max_epoch:
point_1: Point = self.point_history[_epoch + 1]
d_block = point_1.blk - point_0.blk
d_t = point_1.ts - point_0.ts
else:
d_block = block.number - point_0.blk
d_t = block.timestamp - point_0.ts
block_time: uint256 = point_0.ts
if d_block != 0:
block_time += d_t * (_block - point_0.blk) / d_block
upoint.bias -= upoint.slope * convert(block_time - upoint.ts, int128)
if upoint.bias >= 0:
return convert(upoint.bias, uint256)
else:
return 0
@internal
@view
def 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.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 totalSupply(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 = 0
if t == block.timestamp:
# No need to do binary search, will always live in current epoch
_epoch = self.epoch
else:
_epoch = self.find_timestamp_epoch(t, self.epoch)
if _epoch == 0:
return 0
else:
last_point: Point = self.point_history[_epoch]
return self.supply_at(last_point, t)
@external
@view
def totalSupplyAt(_block: uint256) -> uint256:
"""
@notice Calculate total voting power at some point in the past
@param _block Block to calculate the total voting power at
@return Total voting power at `_block`
"""
assert _block <= block.number
_epoch: uint256 = self.epoch
target_epoch: uint256 = self.find_block_epoch(_block, _epoch)
point: Point = self.point_history[target_epoch]
dt: uint256 = 0
if target_epoch < _epoch:
point_next: Point = self.point_history[target_epoch + 1]
if point.blk != point_next.blk:
dt = (_block - point.blk) * (point_next.ts - point.ts) / (point_next.blk - point.blk)
else:
if point.blk != block.number:
dt = (_block - point.blk) * (block.timestamp - point.ts) / (block.number - point.blk)
# Now dt contains info on how far are we beyond point
return self.supply_at(point, point.ts + dt)
@external
def change_pending_admin(new_pending_admin: address):
"""
@notice Change pending_admin to `new_pending_admin`
@param new_pending_admin The new pending_admin address
"""
assert msg.sender == self.admin
self.pending_admin = new_pending_admin
log NewPendingAdmin(new_pending_admin)
@external
def claim_admin():
"""
@notice Called by pending_admin to set admin to pending_admin
"""
assert msg.sender == self.pending_admin
self.admin = msg.sender
self.pending_admin = empty(address)
log NewAdmin(msg.sender)Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"Deposit","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false},{"name":"locktime","type":"uint256","indexed":true},{"name":"type","type":"int128","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false},{"name":"ts","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Supply","inputs":[{"name":"prevSupply","type":"uint256","indexed":false},{"name":"supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewPendingAdmin","inputs":[{"name":"new_pending_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"name":"new_admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"token_addr","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"commit_smart_wallet_checker","inputs":[{"name":"addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"apply_smart_wallet_checker","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_last_user_slope","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"int128"}]},{"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":"locked__end","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_for","inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"create_lock","inputs":[{"name":"_value","type":"uint256"},{"name":"_unlock_time","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"increase_amount","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"increase_unlock_time","inputs":[{"name":"_unlock_time","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[],"outputs":[]},{"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":"balanceOfAt","inputs":[{"name":"addr","type":"address"},{"name":"_block","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":"totalSupplyAt","inputs":[{"name":"_block","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"change_pending_admin","inputs":[{"name":"new_pending_admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim_admin","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"pending_admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"supply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"locked","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"amount","type":"int128"},{"name":"end","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"epoch","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"point_history","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"user_point_history","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"int128"},{"name":"slope","type":"int128"},{"name":"ts","type":"uint256"},{"name":"blk","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"user_point_epoch","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"slope_changes","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"future_smart_wallet_checker","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"smart_wallet_checker","inputs":[],"outputs":[{"name":"","type":"address"}]}]Contract Creation Code
60206127756000396000518060a01c612770576040526020612795600039600051604060208261277501600039600051116127705760208161277501600039600051806060526020820181816127750160803950505060206127b56000396000516020602082612775016000396000511161277057602081612775016000396000518060c052602082016020816127750160003960005160e05250505060206127d56000396000518060a01c612770576101005234612770576101005115612770576040516125e65261010051600255436009554260085560405163313ce567610140526020610140600461015c845afa6100ff573d600060003e3d6000fd5b60203d10612770576101409050516101205260ff6101205111612770576060518061260652600081601f0160051c6002811161277057801561015c57905b8060051b608001518160051b6040016125e6015260010181811861013d575b50505060c051806126665260e0516126865250610120516126a6526125e6610189610000396126c6610000f36003361161000c576117d1565b60003560e01c346125d45763fc0c546a811861003e57600436106125d45760206125e660003960005160405260206040f35b6306fdde03811861009f57600436106125d4576020806040528060400160206126066000396000518082526020820181612626823950508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b41811861010757600436106125d457602080604052806040016020612666600039600051808252602082016020612686600039600051815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63313ce567811861012e57600436106125d45760206126a660003960005160405260206040f35b6357f901e2811861016c57602436106125d4576004358060a01c6125d45760405260025433186125d4576040516c050c783eb9b5c840000000000955005b638e5b490f81186101a857600436106125d45760025433186125d4576c050c783eb9b5c8400000000009546c050c783eb9b5c840000000000a55005b637c74a174811861022a57602436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000076040516020526000526040600020546060526c050c783eb9b5c84000000000066040516020526000526040600020606051633b9ac9ff81116125d45760021b810190506001810190505460805260206080f35b63da020a18811861028c57604436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000066040516020526000526040600020602435633b9ac9ff81116125d45760021b810190506002810190505460605260206060f35b63adc6358981186102cd57602436106125d4576004358060a01c6125d457604052600460405160205260005260406000206001810190505460605260206060f35b63c2c4c5c181186102f057600436106125d45760a0366040376102ee6118cf565b005b633a46273e811861049c57604436106125d4576004358060a01c6125d4576105e0526000546002146125d457600260005560046105e051602052600052604060002080546106005260018101546106205250602435156125d45760016106005112156103bc576016610640527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b426106205111610451576024610640527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610660527f64726177000000000000000000000000000000000000000000000000000000006106805261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b6105e0516103e0526024356104005260006104205260046105e051602052600052604060002080546104405260018101546104605250600061048052610495611fb0565b6003600055005b6365fc387381186106d157604436106125d4576000546002146125d4576002600055336040526104ca6117d7565b60243562093a808104905062093a8081028162093a808204186125d45790506105e052600433602052600052604060002080546106005260018101546106205250600435156125d4576106005115610582576019610640527f5769746864726177206f6c6420746f6b656e73206669727374000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b426105e05111610617576026610640527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e2074686520610660527f66757475726500000000000000000000000000000000000000000000000000006106805261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b42630784ce0081018181106125d45790506105e051111561069857601d610640527f566f74696e67206c6f636b2063616e20626520312079656172206d61780000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b336103e052600435610400526105e05161042052610600516104405261062051610460526001610480526106ca611fb0565b6003600055005b634957677c811861086357602436106125d4576000546002146125d4576002600055336040526106ff6117d7565b600433602052600052604060002080546105e05260018101546106005250600435156125d45760016105e0511215610797576016610620527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006106405261062050610620518061064001601f826000031636823750506308c379a06105e052602061060052601f19601f6106205101166044016105fcfd5b42610600511161082c576024610620527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610640527f64726177000000000000000000000000000000000000000000000000000000006106605261062050610620518061064001601f826000031636823750506308c379a06105e052602061060052601f19601f6106205101166044016105fcfd5b336103e052600435610400526000610420526105e05161044052610600516104605260026104805261085c611fb0565b6003600055005b63eff7a6128118610ae057602436106125d4576000546002146125d4576002600055336040526108916117d7565b600433602052600052604060002080546105e0526001810154610600525060043562093a808104905062093a8081028162093a808204186125d45790506106205242610600511161094257600c610640527f4c6f636b206578706972656400000000000000000000000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b60016105e05112156109b4576011610640527f4e6f7468696e67206973206c6f636b65640000000000000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b610600516106205111610a2757601f610640527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b42630784ce0081018181106125d4579050610620511115610aa857601d610640527f566f74696e67206c6f636b2063616e20626520312079656172206d61780000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b336103e05260006104005261062051610420526105e051610440526106005161046052600361048052610ad9611fb0565b6003600055005b633ccfd60b8118610d0a57600436106125d4576000546002146125d4576002600055600433602052600052604060002080546103e0526001810154610400525061040051421015610b91576016610420527f546865206c6f636b206469646e277420657870697265000000000000000000006104405261042050610420518061044001601f826000031636823750506308c379a06103e052602061040052601f19601f6104205101166044016103fcfd5b6103e051600081126125d457610420526103e05161044052610400516104605260006104005260006103e05260043360205260005260406000206103e0518155610400516001820155506003546104805261048051610420518082038281116125d457905090506003553360405261044051606052610460516080526103e05160a0526104005160c052610c236118cf565b60206125e660003960005163a9059cbb6104a052336104c052610420516104e05260206104a060446104bc6000855af1610c62573d600060003e3d6000fd5b60203d106125d4576104a0518060011c6125d45761050052610500905051156125d457337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568610420516104a052426104c05260406104a0a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c610480516104a05261048051610420518082038281116125d457905090506104c05260406104a0a16003600055005b6370a082318118610d2757602436106125d4574261014052610d41565b62fdd58e8118610ed057604436106125d457602435610140525b6004358060a01c6125d45761012052600061016052426101405118610d87576c050c783eb9b5c84000000000076101205160205260005260406000205461016052610dca565b61012051604052610140516060526c050c783eb9b5c840000000000761012051602052600052604060002054608052610dc161018061239e565b61018051610160525b61016051610de6576000610180526020610180610ece56610ece565b6c050c783eb9b5c840000000000661012051602052600052604060002061016051633b9ac9ff81116125d45760021b8101905080546101805260018101546101a05260028101546101c05260038101546101e05250610180516101a051610140516101c0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d45790509050610180527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101805113610eb8576000610180525b61018051600081126125d4576102005260206102005bf35b634ee2cd7e81186111ab57604436106125d4576004358060a01c6125d4576101205243602435116125d457610120516040526024356060526c050c783eb9b5c840000000000761012051602052600052604060002054608052610f346101606122d6565b61016051610140526c050c783eb9b5c840000000000661012051602052600052604060002061014051633b9ac9ff81116125d45760021b8101905080546101605260018101546101805260028101546101a05260038101546101c052506005546101e0526024356040526101e051606052610fb0610220612176565b6102205161020052610200516c01431e0fae6d7217ca9fffffff81116125d45760021b600601805461022052600181015461024052600281015461026052600381015461028052506040366102a0376101e051610200511061103f5743610280518082038281116125d457905090506102a05242610260518082038281116125d457905090506102c0526110c1565b61020051600181018181106125d45790506c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102e0526001810154610300526002810154610320526003810154610340525061034051610280518082038281116125d457905090506102a05261032051610260518082038281116125d457905090506102c0525b610260516102e0526102a05115611127576102e0516102c051602435610280518082038281116125d457905090508082028115838383041417156125d457905090506102a05180156125d457808204905090508082018281106125d457905090506102e0525b61016051610180516102e0516101a0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d457905090506101605260006101605112156111935760006103005260206103006111a9566111a9565b61016051600081126125d4576103005260206103005bf35b6318160ddd81186111c857600436106125d457426101c0526111e3565b63bd85b03981186112b257602436106125d4576004356101c0525b60006101e052426101c051186111ff576005546101e052611220565b6101c051604052600554606052611217610200612226565b610200516101e0525b6101e05161123c5760006102005260206102006112b0566112b0565b6101e0516c01431e0fae6d7217ca9fffffff81116125d45760021b6006018054610200526001810154610220526002810154610240526003810154610260525060206102005160405261022051606052610240516080526102605160a0526101c05160c0526112ac610280612466565b6102805bf35b63981b24d081186114bf57602436106125d45743600435116125d4576005546101c0526004356040526101c0516060526112ed610200612176565b610200516101e0526101e0516c01431e0fae6d7217ca9fffffff81116125d45760021b600601805461020052600181015461022052600281015461024052600381015461026052506000610280526101c0516101e051106113b75743610260511461147857600435610260518082038281116125d4579050905042610240518082038281116125d457905090508082028115838383041417156125d4579050905043610260518082038281116125d4579050905080156125d4578082049050905061028052611478565b6101e051600181018181106125d45790506c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102a05260018101546102c05260028101546102e0526003810154610300525061030051610260511461147857600435610260518082038281116125d457905090506102e051610240518082038281116125d457905090508082028115838383041417156125d4579050905061030051610260518082038281116125d4579050905080156125d45780820490509050610280525b60206102005160405261022051606052610240516080526102605160a05261024051610280518082018281106125d4579050905060c0526114ba6102a0612466565b6102a0f35b63eb1b68ad811861151d57602436106125d4576004358060a01c6125d45760405260025433186125d4576040516001557f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160605260206060a1005b63a3ce42d0811861156e57600436106125d45760015433186125d4573360025560006001557f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c3360405260206040a1005b63e6719287811861158d57600436106125d45760015460405260206040f35b63f851a44081186115ac57600436106125d45760025460405260206040f35b63047fc9aa81186115cb57600436106125d45760035460405260206040f35b63cbf9fe5f811861161057602436106125d4576004358060a01c6125d45760405260046040516020526000526040600020805460605260018101546080525060406060f35b63900cf0cf811861162f57600436106125d45760055460405260206040f35b63d1febfb9811861168357602436106125d4576004356c01431e0fae6d7217ca9fffffff81116125d45760021b600601805460405260018101546060526002810154608052600381015460a0525060806040f35b6328d09d4781186116f957604436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000066040516020526000526040600020602435633b9ac9ff81116125d45760021b8101905080546060526001810154608052600281015460a052600381015460c0525060806060f35b63010ae757811861174057602436106125d4576004358060a01c6125d4576040526c050c783eb9b5c840000000000760405160205260005260406000205460605260206060f35b6371197484811861177957602436106125d4576c050c783eb9b5c840000000000860043560205260005260406000205460405260206040f35b638ff36fd181186117a457600436106125d4576c050c783eb9b5c84000000000095460405260206040f35b637175d4f781186117cf57600436106125d4576c050c783eb9b5c840000000000a5460405260206040f35b505b60006000fd5b32604051146118cd576c050c783eb9b5c840000000000a546060526060511561184c5760605163c23697a860805260405160a052602060806024609c6000855af1611827573d600060003e3d6000fd5b60203d106125d4576080518060011c6125d45760c05260c09050511561184c576118cd565b60256080527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c60a0527f6c6f77656400000000000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b6101403660e0376005546102205260405115611a095742608051116118f55760006118fd565b600160605112155b1561194557606051630784ce00810590506101005261010051608051428082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905060e0525b4260c0511161195557600061195d565b600160a05112155b156119a65760a051630784ce0081059050610180526101805160c051428082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d45790509050610160525b6c050c783eb9b5c84000000000086080516020526000526040600020546101e05260c05115611a095760805160c051186119e7576101e05161020052611a09565b6c050c783eb9b5c840000000000860c051602052600052604060002054610200525b604036610240374261028052436102a0526102205115611a6457610220516c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102405260018101546102605260028101546102805260038101546102a052505b610280516102c052610240516102e052610260516103005261028051610320526102a0516103405260006103605261028051421115611af357436102a0518082038281116125d45790509050670de0b6b3a7640000810281670de0b6b3a76400008204186125d457905042610280518082038281116125d4579050905080156125d45780820490509050610360525b6102c05162093a808104905062093a8081028162093a808204186125d457905061038052600060ff905b806103a0526103805162093a8081018181106125d45790506103805260006103c052426103805111611b70576c050c783eb9b5c8400000000008610380516020526000526040600020546103c052611b76565b42610380525b6102405161026051610380516102c0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d4579050905061024052610260516103c05180820180600f0b81186125d45790509050610260527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102405113611c10576000610240525b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102605113611c41576000610260525b610380516102c0526103805161028052610340516103605161038051610320518082038281116125d457905090508082028115838383041417156125d45790509050670de0b6b3a7640000810490508082018281106125d457905090506102a05261022051600181018181106125d457905061022052426103805118611ccf57436102a052611d1b56611d10565b610220516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016102405181556102605160018201556102805160028201556102a0516003820155505b600101818118611b1d575b50506102205160055560405115611df15761026051610180516101005180820380600f0b81186125d4579050905080820180600f0b81186125d4579050905061026052610240516101605160e05180820380600f0b81186125d4579050905080820180600f0b81186125d45790509050610240527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102605113611dc0576000610260525b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102405113611df1576000610240525b610220516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016102405181556102605160018201556102805160028201556102a05160038201555060405115611fae57426080511115611eab576101e0516101005180820180600f0b81186125d457905090506101e05260805160c05118611e89576101e0516101805180820380600f0b81186125d457905090506101e0525b6101e0516c050c783eb9b5c84000000000086080516020526000526040600020555b4260c0511115611f005760805160c0511115611f0057610200516101805180820380600f0b81186125d4579050905061020052610200516c050c783eb9b5c840000000000860c0516020526000526040600020555b6c050c783eb9b5c8400000000007604051602052600052604060002054600181018181106125d45790506103a0526103a0516c050c783eb9b5c8400000000007604051602052600052604060002055426101a052436101c0526c050c783eb9b5c840000000000660405160205260005260406000206103a051633b9ac9ff81116125d45760021b810190506101605181556101805160018201556101a05160028201556101c0516003820155505b565b610440516104a052610460516104c0526003546104e0526104e051610400518082018281106125d457905090506003556104a051610500526104c051610520526104a0516104005180607f1c6125d45780820180600f0b81186125d457905090506104a052610420511561202757610420516104c0525b60046103e05160205260005260406000206104a05181556104c0516001820155506103e05160405261050051606052610520516080526104a05160a0526104c05160c0526120736118cf565b61040051156120e75760206125e66000396000516323b872dd610540526103e051610560523061058052610400516105a0526020610540606461055c6000855af16120c3573d600060003e3d6000fd5b60203d106125d457610540518060011c6125d4576105c0526105c0905051156125d4575b6104c0516103e0517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d596104005161054052610480516105605242610580526060610540a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6104e051610540526104e051610400518082018281106125d45790509050610560526040610540a1565b600060805260605160a05260006080905b8060c05260a0516080511061219b5761221c565b60805160a0518082018281106125d45790509050600181018181106125d45790508060011c905060e05260405160e0516c01431e0fae6d7217ca9fffffff81116125d45760021b60060160038101905054111561220a5760e051600181038181116125d457905060a052612211565b60e0516080525b600101818118612187575b5050608051815250565b600060805260605160a05260006080905b8060c05260a0516080511061224b576122cc565b60805160a0518082018281106125d45790509050600181018181106125d45790508060011c905060e05260405160e0516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016002810190505411156122ba5760e051600181038181116125d457905060a0526122c1565b60e0516080525b600101818118612237575b5050608051815250565b600060a05260805160c05260006080905b8060e05260c05160a051106122fb57612394565b60a05160c0518082018281106125d45790509050600181018181106125d45790508060011c9050610100526060516c050c783eb9b5c8400000000006604051602052600052604060002061010051633b9ac9ff81116125d45760021b810190506003810190505411156123815761010051600181038181116125d457905060c052612389565b6101005160a0525b6001018181186122e7575b505060a051815250565b600060a05260805160c05260006080905b8060e05260c05160a051106123c35761245c565b60a05160c0518082018281106125d45790509050600181018181106125d45790508060011c9050610100526060516c050c783eb9b5c8400000000006604051602052600052604060002061010051633b9ac9ff81116125d45760021b810190506002810190505411156124495761010051600181038181116125d457905060c052612451565b6101005160a0525b6001018181186123af575b505060a051815250565b60405160e052606051610100526080516101205260a051610140526101205162093a808104905062093a8081028162093a808204186125d457905061016052600060ff905b80610180526101605162093a8081018181106125d45790506101605260006101a05260c0516101605111612500576c050c783eb9b5c8400000000008610160516020526000526040600020546101a052612508565b60c051610160525b60e0516101005161016051610120518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d4579050905060e05260c051610160511861256357612593565b610100516101a05180820180600f0b81186125d457905090506101005261016051610120526001018181186124ab575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60e051136125c457600060e0525b60e051600081126125d457815250565b600080fda165767970657283000307000b005b600080fd0000000000000000000000009232a548dd9e81bac65500b5e0d918f8ba93675c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13000000000000000000000000000000000000000000000000000000000000001654696d656c65737320566f74696e6720457363726f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000576654c4954000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6003361161000c576117d1565b60003560e01c346125d45763fc0c546a811861003e57600436106125d45760206125e660003960005160405260206040f35b6306fdde03811861009f57600436106125d4576020806040528060400160206126066000396000518082526020820181612626823950508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b41811861010757600436106125d457602080604052806040016020612666600039600051808252602082016020612686600039600051815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63313ce567811861012e57600436106125d45760206126a660003960005160405260206040f35b6357f901e2811861016c57602436106125d4576004358060a01c6125d45760405260025433186125d4576040516c050c783eb9b5c840000000000955005b638e5b490f81186101a857600436106125d45760025433186125d4576c050c783eb9b5c8400000000009546c050c783eb9b5c840000000000a55005b637c74a174811861022a57602436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000076040516020526000526040600020546060526c050c783eb9b5c84000000000066040516020526000526040600020606051633b9ac9ff81116125d45760021b810190506001810190505460805260206080f35b63da020a18811861028c57604436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000066040516020526000526040600020602435633b9ac9ff81116125d45760021b810190506002810190505460605260206060f35b63adc6358981186102cd57602436106125d4576004358060a01c6125d457604052600460405160205260005260406000206001810190505460605260206060f35b63c2c4c5c181186102f057600436106125d45760a0366040376102ee6118cf565b005b633a46273e811861049c57604436106125d4576004358060a01c6125d4576105e0526000546002146125d457600260005560046105e051602052600052604060002080546106005260018101546106205250602435156125d45760016106005112156103bc576016610640527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b426106205111610451576024610640527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610660527f64726177000000000000000000000000000000000000000000000000000000006106805261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b6105e0516103e0526024356104005260006104205260046105e051602052600052604060002080546104405260018101546104605250600061048052610495611fb0565b6003600055005b6365fc387381186106d157604436106125d4576000546002146125d4576002600055336040526104ca6117d7565b60243562093a808104905062093a8081028162093a808204186125d45790506105e052600433602052600052604060002080546106005260018101546106205250600435156125d4576106005115610582576019610640527f5769746864726177206f6c6420746f6b656e73206669727374000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b426105e05111610617576026610640527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e2074686520610660527f66757475726500000000000000000000000000000000000000000000000000006106805261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b42630784ce0081018181106125d45790506105e051111561069857601d610640527f566f74696e67206c6f636b2063616e20626520312079656172206d61780000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b336103e052600435610400526105e05161042052610600516104405261062051610460526001610480526106ca611fb0565b6003600055005b634957677c811861086357602436106125d4576000546002146125d4576002600055336040526106ff6117d7565b600433602052600052604060002080546105e05260018101546106005250600435156125d45760016105e0511215610797576016610620527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006106405261062050610620518061064001601f826000031636823750506308c379a06105e052602061060052601f19601f6106205101166044016105fcfd5b42610600511161082c576024610620527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610640527f64726177000000000000000000000000000000000000000000000000000000006106605261062050610620518061064001601f826000031636823750506308c379a06105e052602061060052601f19601f6106205101166044016105fcfd5b336103e052600435610400526000610420526105e05161044052610600516104605260026104805261085c611fb0565b6003600055005b63eff7a6128118610ae057602436106125d4576000546002146125d4576002600055336040526108916117d7565b600433602052600052604060002080546105e0526001810154610600525060043562093a808104905062093a8081028162093a808204186125d45790506106205242610600511161094257600c610640527f4c6f636b206578706972656400000000000000000000000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b60016105e05112156109b4576011610640527f4e6f7468696e67206973206c6f636b65640000000000000000000000000000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b610600516106205111610a2757601f610640527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b42630784ce0081018181106125d4579050610620511115610aa857601d610640527f566f74696e67206c6f636b2063616e20626520312079656172206d61780000006106605261064050610640518061066001601f826000031636823750506308c379a061060052602061062052601f19601f61064051011660440161061cfd5b336103e05260006104005261062051610420526105e051610440526106005161046052600361048052610ad9611fb0565b6003600055005b633ccfd60b8118610d0a57600436106125d4576000546002146125d4576002600055600433602052600052604060002080546103e0526001810154610400525061040051421015610b91576016610420527f546865206c6f636b206469646e277420657870697265000000000000000000006104405261042050610420518061044001601f826000031636823750506308c379a06103e052602061040052601f19601f6104205101166044016103fcfd5b6103e051600081126125d457610420526103e05161044052610400516104605260006104005260006103e05260043360205260005260406000206103e0518155610400516001820155506003546104805261048051610420518082038281116125d457905090506003553360405261044051606052610460516080526103e05160a0526104005160c052610c236118cf565b60206125e660003960005163a9059cbb6104a052336104c052610420516104e05260206104a060446104bc6000855af1610c62573d600060003e3d6000fd5b60203d106125d4576104a0518060011c6125d45761050052610500905051156125d457337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568610420516104a052426104c05260406104a0a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c610480516104a05261048051610420518082038281116125d457905090506104c05260406104a0a16003600055005b6370a082318118610d2757602436106125d4574261014052610d41565b62fdd58e8118610ed057604436106125d457602435610140525b6004358060a01c6125d45761012052600061016052426101405118610d87576c050c783eb9b5c84000000000076101205160205260005260406000205461016052610dca565b61012051604052610140516060526c050c783eb9b5c840000000000761012051602052600052604060002054608052610dc161018061239e565b61018051610160525b61016051610de6576000610180526020610180610ece56610ece565b6c050c783eb9b5c840000000000661012051602052600052604060002061016051633b9ac9ff81116125d45760021b8101905080546101805260018101546101a05260028101546101c05260038101546101e05250610180516101a051610140516101c0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d45790509050610180527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101805113610eb8576000610180525b61018051600081126125d4576102005260206102005bf35b634ee2cd7e81186111ab57604436106125d4576004358060a01c6125d4576101205243602435116125d457610120516040526024356060526c050c783eb9b5c840000000000761012051602052600052604060002054608052610f346101606122d6565b61016051610140526c050c783eb9b5c840000000000661012051602052600052604060002061014051633b9ac9ff81116125d45760021b8101905080546101605260018101546101805260028101546101a05260038101546101c052506005546101e0526024356040526101e051606052610fb0610220612176565b6102205161020052610200516c01431e0fae6d7217ca9fffffff81116125d45760021b600601805461022052600181015461024052600281015461026052600381015461028052506040366102a0376101e051610200511061103f5743610280518082038281116125d457905090506102a05242610260518082038281116125d457905090506102c0526110c1565b61020051600181018181106125d45790506c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102e0526001810154610300526002810154610320526003810154610340525061034051610280518082038281116125d457905090506102a05261032051610260518082038281116125d457905090506102c0525b610260516102e0526102a05115611127576102e0516102c051602435610280518082038281116125d457905090508082028115838383041417156125d457905090506102a05180156125d457808204905090508082018281106125d457905090506102e0525b61016051610180516102e0516101a0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d457905090506101605260006101605112156111935760006103005260206103006111a9566111a9565b61016051600081126125d4576103005260206103005bf35b6318160ddd81186111c857600436106125d457426101c0526111e3565b63bd85b03981186112b257602436106125d4576004356101c0525b60006101e052426101c051186111ff576005546101e052611220565b6101c051604052600554606052611217610200612226565b610200516101e0525b6101e05161123c5760006102005260206102006112b0566112b0565b6101e0516c01431e0fae6d7217ca9fffffff81116125d45760021b6006018054610200526001810154610220526002810154610240526003810154610260525060206102005160405261022051606052610240516080526102605160a0526101c05160c0526112ac610280612466565b6102805bf35b63981b24d081186114bf57602436106125d45743600435116125d4576005546101c0526004356040526101c0516060526112ed610200612176565b610200516101e0526101e0516c01431e0fae6d7217ca9fffffff81116125d45760021b600601805461020052600181015461022052600281015461024052600381015461026052506000610280526101c0516101e051106113b75743610260511461147857600435610260518082038281116125d4579050905042610240518082038281116125d457905090508082028115838383041417156125d4579050905043610260518082038281116125d4579050905080156125d4578082049050905061028052611478565b6101e051600181018181106125d45790506c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102a05260018101546102c05260028101546102e0526003810154610300525061030051610260511461147857600435610260518082038281116125d457905090506102e051610240518082038281116125d457905090508082028115838383041417156125d4579050905061030051610260518082038281116125d4579050905080156125d45780820490509050610280525b60206102005160405261022051606052610240516080526102605160a05261024051610280518082018281106125d4579050905060c0526114ba6102a0612466565b6102a0f35b63eb1b68ad811861151d57602436106125d4576004358060a01c6125d45760405260025433186125d4576040516001557f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160605260206060a1005b63a3ce42d0811861156e57600436106125d45760015433186125d4573360025560006001557f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c3360405260206040a1005b63e6719287811861158d57600436106125d45760015460405260206040f35b63f851a44081186115ac57600436106125d45760025460405260206040f35b63047fc9aa81186115cb57600436106125d45760035460405260206040f35b63cbf9fe5f811861161057602436106125d4576004358060a01c6125d45760405260046040516020526000526040600020805460605260018101546080525060406060f35b63900cf0cf811861162f57600436106125d45760055460405260206040f35b63d1febfb9811861168357602436106125d4576004356c01431e0fae6d7217ca9fffffff81116125d45760021b600601805460405260018101546060526002810154608052600381015460a0525060806040f35b6328d09d4781186116f957604436106125d4576004358060a01c6125d4576040526c050c783eb9b5c84000000000066040516020526000526040600020602435633b9ac9ff81116125d45760021b8101905080546060526001810154608052600281015460a052600381015460c0525060806060f35b63010ae757811861174057602436106125d4576004358060a01c6125d4576040526c050c783eb9b5c840000000000760405160205260005260406000205460605260206060f35b6371197484811861177957602436106125d4576c050c783eb9b5c840000000000860043560205260005260406000205460405260206040f35b638ff36fd181186117a457600436106125d4576c050c783eb9b5c84000000000095460405260206040f35b637175d4f781186117cf57600436106125d4576c050c783eb9b5c840000000000a5460405260206040f35b505b60006000fd5b32604051146118cd576c050c783eb9b5c840000000000a546060526060511561184c5760605163c23697a860805260405160a052602060806024609c6000855af1611827573d600060003e3d6000fd5b60203d106125d4576080518060011c6125d45760c05260c09050511561184c576118cd565b60256080527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c60a0527f6c6f77656400000000000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b6101403660e0376005546102205260405115611a095742608051116118f55760006118fd565b600160605112155b1561194557606051630784ce00810590506101005261010051608051428082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905060e0525b4260c0511161195557600061195d565b600160a05112155b156119a65760a051630784ce0081059050610180526101805160c051428082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d45790509050610160525b6c050c783eb9b5c84000000000086080516020526000526040600020546101e05260c05115611a095760805160c051186119e7576101e05161020052611a09565b6c050c783eb9b5c840000000000860c051602052600052604060002054610200525b604036610240374261028052436102a0526102205115611a6457610220516c01431e0fae6d7217ca9fffffff81116125d45760021b60060180546102405260018101546102605260028101546102805260038101546102a052505b610280516102c052610240516102e052610260516103005261028051610320526102a0516103405260006103605261028051421115611af357436102a0518082038281116125d45790509050670de0b6b3a7640000810281670de0b6b3a76400008204186125d457905042610280518082038281116125d4579050905080156125d45780820490509050610360525b6102c05162093a808104905062093a8081028162093a808204186125d457905061038052600060ff905b806103a0526103805162093a8081018181106125d45790506103805260006103c052426103805111611b70576c050c783eb9b5c8400000000008610380516020526000526040600020546103c052611b76565b42610380525b6102405161026051610380516102c0518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d4579050905061024052610260516103c05180820180600f0b81186125d45790509050610260527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102405113611c10576000610240525b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102605113611c41576000610260525b610380516102c0526103805161028052610340516103605161038051610320518082038281116125d457905090508082028115838383041417156125d45790509050670de0b6b3a7640000810490508082018281106125d457905090506102a05261022051600181018181106125d457905061022052426103805118611ccf57436102a052611d1b56611d10565b610220516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016102405181556102605160018201556102805160028201556102a0516003820155505b600101818118611b1d575b50506102205160055560405115611df15761026051610180516101005180820380600f0b81186125d4579050905080820180600f0b81186125d4579050905061026052610240516101605160e05180820380600f0b81186125d4579050905080820180600f0b81186125d45790509050610240527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102605113611dc0576000610260525b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102405113611df1576000610240525b610220516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016102405181556102605160018201556102805160028201556102a05160038201555060405115611fae57426080511115611eab576101e0516101005180820180600f0b81186125d457905090506101e05260805160c05118611e89576101e0516101805180820380600f0b81186125d457905090506101e0525b6101e0516c050c783eb9b5c84000000000086080516020526000526040600020555b4260c0511115611f005760805160c0511115611f0057610200516101805180820380600f0b81186125d4579050905061020052610200516c050c783eb9b5c840000000000860c0516020526000526040600020555b6c050c783eb9b5c8400000000007604051602052600052604060002054600181018181106125d45790506103a0526103a0516c050c783eb9b5c8400000000007604051602052600052604060002055426101a052436101c0526c050c783eb9b5c840000000000660405160205260005260406000206103a051633b9ac9ff81116125d45760021b810190506101605181556101805160018201556101a05160028201556101c0516003820155505b565b610440516104a052610460516104c0526003546104e0526104e051610400518082018281106125d457905090506003556104a051610500526104c051610520526104a0516104005180607f1c6125d45780820180600f0b81186125d457905090506104a052610420511561202757610420516104c0525b60046103e05160205260005260406000206104a05181556104c0516001820155506103e05160405261050051606052610520516080526104a05160a0526104c05160c0526120736118cf565b61040051156120e75760206125e66000396000516323b872dd610540526103e051610560523061058052610400516105a0526020610540606461055c6000855af16120c3573d600060003e3d6000fd5b60203d106125d457610540518060011c6125d4576105c0526105c0905051156125d4575b6104c0516103e0517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d596104005161054052610480516105605242610580526060610540a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6104e051610540526104e051610400518082018281106125d45790509050610560526040610540a1565b600060805260605160a05260006080905b8060c05260a0516080511061219b5761221c565b60805160a0518082018281106125d45790509050600181018181106125d45790508060011c905060e05260405160e0516c01431e0fae6d7217ca9fffffff81116125d45760021b60060160038101905054111561220a5760e051600181038181116125d457905060a052612211565b60e0516080525b600101818118612187575b5050608051815250565b600060805260605160a05260006080905b8060c05260a0516080511061224b576122cc565b60805160a0518082018281106125d45790509050600181018181106125d45790508060011c905060e05260405160e0516c01431e0fae6d7217ca9fffffff81116125d45760021b6006016002810190505411156122ba5760e051600181038181116125d457905060a0526122c1565b60e0516080525b600101818118612237575b5050608051815250565b600060a05260805160c05260006080905b8060e05260c05160a051106122fb57612394565b60a05160c0518082018281106125d45790509050600181018181106125d45790508060011c9050610100526060516c050c783eb9b5c8400000000006604051602052600052604060002061010051633b9ac9ff81116125d45760021b810190506003810190505411156123815761010051600181038181116125d457905060c052612389565b6101005160a0525b6001018181186122e7575b505060a051815250565b600060a05260805160c05260006080905b8060e05260c05160a051106123c35761245c565b60a05160c0518082018281106125d45790509050600181018181106125d45790508060011c9050610100526060516c050c783eb9b5c8400000000006604051602052600052604060002061010051633b9ac9ff81116125d45760021b810190506002810190505411156124495761010051600181038181116125d457905060c052612451565b6101005160a0525b6001018181186123af575b505060a051815250565b60405160e052606051610100526080516101205260a051610140526101205162093a808104905062093a8081028162093a808204186125d457905061016052600060ff905b80610180526101605162093a8081018181106125d45790506101605260006101a05260c0516101605111612500576c050c783eb9b5c8400000000008610160516020526000526040600020546101a052612508565b60c051610160525b60e0516101005161016051610120518082038281116125d4579050905080607f1c6125d45780820280600f0b81186125d4579050905080820380600f0b81186125d4579050905060e05260c051610160511861256357612593565b610100516101a05180820180600f0b81186125d457905090506101005261016051610120526001018181186124ab575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60e051136125c457600060e0525b60e051600081126125d457815250565b600080fda165767970657283000307000b0000000000000000000000009232a548dd9e81bac65500b5e0d918f8ba93675c000000000000000000000000000000000000000000000000000000000000001654696d656c65737320566f74696e6720457363726f77000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576654c49540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009232a548dd9e81bac65500b5e0d918f8ba93675c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13000000000000000000000000000000000000000000000000000000000000001654696d656c65737320566f74696e6720457363726f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000576654c4954000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : token_addr (address): 0x9232a548DD9E81BaC65500b5e0d918F8Ba93675C
Arg [1] : _name (string): Timeless Voting Escrow
Arg [2] : _symbol (string): veLIT
Arg [3] : _admin (address): 0x9a8FEe232DCF73060Af348a1B62Cdb0a19852d13
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000009232a548dd9e81bac65500b5e0d918f8ba93675c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [5] : 54696d656c65737320566f74696e6720457363726f7700000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 76654c4954000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.