Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 1,352 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Vote_for_many_ga... | 23176305 | 119 days ago | IN | 0 ETH | 0.00193467 | ||||
| Vote_for_gauge_w... | 22453249 | 220 days ago | IN | 0 ETH | 0.00373621 | ||||
| Vote_for_many_ga... | 21900125 | 298 days ago | IN | 0 ETH | 0.00191171 | ||||
| Vote_for_many_ga... | 21361292 | 373 days ago | IN | 0 ETH | 0.00591857 | ||||
| Vote_for_gauge_w... | 21358061 | 373 days ago | IN | 0 ETH | 0.02676687 | ||||
| Vote_for_many_ga... | 21257169 | 387 days ago | IN | 0 ETH | 0.00180799 | ||||
| Vote_for_many_ga... | 21195768 | 396 days ago | IN | 0 ETH | 0.00589421 | ||||
| Vote_for_many_ga... | 21131182 | 405 days ago | IN | 0 ETH | 0.00834044 | ||||
| Vote_for_many_ga... | 21127534 | 405 days ago | IN | 0 ETH | 0.00430868 | ||||
| Vote_for_many_ga... | 21117671 | 407 days ago | IN | 0 ETH | 0.00106291 | ||||
| Vote_for_many_ga... | 21115783 | 407 days ago | IN | 0 ETH | 0.00299663 | ||||
| Vote_for_many_ga... | 21114988 | 407 days ago | IN | 0 ETH | 0.00297873 | ||||
| Vote_for_many_ga... | 21066519 | 414 days ago | IN | 0 ETH | 0.00302162 | ||||
| Vote_for_gauge_w... | 20970828 | 427 days ago | IN | 0 ETH | 0.00505468 | ||||
| Vote_for_gauge_w... | 20866915 | 442 days ago | IN | 0 ETH | 0.00107056 | ||||
| Vote_for_many_ga... | 20845224 | 445 days ago | IN | 0 ETH | 0.00285793 | ||||
| Vote_for_many_ga... | 20779364 | 454 days ago | IN | 0 ETH | 0.00356707 | ||||
| Vote_for_gauge_w... | 20741787 | 459 days ago | IN | 0 ETH | 0.00031115 | ||||
| Vote_for_many_ga... | 20736351 | 460 days ago | IN | 0 ETH | 0.00197013 | ||||
| Vote_for_gauge_w... | 20730465 | 461 days ago | IN | 0 ETH | 0.00022936 | ||||
| Vote_for_many_ga... | 20656574 | 471 days ago | IN | 0 ETH | 0.00035622 | ||||
| Vote_for_many_ga... | 20652468 | 472 days ago | IN | 0 ETH | 0.00027812 | ||||
| Vote_for_many_ga... | 20629138 | 475 days ago | IN | 0 ETH | 0.0003653 | ||||
| Vote_for_many_ga... | 20613131 | 477 days ago | IN | 0 ETH | 0.00077262 | ||||
| Vote_for_gauge_w... | 20607275 | 478 days ago | IN | 0 ETH | 0.00024111 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60206123 | 16345397 | 1076 days ago | Contract Creation | 0 ETH |
Loading...
Loading
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 Gauge Controller
@author Curve Finance
@license MIT
@notice Controls liquidity gauges and the issuance of coins through the gauges
"""
# 7 * 86400 seconds - all future times are rounded by week
WEEK: constant(uint256) = 604800
# Cannot change weight votes more often than once in 10 days
WEIGHT_VOTE_DELAY: constant(uint256) = 10 * 86400
struct Point:
bias: uint256
slope: uint256
struct VotedSlope:
slope: uint256
power: uint256
end: uint256
interface VotingEscrow:
def token() -> address: view
def get_last_user_slope(addr: address) -> int128: view
def locked__end(addr: address) -> uint256: view
event AddType:
name: String[64]
type_id: int128
event NewTypeWeight:
type_id: int128
time: uint256
weight: uint256
total_weight: uint256
event NewGaugeWeight:
gauge_address: address
time: uint256
weight: uint256
total_weight: uint256
event VoteForGauge:
time: uint256
user: address
gauge_addr: address
weight: uint256
event NewGauge:
addr: address
gauge_type: int128
weight: uint256
event NewPendingAdmin:
new_pending_admin: address
event NewAdmin:
new_admin: address
MULTIPLIER: constant(uint256) = 10 ** 18
TOKEN: immutable(address) # The token to escrow
VOTING_ESCROW: immutable(address) # Voting escrow
pending_admin: public(address)
admin: public(address)
# Gauge parameters
# All numbers are "fixed point" on the basis of 1e18
n_gauge_types: public(int128)
n_gauges: public(int128)
gauge_type_names: public(HashMap[int128, String[64]])
# Needed for enumeration
gauges: public(address[1000000000])
# we increment values by 1 prior to storing them here so we can rely on a value
# of zero as meaning the gauge has not been set
gauge_types_: HashMap[address, int128]
vote_user_slopes: public(HashMap[address, HashMap[address, VotedSlope]]) # user -> gauge_addr -> VotedSlope
vote_user_power: public(HashMap[address, uint256]) # Total vote power used by user
last_user_vote: public(HashMap[address, HashMap[address, uint256]]) # Last user vote's timestamp for each gauge address
# Past and scheduled points for gauge weight, sum of weights per type, total weight
# Point is for bias+slope
# changes_* are for changes in slope
# time_* are for the last change timestamp
# timestamps are rounded to whole weeks
points_weight: public(HashMap[address, HashMap[uint256, Point]]) # gauge_addr -> time -> Point
changes_weight: HashMap[address, HashMap[uint256, uint256]] # gauge_addr -> time -> slope
time_weight: public(HashMap[address, uint256]) # gauge_addr -> last scheduled time (next week)
points_sum: public(HashMap[int128, HashMap[uint256, Point]]) # type_id -> time -> Point
changes_sum: HashMap[int128, HashMap[uint256, uint256]] # type_id -> time -> slope
time_sum: public(uint256[1000000000]) # type_id -> last scheduled time (next week)
points_total: public(HashMap[uint256, uint256]) # time -> total weight
time_total: public(uint256) # last scheduled time
points_type_weight: public(HashMap[int128, HashMap[uint256, uint256]]) # type_id -> time -> type weight
time_type_weight: public(uint256[1000000000]) # type_id -> last scheduled time (next week)
@external
def __init__(_voting_escrow: address, _admin: address):
"""
@notice Contract constructor
@param _voting_escrow `VotingEscrow` contract address
@param _admin The admin address
"""
assert _voting_escrow != empty(address)
assert _admin != empty(address)
TOKEN = VotingEscrow(_voting_escrow).token()
VOTING_ESCROW = _voting_escrow
self.admin = _admin
self.time_total = block.timestamp / WEEK * WEEK
@external
@view
def token() -> address:
return TOKEN
@external
@view
def voting_escrow() -> address:
return VOTING_ESCROW
@external
@view
def gauge_exists(_addr: address) -> bool:
"""
@notice Get whether gauge already exists on GaugeController
@param _addr Gauge address
@return true if the gauge exists
"""
gauge_type: int128 = self.gauge_types_[_addr]
return gauge_type > 0
@external
@view
def gauge_types(_addr: address) -> int128:
"""
@notice Get gauge type for address
@param _addr Gauge address
@return Gauge type id
"""
gauge_type: int128 = self.gauge_types_[_addr]
assert gauge_type != 0
return gauge_type - 1
@internal
def _get_type_weight(gauge_type: int128) -> uint256:
"""
@notice Fill historic type weights week-over-week for missed checkins
and return the type weight for the future week
@param gauge_type Gauge type id
@return Type weight
"""
t: uint256 = self.time_type_weight[gauge_type]
if t > 0:
w: uint256 = self.points_type_weight[gauge_type][t]
for i in range(500):
if t > block.timestamp:
break
t += WEEK
self.points_type_weight[gauge_type][t] = w
if t > block.timestamp:
self.time_type_weight[gauge_type] = t
return w
else:
return 0
@internal
def _get_sum(gauge_type: int128) -> uint256:
"""
@notice Fill sum of gauge weights for the same type week-over-week for
missed checkins and return the sum for the future week
@param gauge_type Gauge type id
@return Sum of weights
"""
t: uint256 = self.time_sum[gauge_type]
if t > 0:
pt: Point = self.points_sum[gauge_type][t]
for i in range(500):
if t > block.timestamp:
break
t += WEEK
d_bias: uint256 = pt.slope * WEEK
if pt.bias > d_bias:
pt.bias -= d_bias
d_slope: uint256 = self.changes_sum[gauge_type][t]
pt.slope -= d_slope
else:
pt.bias = 0
pt.slope = 0
self.points_sum[gauge_type][t] = pt
if t > block.timestamp:
self.time_sum[gauge_type] = t
return pt.bias
else:
return 0
@internal
def _get_total() -> uint256:
"""
@notice Fill historic total weights week-over-week for missed checkins
and return the total for the future week
@return Total weight
"""
t: uint256 = self.time_total
_n_gauge_types: int128 = self.n_gauge_types
if t > block.timestamp:
# If we have already checkpointed - still need to change the value
t -= WEEK
pt: uint256 = self.points_total[t]
for gauge_type in range(100):
if gauge_type == _n_gauge_types:
break
self._get_sum(gauge_type)
self._get_type_weight(gauge_type)
for i in range(500):
if t > block.timestamp:
break
t += WEEK
pt = 0
# Scales as n_types * n_unchecked_weeks (hopefully 1 at most)
for gauge_type in range(100):
if gauge_type == _n_gauge_types:
break
type_sum: uint256 = self.points_sum[gauge_type][t].bias
type_weight: uint256 = self.points_type_weight[gauge_type][t]
pt += type_sum * type_weight
self.points_total[t] = pt
if t > block.timestamp:
self.time_total = t
return pt
@internal
def _get_weight(gauge_addr: address) -> uint256:
"""
@notice Fill historic gauge weights week-over-week for missed checkins
and return the total for the future week
@param gauge_addr Address of the gauge
@return Gauge weight
"""
t: uint256 = self.time_weight[gauge_addr]
if t > 0:
pt: Point = self.points_weight[gauge_addr][t]
for i in range(500):
if t > block.timestamp:
break
t += WEEK
d_bias: uint256 = pt.slope * WEEK
if pt.bias > d_bias:
pt.bias -= d_bias
d_slope: uint256 = self.changes_weight[gauge_addr][t]
pt.slope -= d_slope
else:
pt.bias = 0
pt.slope = 0
self.points_weight[gauge_addr][t] = pt
if t > block.timestamp:
self.time_weight[gauge_addr] = t
return pt.bias
else:
return 0
@external
def add_gauge(addr: address, gauge_type: int128, weight: uint256 = 0):
"""
@notice Add gauge `addr` of type `gauge_type` with weight `weight`
@param addr Gauge address
@param gauge_type Gauge type
@param weight Gauge weight
"""
assert msg.sender == self.admin
assert (gauge_type >= 0) and (gauge_type < self.n_gauge_types)
assert self.gauge_types_[addr] == 0 # dev: cannot add the same gauge twice
n: int128 = self.n_gauges
self.n_gauges = n + 1
self.gauges[n] = addr
self.gauge_types_[addr] = gauge_type + 1
next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK
if weight > 0:
_type_weight: uint256 = self._get_type_weight(gauge_type)
_old_sum: uint256 = self._get_sum(gauge_type)
_old_total: uint256 = self._get_total()
self.points_sum[gauge_type][next_time].bias = weight + _old_sum
self.time_sum[gauge_type] = next_time
self.points_total[next_time] = _old_total + _type_weight * weight
self.time_total = next_time
self.points_weight[addr][next_time].bias = weight
if self.time_sum[gauge_type] == 0:
self.time_sum[gauge_type] = next_time
self.time_weight[addr] = next_time
log NewGauge(addr, gauge_type, weight)
@external
def checkpoint():
"""
@notice Checkpoint to fill data common for all gauges
"""
self._get_total()
@external
def checkpoint_gauge(addr: address):
"""
@notice Checkpoint to fill data for both a specific gauge and common for all gauges
@param addr Gauge address
"""
self._get_weight(addr)
self._get_total()
@internal
@view
def _gauge_relative_weight(addr: address, time: uint256) -> uint256:
"""
@notice Get Gauge relative weight (not more than 1.0) normalized to 1e18
(e.g. 1.0 == 1e18). Inflation which will be received by it is
inflation_rate * relative_weight / 1e18
@param addr Gauge address
@param time Relative weight at the specified timestamp in the past or present
@return Value of relative weight normalized to 1e18
"""
t: uint256 = time / WEEK * WEEK
_total_weight: uint256 = self.points_total[t]
if _total_weight > 0:
gauge_type: int128 = self.gauge_types_[addr] - 1
_type_weight: uint256 = self.points_type_weight[gauge_type][t]
_gauge_weight: uint256 = self.points_weight[addr][t].bias
return MULTIPLIER * _type_weight * _gauge_weight / _total_weight
else:
return 0
@external
@view
def gauge_relative_weight(addr: address, time: uint256 = block.timestamp) -> uint256:
"""
@notice Get Gauge relative weight (not more than 1.0) normalized to 1e18
(e.g. 1.0 == 1e18). Inflation which will be received by it is
inflation_rate * relative_weight / 1e18
@param addr Gauge address
@param time Relative weight at the specified timestamp in the past or present
@return Value of relative weight normalized to 1e18
"""
return self._gauge_relative_weight(addr, time)
@external
def gauge_relative_weight_write(addr: address, time: uint256 = block.timestamp) -> uint256:
"""
@notice Get gauge weight normalized to 1e18 and also fill all the unfilled
values for type and gauge records
@dev Any address can call, however nothing is recorded if the values are filled already
@param addr Gauge address
@param time Relative weight at the specified timestamp in the past or present
@return Value of relative weight normalized to 1e18
"""
self._get_weight(addr)
self._get_total() # Also calculates get_sum
return self._gauge_relative_weight(addr, time)
@internal
def _change_type_weight(type_id: int128, weight: uint256):
"""
@notice Change type weight
@param type_id Type id
@param weight New type weight
"""
old_weight: uint256 = self._get_type_weight(type_id)
old_sum: uint256 = self._get_sum(type_id)
_total_weight: uint256 = self._get_total()
next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK
_total_weight = _total_weight + old_sum * weight - old_sum * old_weight
self.points_total[next_time] = _total_weight
self.points_type_weight[type_id][next_time] = weight
self.time_total = next_time
self.time_type_weight[type_id] = next_time
log NewTypeWeight(type_id, next_time, weight, _total_weight)
@external
def add_type(_name: String[64], weight: uint256 = 0):
"""
@notice Add gauge type with name `_name` and weight `weight`
@param _name Name of gauge type
@param weight Weight of gauge type
"""
assert msg.sender == self.admin
type_id: int128 = self.n_gauge_types
self.gauge_type_names[type_id] = _name
self.n_gauge_types = type_id + 1
if weight != 0:
self._change_type_weight(type_id, weight)
log AddType(_name, type_id)
@external
def change_type_weight(type_id: int128, weight: uint256):
"""
@notice Change gauge type `type_id` weight to `weight`
@param type_id Gauge type id
@param weight New Gauge weight
"""
assert msg.sender == self.admin
self._change_type_weight(type_id, weight)
@internal
def _change_gauge_weight(addr: address, weight: uint256):
# Change gauge weight
# Only needed when testing in reality
gauge_type: int128 = self.gauge_types_[addr] - 1
old_gauge_weight: uint256 = self._get_weight(addr)
type_weight: uint256 = self._get_type_weight(gauge_type)
old_sum: uint256 = self._get_sum(gauge_type)
_total_weight: uint256 = self._get_total()
next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK
self.points_weight[addr][next_time].bias = weight
self.time_weight[addr] = next_time
new_sum: uint256 = old_sum + weight - old_gauge_weight
self.points_sum[gauge_type][next_time].bias = new_sum
self.time_sum[gauge_type] = next_time
_total_weight = _total_weight + new_sum * type_weight - old_sum * type_weight
self.points_total[next_time] = _total_weight
self.time_total = next_time
log NewGaugeWeight(addr, block.timestamp, weight, _total_weight)
@external
def change_gauge_weight(addr: address, weight: uint256):
"""
@notice Change weight of gauge `addr` to `weight`
@param addr `GaugeController` contract address
@param weight New Gauge weight
"""
assert msg.sender == self.admin
self._change_gauge_weight(addr, weight)
@internal
def _vote_for_gauge_weights(_user: address, _gauge_addr: address, _user_weight: uint256):
"""
@notice Allocate voting power for changing pool weights
@param _user User to allocate voting power for
@param _gauge_addr Gauge which _user votes for
@param _user_weight Weight for a gauge in bps (units of 0.01%). Minimal is 0.01%. Ignored if 0
"""
slope: uint256 = convert(VotingEscrow(VOTING_ESCROW).get_last_user_slope(_user), uint256)
lock_end: uint256 = VotingEscrow(VOTING_ESCROW).locked__end(_user)
_n_gauges: int128 = self.n_gauges
next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK
assert lock_end > next_time, "Your token lock expires too soon"
assert (_user_weight >= 0) and (_user_weight <= 10000), "You used all your voting power"
assert block.timestamp >= self.last_user_vote[_user][_gauge_addr] + WEIGHT_VOTE_DELAY, "Cannot vote so often"
gauge_type: int128 = self.gauge_types_[_gauge_addr] - 1
assert gauge_type >= 0, "Gauge not added"
# Prepare slopes and biases in memory
old_slope: VotedSlope = self.vote_user_slopes[_user][_gauge_addr]
old_dt: uint256 = 0
if old_slope.end > next_time:
old_dt = old_slope.end - next_time
old_bias: uint256 = old_slope.slope * old_dt
new_slope: VotedSlope = VotedSlope({
slope: slope * _user_weight / 10000,
power: _user_weight,
end: lock_end
})
new_dt: uint256 = lock_end - next_time # dev: raises when expired
new_bias: uint256 = new_slope.slope * new_dt
# Check and update powers (weights) used
power_used: uint256 = self.vote_user_power[_user]
power_used = power_used + new_slope.power - old_slope.power
self.vote_user_power[_user] = power_used
assert (power_used >= 0) and (power_used <= 10000), 'Used too much power'
## Remove old and schedule new slope changes
# Remove slope changes for old slopes
# Schedule recording of initial slope for next_time
old_weight_bias: uint256 = self._get_weight(_gauge_addr)
old_weight_slope: uint256 = self.points_weight[_gauge_addr][next_time].slope
old_sum_bias: uint256 = self._get_sum(gauge_type)
old_sum_slope: uint256 = self.points_sum[gauge_type][next_time].slope
self.points_weight[_gauge_addr][next_time].bias = max(old_weight_bias + new_bias, old_bias) - old_bias
self.points_sum[gauge_type][next_time].bias = max(old_sum_bias + new_bias, old_bias) - old_bias
if old_slope.end > next_time:
self.points_weight[_gauge_addr][next_time].slope = max(old_weight_slope + new_slope.slope, old_slope.slope) - old_slope.slope
self.points_sum[gauge_type][next_time].slope = max(old_sum_slope + new_slope.slope, old_slope.slope) - old_slope.slope
else:
self.points_weight[_gauge_addr][next_time].slope += new_slope.slope
self.points_sum[gauge_type][next_time].slope += new_slope.slope
if old_slope.end > block.timestamp:
# Cancel old slope changes if they still didn't happen
self.changes_weight[_gauge_addr][old_slope.end] -= old_slope.slope
self.changes_sum[gauge_type][old_slope.end] -= old_slope.slope
# Add slope changes for new slopes
self.changes_weight[_gauge_addr][new_slope.end] += new_slope.slope
self.changes_sum[gauge_type][new_slope.end] += new_slope.slope
self._get_total()
self.vote_user_slopes[_user][_gauge_addr] = new_slope
# Record last action time
self.last_user_vote[_user][_gauge_addr] = block.timestamp
log VoteForGauge(block.timestamp, _user, _gauge_addr, _user_weight)
@external
@nonreentrant('lock')
def vote_for_many_gauge_weights(_gauge_addrs: address[8], _user_weight: uint256[8]):
for i in range(8):
if _gauge_addrs[i] == empty(address):
break
self._vote_for_gauge_weights(msg.sender, _gauge_addrs[i], _user_weight[i])
@external
def vote_for_gauge_weights(_gauge_addr: address, _user_weight: uint256):
self._vote_for_gauge_weights(msg.sender, _gauge_addr, _user_weight)
@external
@view
def get_gauge_weight(addr: address) -> uint256:
"""
@notice Get current gauge weight
@param addr Gauge address
@return Gauge weight
"""
return self.points_weight[addr][self.time_weight[addr]].bias
@external
@view
def get_type_weight(type_id: int128) -> uint256:
"""
@notice Get current type weight
@param type_id Type id
@return Type weight
"""
return self.points_type_weight[type_id][self.time_type_weight[type_id]]
@external
@view
def get_total_weight() -> uint256:
"""
@notice Get current total (type-weighted) weight
@return Total weight
"""
return self.points_total[self.time_total]
@external
@view
def get_weights_sum_per_type(type_id: int128) -> uint256:
"""
@notice Get sum of gauge weights per type
@param type_id Type id
@return Sum of gauge weights
"""
return self.points_sum[type_id][self.time_sum[type_id]].bias
@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":"AddType","inputs":[{"name":"name","type":"string","indexed":false},{"name":"type_id","type":"int128","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewTypeWeight","inputs":[{"name":"type_id","type":"int128","indexed":false},{"name":"time","type":"uint256","indexed":false},{"name":"weight","type":"uint256","indexed":false},{"name":"total_weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewGaugeWeight","inputs":[{"name":"gauge_address","type":"address","indexed":false},{"name":"time","type":"uint256","indexed":false},{"name":"weight","type":"uint256","indexed":false},{"name":"total_weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"VoteForGauge","inputs":[{"name":"time","type":"uint256","indexed":false},{"name":"user","type":"address","indexed":false},{"name":"gauge_addr","type":"address","indexed":false},{"name":"weight","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewGauge","inputs":[{"name":"addr","type":"address","indexed":false},{"name":"gauge_type","type":"int128","indexed":false},{"name":"weight","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":"_voting_escrow","type":"address"},{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauge_exists","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"gauge_types","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_gauge","inputs":[{"name":"addr","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"change_type_weight","inputs":[{"name":"type_id","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"change_gauge_weight","inputs":[{"name":"addr","type":"address"},{"name":"weight","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"vote_for_many_gauge_weights","inputs":[{"name":"_gauge_addrs","type":"address[8]"},{"name":"_user_weight","type":"uint256[8]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"vote_for_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address"},{"name":"_user_weight","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_gauge_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_type_weight","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_total_weight","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_weights_sum_per_type","inputs":[{"name":"type_id","type":"int128"}],"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":"n_gauge_types","inputs":[],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"n_gauges","inputs":[],"outputs":[{"name":"","type":"int128"}]},{"stateMutability":"view","type":"function","name":"gauge_type_names","inputs":[{"name":"arg0","type":"int128"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vote_user_slopes","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"slope","type":"uint256"},{"name":"power","type":"uint256"},{"name":"end","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"vote_user_power","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"last_user_vote","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"points_weight","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"time_weight","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"points_sum","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"time_sum","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"points_total","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"time_total","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"points_type_weight","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"time_type_weight","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]}]Contract Creation Code
60206123e26000396000518060a01c6123dd5760405260206124026000396000518060a01c6123dd57606052346123dd57604051156123dd57606051156123dd5760405163fc0c546a608052602060806004609c845afa610065573d600060003e3d6000fd5b60203d106123dd576080518060a01c6123dd5760c05260c090505161231652604051612336526060516002554262093a808104905062093a8081028162093a808204186123dd5790506377359410556123166100c661000039612356610000f36003361161000c57610efc565b60003560e01c346123045763fc0c546a811861003e576004361061230457602061231660003960005160405260206040f35b63dfe050318118610065576004361061230457602061233660003960005160405260206040f35b6361df1bf981186100ac5760243610612304576004358060a01c61230457604052633b9aca0660405160205260005260406000205460605260006060511360805260206080f35b633f9095b781186101085760243610612304576004358060a01c61230457604052633b9aca0660405160205260005260406000205460605260605115612304576060516001810380600f0b811861230457905060805260206080f35b633a04f9008118610126576044361061230457600061024052610141565b6318dfe92181186103e1576064361061230457604435610240525b6004358060a01c612304576102005260243580600f0b81186123045761022052600254331861230457600061022051121561017d576000610186565b60035461022051125b1561230457633b9aca06610200516020526000526040600020546123045760045461026052610260516001810180600f0b81186123045790506004556102005161026051633b9ac9ff81116123045760060155610220516001810180600f0b8118612304579050633b9aca06610200516020526000526040600020554262093a80810181811061230457905062093a808104905062093a8081028162093a80820418612304579050610280526102405115610352576102205160405261024d6102c0610f02565b6102c0516102a052610220516040526102676102e0610fe8565b6102e0516102c05261027a61030061116b565b610300516102e052610240516102c0518082018281106123045790509050633b9aca0d610220516020526000526040600020806102805160205260005260406000209050556102805161022051633b9ac9ff811161230457633b9aca0f01556102e0516102a0516102405180820281158383830414171561230457905090508082018281106123045790509050637735940f610280516020526000526040600020556102805163773594105561024051633b9aca0a610200516020526000526040600020806102805160205260005260406000209050555b61022051633b9ac9ff811161230457633b9aca0f0154610387576102805161022051633b9ac9ff811161230457633b9aca0f01555b61028051633b9aca0c610200516020526000526040600020557ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd877610200516102a052610220516102c052610240516102e05260606102a0a1005b63c2c4c5c181186104055760043610612304576103ff61020061116b565b61020050005b63615e5237811861044e5760243610612304576004358060a01c61230457610200526102005160405261043961022061133e565b6102205061044861022061116b565b61022050005b636207d866811861046b5760243610612304574261014052610486565b63d3078c9481186104b5576044361061230457602435610140525b6004358060a01c6123045761012052602061012051604052610140516060526104b06101606114bf565b610160f35b6395cfcec381186104d257602436106123045742610220526104ed565b636472eee18118610541576044361061230457602435610220525b6004358060a01c61230457610200526102005160405261050e61024061133e565b6102405061051d61024061116b565b610240506020610200516040526102205160605261053c6102406114bf565b610240f35b6326e56d5e811861055f57604436106123045760006103a05261057a565b6392d0d23281186106bf5760643610612304576024356103a0525b60043560040160408135116123045780358061034052602082018181610360375050506002543318612304576003546103c052610340518060056103c051602052600052604060002055600160056103c051602052600052604060002001600082601f0160051c6002811161230457801561060957905b8060051b6103600151818401556001018181186105f1575b505050506103c0516001810180600f0b81186123045790506003556103a051156106bd576103c051610200526103a051610220526106456115d5565b7f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc846040806103e052806103e001610340518082526020820181818361036060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506103c051610400526103e0a15b005b63db1ca260811861070557604436106123045760043580600f0b811861230457610340526002543318612304576103405161020052602435610220526107036115d5565b005b63d4d2646e81186107495760443610612304576004358060a01c612304576103a0526002543318612304576103a0516102005260243561022052610747611758565b005b632e4e99a1811861085d576102043610612304576004358060a01c61230457610560526024358060a01c61230457610580526044358060a01c612304576105a0526064358060a01c612304576105c0526084358060a01c612304576105e05260a4358060a01c612304576106005260c4358060a01c612304576106205260e4358060a01c612304576106405260005460021461230457600260005560006008905b806106605261066051600781116123045760051b610560015161080c57610854565b336102005261066051600781116123045760051b61056001516102205261066051600781116123045760051b61010401356102405261084961198c565b6001018181186107ea575b50506003600055005b63d7136328811861089d5760443610612304576004358060a01c6123045761056052336102005261056051610220526024356102405261089b61198c565b005b634e791a3a81186108fd5760243610612304576004358060a01c61230457604052633b9aca0a604051602052600052604060002080633b9aca0c604051602052600052604060002054602052600052604060002090505460605260206060f35b6372fdccfa811861096057602436106123045760043580600f0b8118612304576040526377359411604051602052600052604060002080604051633b9ac9ff81116123045763773594120154602052600052604060002090505460605260206060f35b636977ff928118610993576004361061230457637735940f63773594105460205260005260406000205460405260206040f35b636f214a6a81186109f657602436106123045760043580600f0b811861230457604052633b9aca0d604051602052600052604060002080604051633b9ac9ff811161230457633b9aca0f0154602052600052604060002090505460605260206060f35b63eb1b68ad8118610a545760243610612304576004358060a01c612304576040526002543318612304576040516001557f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160605260206060a1005b63a3ce42d08118610aa55760043610612304576001543318612304573360025560006001557f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c3360405260206040a1005b63e67192878118610ac457600436106123045760015460405260206040f35b63f851a4408118610ae357600436106123045760025460405260206040f35b639fba03a18118610b0257600436106123045760035460405260206040f35b63e93841d08118610b2157600436106123045760045460405260206040f35b63d958a8fc8118610bcb57602436106123045760043580600f0b811861230457604052602080606052600560405160205260005260406000208160600181548082526001830160208301600083601f0160051c60028111612304578015610b9a57905b808401548160051b840152600101818118610b84575b50505050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506060f35b63b05391878118610bf9576024361061230457600435633b9ac9ff8111612304576006015460405260206040f35b630f467f988118610c685760443610612304576004358060a01c612304576040526024358060a01c61230457606052633b9aca07604051602052600052604060002080606051602052600052604060002090508054608052600181015460a052600281015460c0525060606080f35b63411e74b58118610ca65760243610612304576004358060a01c61230457604052633b9aca0860405160205260005260406000205460605260206060f35b637e418fa08118610d035760443610612304576004358060a01c612304576040526024358060a01c61230457606052633b9aca09604051602052600052604060002080606051602052600052604060002090505460805260206080f35b63edba52738118610d5c5760443610612304576004358060a01c61230457604052633b9aca0a60405160205260005260406000208060243560205260005260406000209050805460605260018101546080525060406060f35b63a4d7a2508118610d9a5760243610612304576004358060a01c61230457604052633b9aca0c60405160205260005260406000205460605260206060f35b63a9b48c018118610df557604436106123045760043580600f0b811861230457604052633b9aca0d60405160205260005260406000208060243560205260005260406000209050805460605260018101546080525060406060f35b635a5491588118610e26576024361061230457600435633b9ac9ff811161230457633b9aca0f015460405260206040f35b631142916b8118610e56576024361061230457637735940f60043560205260005260406000205460405260206040f35b63513872bd8118610e7857600436106123045763773594105460405260206040f35b63afd2bb498118610ec957604436106123045760043580600f0b8118612304576040526377359411604051602052600052604060002080602435602052600052604060002090505460605260206060f35b6351ce6b598118610efa576024361061230457600435633b9ac9ff8111612304576377359412015460405260206040f35b505b60006000fd5b604051633b9ac9ff8111612304576377359412015460605260605115610fe0576377359411604051602052600052604060002080606051602052600052604060002090505460805260006101f4905b8060a052426060511115610f6457610fcf565b60605162093a80810181811061230457905060605260805163773594116040516020526000526040600020806060516020526000526040600020905055426060511115610fc457606051604051633b9ac9ff811161230457637735941201555b600101818118610f51575b5050608051815250610fe656610fe6565b60008152505b565b604051633b9ac9ff811161230457633b9aca0f01546060526060511561116357633b9aca0d604051602052600052604060002080606051602052600052604060002090508054608052600181015460a0525060006101f4905b8060c05242606051111561105457611152565b60605162093a80810181811061230457905060605260a05162093a8081028162093a8082041861230457905060e05260e05160805111611099576040366080376110f2565b60805160e0518082038281116123045790509050608052633b9aca0e60405160205260005260406000208060605160205260005260406000209050546101005260a05161010051808203828111612304579050905060a0525b633b9aca0d60405160205260005260406000208060605160205260005260406000209050608051815560a05160018201555042606051111561114757606051604051633b9ac9ff811161230457633b9aca0f01555b600101818118611041575b505060805181525061116956611169565b60008152505b565b63773594105461012052600354610140524261012051111561119f576101205162093a808103818111612304579050610120525b637735940f610120516020526000526040600020546101605260006064905b80610180526101405161018051186111d55761120c565b610180516040526111e76101a0610fe8565b6101a050610180516040526111fd6101a0610f02565b6101a0506001018181186111be575b505060006101f4905b80610180524261012051111561122a57611333565b6101205162093a8081018181106123045790506101205260006101605260006064905b806101a052610140516101a05118611264576112f7565b633b9aca0d6101a0516020526000526040600020806101205160205260005260406000209050546101c05263773594116101a0516020526000526040600020806101205160205260005260406000209050546101e052610160516101c0516101e051808202811583838304141715612304579050905080820182811061230457905090506101605260010181811861124d575b505061016051637735940f610120516020526000526040600020554261012051111561132857610120516377359410555b600101818118611215575b505061016051815250565b633b9aca0c604051602052600052604060002054606052606051156114b757633b9aca0a604051602052600052604060002080606051602052600052604060002090508054608052600181015460a0525060006101f4905b8060c0524260605111156113a9576114a6565b60605162093a80810181811061230457905060605260a05162093a8081028162093a8082041861230457905060e05260e051608051116113ee57604036608037611447565b60805160e0518082038281116123045790509050608052633b9aca0b60405160205260005260406000208060605160205260005260406000209050546101005260a05161010051808203828111612304579050905060a0525b633b9aca0a60405160205260005260406000208060605160205260005260406000209050608051815560a05160018201555042606051111561149b57606051633b9aca0c6040516020526000526040600020555b600101818118611396575b50506080518152506114bd566114bd565b60008152505b565b60605162093a808104905062093a8081028162093a80820418612304579050608052637735940f60805160205260005260406000205460a05260a051156115cd57633b9aca066040516020526000526040600020546001810380600f0b811861230457905060c052637735941160c051602052600052604060002080608051602052600052604060002090505460e052633b9aca0a60405160205260005260406000208060805160205260005260406000209050546101005260e051670de0b6b3a7640000810281670de0b6b3a764000082041861230457905061010051808202811583838304141715612304579050905060a051801561230457808204905090508152506115d3566115d3565b60008152505b565b610200516040526115e7610260610f02565b610260516102405261020051604052611601610280610fe8565b61028051610260526116146102a061116b565b6102a051610280524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102a052610280516102605161022051808202811583838304141715612304579050905080820182811061230457905090506102605161024051808202811583838304141715612304579050905080820382811161230457905090506102805261028051637735940f6102a051602052600052604060002055610220516377359411610200516020526000526040600020806102a05160205260005260406000209050556102a0516377359410556102a05161020051633b9ac9ff811161230457637735941201557e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f901610200516102c0526102a0516102e0526102205161030052610280516103205260806102c0a1565b633b9aca06610200516020526000526040600020546001810380600f0b8118612304579050610240526102005160405261179361028061133e565b6102805161026052610240516040526117ad6102a0610f02565b6102a05161028052610240516040526117c76102c0610fe8565b6102c0516102a0526117da6102e061116b565b6102e0516102c0524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102e05261022051633b9aca0a610200516020526000526040600020806102e05160205260005260406000209050556102e051633b9aca0c610200516020526000526040600020556102a0516102205180820182811061230457905090506102605180820382811161230457905090506103005261030051633b9aca0d610240516020526000526040600020806102e05160205260005260406000209050556102e05161024051633b9ac9ff811161230457633b9aca0f01556102c0516103005161028051808202811583838304141715612304579050905080820182811061230457905090506102a05161028051808202811583838304141715612304579050905080820382811161230457905090506102c0526102c051637735940f6102e0516020526000526040600020556102e0516377359410557f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726102005161032052426103405261022051610360526102c051610380526080610320a1565b6020612336600039600051637c74a17461028052610200516102a0526020610280602461029c845afa6119c4573d600060003e3d6000fd5b60203d10612304576102805180600f0b8118612304576102c0526102c0905051600081126123045761026052602061233660003960005163adc635896102a052610200516102c05260206102a060246102bc845afa611a28573d600060003e3d6000fd5b60203d10612304576102a0905051610280526004546102a0524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102c0526102c0516102805111611ae45760206102e0527f596f757220746f6b656e206c6f636b206578706972657320746f6f20736f6f6e610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b6000610240511015611af7576000611b01565b6127106102405111155b611b6b57601e6102e0527f596f75207573656420616c6c20796f757220766f74696e6720706f7765720000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b633b9aca0961020051602052600052604060002080610220516020526000526040600020905054620d2f008101818110612304579050421015611c0e5760146102e0527f43616e6e6f7420766f746520736f206f6674656e000000000000000000000000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b633b9aca06610220516020526000526040600020546001810380600f0b81186123045790506102e05260006102e0511215611ca957600f610300527f4761756765206e6f7420616464656400000000000000000000000000000000006103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b633b9aca07610200516020526000526040600020806102205160205260005260406000209050805461030052600181015461032052600281015461034052506000610360526102c051610340511115611d1757610340516102c0518082038281116123045790509050610360525b610300516103605180820281158383830414171561230457905090506103805261026051610240518082028115838383041417156123045790509050612710810490506103a052610240516103c052610280516103e052610280516102c0518082038281116123045790509050610400526103a05161040051808202811583838304141715612304579050905061042052633b9aca086102005160205260005260406000205461044052610440516103c05180820182811061230457905090506103205180820382811161230457905090506104405261044051633b9aca08610200516020526000526040600020556000610440511015611e19576000611e23565b6127106104405111155b611e8d576013610460527f5573656420746f6f206d75636820706f776572000000000000000000000000006104805261046050610460518061048001601f826000031636823750506308c379a061042052602061044052601f19601f61046051011660440161043cfd5b61022051604052611e9f61048061133e565b6104805161046052633b9aca0a610220516020526000526040600020806102c0516020526000526040600020905060018101905054610480526102e051604052611eea6104c0610fe8565b6104c0516104a052633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050600181019050546104c052610460516104205180820182811061230457905090506103805180828118828411021890509050610380518082038281116123045790509050633b9aca0a610220516020526000526040600020806102c05160205260005260406000209050556104a0516104205180820182811061230457905090506103805180828118828411021890509050610380518082038281116123045790509050633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050556102c051610340511161207b57633b9aca0a610220516020526000526040600020806102c0516020526000526040600020905060018101905080546103a0518082018281106123045790509050815550633b9aca0d6102e0516020526000526040600020806102c0516020526000526040600020905060018101905080546103a0518082018281106123045790509050815550612148565b610480516103a05180820182811061230457905090506103005180828118828411021890509050610300518082038281116123045790509050633b9aca0a610220516020526000526040600020806102c05160205260005260406000209050600181019050556104c0516103a05180820182811061230457905090506103005180828118828411021890509050610300518082038281116123045790509050633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050600181019050555b426103405111156121ce57633b9aca0b6102205160205260005260406000208061034051602052600052604060002090508054610300518082038281116123045790509050815550633b9aca0e6102e051602052600052604060002080610340516020526000526040600020905080546103005180820382811161230457905090508155505b633b9aca0b610220516020526000526040600020806103e0516020526000526040600020905080546103a0518082018281106123045790509050815550633b9aca0e6102e0516020526000526040600020806103e0516020526000526040600020905080546103a05180820182811061230457905090508155506122536104e061116b565b6104e050633b9aca076102005160205260005260406000208061022051602052600052604060002090506103a05181556103c05160018201556103e05160028201555042633b9aca09610200516020526000526040600020806102205160205260005260406000209050557f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc91426104e05261020051610500526102205161052052610240516105405260806104e0a1565b600080fda165767970657283000307000b005b600080fd000000000000000000000000f17d23136b4fead139f54fb766c8795faae096600000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13
Deployed Bytecode
0x6003361161000c57610efc565b60003560e01c346123045763fc0c546a811861003e576004361061230457602061231660003960005160405260206040f35b63dfe050318118610065576004361061230457602061233660003960005160405260206040f35b6361df1bf981186100ac5760243610612304576004358060a01c61230457604052633b9aca0660405160205260005260406000205460605260006060511360805260206080f35b633f9095b781186101085760243610612304576004358060a01c61230457604052633b9aca0660405160205260005260406000205460605260605115612304576060516001810380600f0b811861230457905060805260206080f35b633a04f9008118610126576044361061230457600061024052610141565b6318dfe92181186103e1576064361061230457604435610240525b6004358060a01c612304576102005260243580600f0b81186123045761022052600254331861230457600061022051121561017d576000610186565b60035461022051125b1561230457633b9aca06610200516020526000526040600020546123045760045461026052610260516001810180600f0b81186123045790506004556102005161026051633b9ac9ff81116123045760060155610220516001810180600f0b8118612304579050633b9aca06610200516020526000526040600020554262093a80810181811061230457905062093a808104905062093a8081028162093a80820418612304579050610280526102405115610352576102205160405261024d6102c0610f02565b6102c0516102a052610220516040526102676102e0610fe8565b6102e0516102c05261027a61030061116b565b610300516102e052610240516102c0518082018281106123045790509050633b9aca0d610220516020526000526040600020806102805160205260005260406000209050556102805161022051633b9ac9ff811161230457633b9aca0f01556102e0516102a0516102405180820281158383830414171561230457905090508082018281106123045790509050637735940f610280516020526000526040600020556102805163773594105561024051633b9aca0a610200516020526000526040600020806102805160205260005260406000209050555b61022051633b9ac9ff811161230457633b9aca0f0154610387576102805161022051633b9ac9ff811161230457633b9aca0f01555b61028051633b9aca0c610200516020526000526040600020557ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd877610200516102a052610220516102c052610240516102e05260606102a0a1005b63c2c4c5c181186104055760043610612304576103ff61020061116b565b61020050005b63615e5237811861044e5760243610612304576004358060a01c61230457610200526102005160405261043961022061133e565b6102205061044861022061116b565b61022050005b636207d866811861046b5760243610612304574261014052610486565b63d3078c9481186104b5576044361061230457602435610140525b6004358060a01c6123045761012052602061012051604052610140516060526104b06101606114bf565b610160f35b6395cfcec381186104d257602436106123045742610220526104ed565b636472eee18118610541576044361061230457602435610220525b6004358060a01c61230457610200526102005160405261050e61024061133e565b6102405061051d61024061116b565b610240506020610200516040526102205160605261053c6102406114bf565b610240f35b6326e56d5e811861055f57604436106123045760006103a05261057a565b6392d0d23281186106bf5760643610612304576024356103a0525b60043560040160408135116123045780358061034052602082018181610360375050506002543318612304576003546103c052610340518060056103c051602052600052604060002055600160056103c051602052600052604060002001600082601f0160051c6002811161230457801561060957905b8060051b6103600151818401556001018181186105f1575b505050506103c0516001810180600f0b81186123045790506003556103a051156106bd576103c051610200526103a051610220526106456115d5565b7f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc846040806103e052806103e001610340518082526020820181818361036060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506103c051610400526103e0a15b005b63db1ca260811861070557604436106123045760043580600f0b811861230457610340526002543318612304576103405161020052602435610220526107036115d5565b005b63d4d2646e81186107495760443610612304576004358060a01c612304576103a0526002543318612304576103a0516102005260243561022052610747611758565b005b632e4e99a1811861085d576102043610612304576004358060a01c61230457610560526024358060a01c61230457610580526044358060a01c612304576105a0526064358060a01c612304576105c0526084358060a01c612304576105e05260a4358060a01c612304576106005260c4358060a01c612304576106205260e4358060a01c612304576106405260005460021461230457600260005560006008905b806106605261066051600781116123045760051b610560015161080c57610854565b336102005261066051600781116123045760051b61056001516102205261066051600781116123045760051b61010401356102405261084961198c565b6001018181186107ea575b50506003600055005b63d7136328811861089d5760443610612304576004358060a01c6123045761056052336102005261056051610220526024356102405261089b61198c565b005b634e791a3a81186108fd5760243610612304576004358060a01c61230457604052633b9aca0a604051602052600052604060002080633b9aca0c604051602052600052604060002054602052600052604060002090505460605260206060f35b6372fdccfa811861096057602436106123045760043580600f0b8118612304576040526377359411604051602052600052604060002080604051633b9ac9ff81116123045763773594120154602052600052604060002090505460605260206060f35b636977ff928118610993576004361061230457637735940f63773594105460205260005260406000205460405260206040f35b636f214a6a81186109f657602436106123045760043580600f0b811861230457604052633b9aca0d604051602052600052604060002080604051633b9ac9ff811161230457633b9aca0f0154602052600052604060002090505460605260206060f35b63eb1b68ad8118610a545760243610612304576004358060a01c612304576040526002543318612304576040516001557f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160605260206060a1005b63a3ce42d08118610aa55760043610612304576001543318612304573360025560006001557f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c3360405260206040a1005b63e67192878118610ac457600436106123045760015460405260206040f35b63f851a4408118610ae357600436106123045760025460405260206040f35b639fba03a18118610b0257600436106123045760035460405260206040f35b63e93841d08118610b2157600436106123045760045460405260206040f35b63d958a8fc8118610bcb57602436106123045760043580600f0b811861230457604052602080606052600560405160205260005260406000208160600181548082526001830160208301600083601f0160051c60028111612304578015610b9a57905b808401548160051b840152600101818118610b84575b50505050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506060f35b63b05391878118610bf9576024361061230457600435633b9ac9ff8111612304576006015460405260206040f35b630f467f988118610c685760443610612304576004358060a01c612304576040526024358060a01c61230457606052633b9aca07604051602052600052604060002080606051602052600052604060002090508054608052600181015460a052600281015460c0525060606080f35b63411e74b58118610ca65760243610612304576004358060a01c61230457604052633b9aca0860405160205260005260406000205460605260206060f35b637e418fa08118610d035760443610612304576004358060a01c612304576040526024358060a01c61230457606052633b9aca09604051602052600052604060002080606051602052600052604060002090505460805260206080f35b63edba52738118610d5c5760443610612304576004358060a01c61230457604052633b9aca0a60405160205260005260406000208060243560205260005260406000209050805460605260018101546080525060406060f35b63a4d7a2508118610d9a5760243610612304576004358060a01c61230457604052633b9aca0c60405160205260005260406000205460605260206060f35b63a9b48c018118610df557604436106123045760043580600f0b811861230457604052633b9aca0d60405160205260005260406000208060243560205260005260406000209050805460605260018101546080525060406060f35b635a5491588118610e26576024361061230457600435633b9ac9ff811161230457633b9aca0f015460405260206040f35b631142916b8118610e56576024361061230457637735940f60043560205260005260406000205460405260206040f35b63513872bd8118610e7857600436106123045763773594105460405260206040f35b63afd2bb498118610ec957604436106123045760043580600f0b8118612304576040526377359411604051602052600052604060002080602435602052600052604060002090505460605260206060f35b6351ce6b598118610efa576024361061230457600435633b9ac9ff8111612304576377359412015460405260206040f35b505b60006000fd5b604051633b9ac9ff8111612304576377359412015460605260605115610fe0576377359411604051602052600052604060002080606051602052600052604060002090505460805260006101f4905b8060a052426060511115610f6457610fcf565b60605162093a80810181811061230457905060605260805163773594116040516020526000526040600020806060516020526000526040600020905055426060511115610fc457606051604051633b9ac9ff811161230457637735941201555b600101818118610f51575b5050608051815250610fe656610fe6565b60008152505b565b604051633b9ac9ff811161230457633b9aca0f01546060526060511561116357633b9aca0d604051602052600052604060002080606051602052600052604060002090508054608052600181015460a0525060006101f4905b8060c05242606051111561105457611152565b60605162093a80810181811061230457905060605260a05162093a8081028162093a8082041861230457905060e05260e05160805111611099576040366080376110f2565b60805160e0518082038281116123045790509050608052633b9aca0e60405160205260005260406000208060605160205260005260406000209050546101005260a05161010051808203828111612304579050905060a0525b633b9aca0d60405160205260005260406000208060605160205260005260406000209050608051815560a05160018201555042606051111561114757606051604051633b9ac9ff811161230457633b9aca0f01555b600101818118611041575b505060805181525061116956611169565b60008152505b565b63773594105461012052600354610140524261012051111561119f576101205162093a808103818111612304579050610120525b637735940f610120516020526000526040600020546101605260006064905b80610180526101405161018051186111d55761120c565b610180516040526111e76101a0610fe8565b6101a050610180516040526111fd6101a0610f02565b6101a0506001018181186111be575b505060006101f4905b80610180524261012051111561122a57611333565b6101205162093a8081018181106123045790506101205260006101605260006064905b806101a052610140516101a05118611264576112f7565b633b9aca0d6101a0516020526000526040600020806101205160205260005260406000209050546101c05263773594116101a0516020526000526040600020806101205160205260005260406000209050546101e052610160516101c0516101e051808202811583838304141715612304579050905080820182811061230457905090506101605260010181811861124d575b505061016051637735940f610120516020526000526040600020554261012051111561132857610120516377359410555b600101818118611215575b505061016051815250565b633b9aca0c604051602052600052604060002054606052606051156114b757633b9aca0a604051602052600052604060002080606051602052600052604060002090508054608052600181015460a0525060006101f4905b8060c0524260605111156113a9576114a6565b60605162093a80810181811061230457905060605260a05162093a8081028162093a8082041861230457905060e05260e051608051116113ee57604036608037611447565b60805160e0518082038281116123045790509050608052633b9aca0b60405160205260005260406000208060605160205260005260406000209050546101005260a05161010051808203828111612304579050905060a0525b633b9aca0a60405160205260005260406000208060605160205260005260406000209050608051815560a05160018201555042606051111561149b57606051633b9aca0c6040516020526000526040600020555b600101818118611396575b50506080518152506114bd566114bd565b60008152505b565b60605162093a808104905062093a8081028162093a80820418612304579050608052637735940f60805160205260005260406000205460a05260a051156115cd57633b9aca066040516020526000526040600020546001810380600f0b811861230457905060c052637735941160c051602052600052604060002080608051602052600052604060002090505460e052633b9aca0a60405160205260005260406000208060805160205260005260406000209050546101005260e051670de0b6b3a7640000810281670de0b6b3a764000082041861230457905061010051808202811583838304141715612304579050905060a051801561230457808204905090508152506115d3566115d3565b60008152505b565b610200516040526115e7610260610f02565b610260516102405261020051604052611601610280610fe8565b61028051610260526116146102a061116b565b6102a051610280524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102a052610280516102605161022051808202811583838304141715612304579050905080820182811061230457905090506102605161024051808202811583838304141715612304579050905080820382811161230457905090506102805261028051637735940f6102a051602052600052604060002055610220516377359411610200516020526000526040600020806102a05160205260005260406000209050556102a0516377359410556102a05161020051633b9ac9ff811161230457637735941201557e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f901610200516102c0526102a0516102e0526102205161030052610280516103205260806102c0a1565b633b9aca06610200516020526000526040600020546001810380600f0b8118612304579050610240526102005160405261179361028061133e565b6102805161026052610240516040526117ad6102a0610f02565b6102a05161028052610240516040526117c76102c0610fe8565b6102c0516102a0526117da6102e061116b565b6102e0516102c0524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102e05261022051633b9aca0a610200516020526000526040600020806102e05160205260005260406000209050556102e051633b9aca0c610200516020526000526040600020556102a0516102205180820182811061230457905090506102605180820382811161230457905090506103005261030051633b9aca0d610240516020526000526040600020806102e05160205260005260406000209050556102e05161024051633b9ac9ff811161230457633b9aca0f01556102c0516103005161028051808202811583838304141715612304579050905080820182811061230457905090506102a05161028051808202811583838304141715612304579050905080820382811161230457905090506102c0526102c051637735940f6102e0516020526000526040600020556102e0516377359410557f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726102005161032052426103405261022051610360526102c051610380526080610320a1565b6020612336600039600051637c74a17461028052610200516102a0526020610280602461029c845afa6119c4573d600060003e3d6000fd5b60203d10612304576102805180600f0b8118612304576102c0526102c0905051600081126123045761026052602061233660003960005163adc635896102a052610200516102c05260206102a060246102bc845afa611a28573d600060003e3d6000fd5b60203d10612304576102a0905051610280526004546102a0524262093a80810181811061230457905062093a808104905062093a8081028162093a808204186123045790506102c0526102c0516102805111611ae45760206102e0527f596f757220746f6b656e206c6f636b206578706972657320746f6f20736f6f6e610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b6000610240511015611af7576000611b01565b6127106102405111155b611b6b57601e6102e0527f596f75207573656420616c6c20796f757220766f74696e6720706f7765720000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b633b9aca0961020051602052600052604060002080610220516020526000526040600020905054620d2f008101818110612304579050421015611c0e5760146102e0527f43616e6e6f7420766f746520736f206f6674656e000000000000000000000000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b633b9aca06610220516020526000526040600020546001810380600f0b81186123045790506102e05260006102e0511215611ca957600f610300527f4761756765206e6f7420616464656400000000000000000000000000000000006103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b633b9aca07610200516020526000526040600020806102205160205260005260406000209050805461030052600181015461032052600281015461034052506000610360526102c051610340511115611d1757610340516102c0518082038281116123045790509050610360525b610300516103605180820281158383830414171561230457905090506103805261026051610240518082028115838383041417156123045790509050612710810490506103a052610240516103c052610280516103e052610280516102c0518082038281116123045790509050610400526103a05161040051808202811583838304141715612304579050905061042052633b9aca086102005160205260005260406000205461044052610440516103c05180820182811061230457905090506103205180820382811161230457905090506104405261044051633b9aca08610200516020526000526040600020556000610440511015611e19576000611e23565b6127106104405111155b611e8d576013610460527f5573656420746f6f206d75636820706f776572000000000000000000000000006104805261046050610460518061048001601f826000031636823750506308c379a061042052602061044052601f19601f61046051011660440161043cfd5b61022051604052611e9f61048061133e565b6104805161046052633b9aca0a610220516020526000526040600020806102c0516020526000526040600020905060018101905054610480526102e051604052611eea6104c0610fe8565b6104c0516104a052633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050600181019050546104c052610460516104205180820182811061230457905090506103805180828118828411021890509050610380518082038281116123045790509050633b9aca0a610220516020526000526040600020806102c05160205260005260406000209050556104a0516104205180820182811061230457905090506103805180828118828411021890509050610380518082038281116123045790509050633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050556102c051610340511161207b57633b9aca0a610220516020526000526040600020806102c0516020526000526040600020905060018101905080546103a0518082018281106123045790509050815550633b9aca0d6102e0516020526000526040600020806102c0516020526000526040600020905060018101905080546103a0518082018281106123045790509050815550612148565b610480516103a05180820182811061230457905090506103005180828118828411021890509050610300518082038281116123045790509050633b9aca0a610220516020526000526040600020806102c05160205260005260406000209050600181019050556104c0516103a05180820182811061230457905090506103005180828118828411021890509050610300518082038281116123045790509050633b9aca0d6102e0516020526000526040600020806102c05160205260005260406000209050600181019050555b426103405111156121ce57633b9aca0b6102205160205260005260406000208061034051602052600052604060002090508054610300518082038281116123045790509050815550633b9aca0e6102e051602052600052604060002080610340516020526000526040600020905080546103005180820382811161230457905090508155505b633b9aca0b610220516020526000526040600020806103e0516020526000526040600020905080546103a0518082018281106123045790509050815550633b9aca0e6102e0516020526000526040600020806103e0516020526000526040600020905080546103a05180820182811061230457905090508155506122536104e061116b565b6104e050633b9aca076102005160205260005260406000208061022051602052600052604060002090506103a05181556103c05160018201556103e05160028201555042633b9aca09610200516020526000526040600020806102205160205260005260406000209050557f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc91426104e05261020051610500526102205161052052610240516105405260806104e0a1565b600080fda165767970657283000307000b0000000000000000000000009232a548dd9e81bac65500b5e0d918f8ba93675c000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f17d23136b4fead139f54fb766c8795faae096600000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13
-----Decoded View---------------
Arg [0] : _voting_escrow (address): 0xf17d23136B4FeAd139f54fB766c8795faae09660
Arg [1] : _admin (address): 0x9a8FEe232DCF73060Af348a1B62Cdb0a19852d13
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f17d23136b4fead139f54fb766c8795faae09660
Arg [1] : 0000000000000000000000009a8fee232dcf73060af348a1b62cdb0a19852d13
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.