Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Gauge Controller
Compiler Version
vyper:0.3.1
Contract Source Code (Vyper language format)
# @version 0.3.1 """ @title Gauge Controller @author Curve Finance @license MIT @notice Controls liquidity gauges and the issuance of coins through the gauges """ # Original idea and credit: # Curve Finance's Gauge Controller # https://resources.curve.fi/base-features/understanding-gauges # https://github.com/curvefi/curve-dao-contracts/blob/master/contracts/GaugeController.vy # This contract is an almost-identical fork of Curve's contract # 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 get_last_user_slope(addr: address) -> int128: view def locked__end(addr: address) -> uint256: view event CommitOwnership: admin: address event ApplyOwnership: admin: address 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 MULTIPLIER: constant(uint256) = 10 ** 18 admin: public(address) # Can and will be a smart contract future_admin: public(address) # Can and will be a smart contract token: public(address) # governance token voting_escrow: public(address) # Voting escrow # 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 initialize(_admin: address, _token: address, _voting_escrow: address): """ @notice Contract constructor @param _token `governance token` contract address @param _voting_escrow `VotingEscrow` contract address """ assert _token != ZERO_ADDRESS assert _voting_escrow != ZERO_ADDRESS assert self.admin == ZERO_ADDRESS, "already initialized" self.admin = _admin self.token = _token self.voting_escrow = _voting_escrow self.time_total = block.timestamp / WEEK * WEEK @external def commit_transfer_ownership(addr: address): """ @notice Transfer ownership of GaugeController to `addr` @param addr Address to have ownership transferred to """ assert msg.sender == self.admin # dev: admin only self.future_admin = addr log CommitOwnership(addr) @external def apply_transfer_ownership(): """ @notice Apply pending ownership transfer """ assert msg.sender == self.admin # dev: admin only _admin: address = self.future_admin assert _admin != ZERO_ADDRESS # dev: admin not set self.admin = _admin log ApplyOwnership(_admin) @external @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) @external def vote_for_gauge_weights(_gauge_addr: address, _user_weight: uint256): """ @notice Allocate voting power for changing pool weights @param _gauge_addr Gauge which `msg.sender` votes for @param _user_weight Weight for a gauge in bps (units of 0.01%). Minimal is 0.01%. Ignored if 0 """ escrow: address = self.voting_escrow slope: uint256 = convert(VotingEscrow(escrow).get_last_user_slope(msg.sender), uint256) lock_end: uint256 = VotingEscrow(escrow).locked__end(msg.sender) _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[msg.sender][_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[msg.sender][_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, end: lock_end, power: _user_weight }) 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[msg.sender] power_used = power_used + new_slope.power - old_slope.power self.vote_user_power[msg.sender] = 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[msg.sender][_gauge_addr] = new_slope # Record last action time self.last_user_vote[msg.sender][_gauge_addr] = block.timestamp log VoteForGauge(block.timestamp, 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
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"CommitOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"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"},{"stateMutability":"nonpayable","type":"function","name":"initialize","inputs":[{"name":"_admin","type":"address"},{"name":"_token","type":"address"},{"name":"_voting_escrow","type":"address"}],"outputs":[],"gas":146661},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":39475},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":41566},{"stateMutability":"view","type":"function","name":"gauge_types","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"int128"}],"gas":3105},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"}],"outputs":[],"gas":9355936476},{"stateMutability":"nonpayable","type":"function","name":"add_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge_type","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":9355936476},{"stateMutability":"nonpayable","type":"function","name":"checkpoint","inputs":[],"outputs":[],"gas":9265868764},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_gauge","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":9320254139},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":11293},{"stateMutability":"view","type":"function","name":"gauge_relative_weight","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":11293},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":9320264858},{"stateMutability":"nonpayable","type":"function","name":"gauge_relative_weight_write","inputs":[{"name":"addr","type":"address"},{"name":"time","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":9320264858},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"}],"outputs":[],"gas":9355872388},{"stateMutability":"nonpayable","type":"function","name":"add_type","inputs":[{"name":"_name","type":"string"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":9355872388},{"stateMutability":"nonpayable","type":"function","name":"change_type_weight","inputs":[{"name":"type_id","type":"int128"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":9355717527},{"stateMutability":"nonpayable","type":"function","name":"change_gauge_weight","inputs":[{"name":"addr","type":"address"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":9410175915},{"stateMutability":"nonpayable","type":"function","name":"vote_for_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address"},{"name":"_user_weight","type":"uint256"}],"outputs":[],"gas":9375123158},{"stateMutability":"view","type":"function","name":"get_gauge_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":5443},{"stateMutability":"view","type":"function","name":"get_type_weight","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5413},{"stateMutability":"view","type":"function","name":"get_total_weight","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":5122},{"stateMutability":"view","type":"function","name":"get_weights_sum_per_type","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5473},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2970},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3000},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3030},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3060},{"stateMutability":"view","type":"function","name":"n_gauge_types","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3090},{"stateMutability":"view","type":"function","name":"n_gauges","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3120},{"stateMutability":"view","type":"function","name":"gauge_type_names","inputs":[{"name":"arg0","type":"int128"}],"outputs":[{"name":"","type":"string"}],"gas":13726},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3225},{"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"}]}],"gas":8015},{"stateMutability":"view","type":"function","name":"vote_user_power","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3506},{"stateMutability":"view","type":"function","name":"last_user_vote","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3802},{"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"}]}],"gas":5838},{"stateMutability":"view","type":"function","name":"time_weight","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3596},{"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"}]}],"gas":5908},{"stateMutability":"view","type":"function","name":"time_sum","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3435},{"stateMutability":"view","type":"function","name":"points_total","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3535},{"stateMutability":"view","type":"function","name":"time_total","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3450},{"stateMutability":"view","type":"function","name":"points_type_weight","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3871},{"stateMutability":"view","type":"function","name":"time_type_weight","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3555}]
Contract Creation Code
61230956600436101561000d576117a1565b60046000601c37600051346123005763c0c53b8b8118610128576004358060a01c6123005760e0526024358060a01c61230057610100526044358060a01c612300576101205260006101005114612300576000610120511461230057600054156100e8576013610140527f616c726561647920696e697469616c697a6564000000000000000000000000006101605261014050610140518061016001818260206001820306601f82010390500336823750506308c379a0610100526020610120526101405160206001820306601f820103905060440161011cfd5b60e05160005561010051600255610120516003554262093a808082049050905062093a808082028215828483041417156123005790509050637735941155005b636b441a408118610180576004358060a01c6123005760e05260005433186123005760e0516001557f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e960e051610100526020610100a1005b636a1c05ae81186101da5760005433186123005760015460e052600060e051146123005760e0516000557febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a118910560e051610100526020610100a1005b633f9095b7811861023b576004358060a01c6123005760e052633b9aca0760e05160a0526080526040608020546101005260006101005114612300576101005160018082038060801d81607f1d186123005790509050610120526020610120f35b633a04f90081186102515760006102e052610264565b6318dfe9218118610530576044356102e0525b6004358060a01c612300576102a0526024358060801d81607f1d18612300576102c05260005433186123005760006102c05112156102a35760006102ac565b6004546102c051125b1561230057633b9aca076102a05160a05260805260406080205461230057600554610300526103005160018082018060801d81607f1d1861230057905090506005556102a051600161030051633b9aca008110156123005702600701556102c05160018082018060801d81607f1d186123005790509050633b9aca076102a05160a0526080526040608020554262093a808181830110612300578082019050905062093a808082049050905062093a8080820282158284830414171561230057905090506103205260006102e0511115610499576102c05160e0526103926103606117a7565b61036051610340526102c05160e0526103ac6103806118ad565b61038051610360526103bf6103a0611a63565b6103a051610380526102e0516103605181818301106123005780820190509050633b9aca0e6102c05160a05260805260406080206103205160a0526080526040608020556103205160016102c051633b9aca008110156123005702633b9aca10015561038051610340516102e05180820282158284830414171561230057905090508181830110612300578082019050905063773594106103205160a052608052604060802055610320516377359411556102e051633b9aca0b6102a05160a05260805260406080206103205160a0526080526040608020555b60016102c051633b9aca008110156123005702633b9aca1001546104d6576103205160016102c051633b9aca008110156123005702633b9aca1001555b61032051633b9aca0d6102a05160a0526080526040608020557ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd8776102a051610340526102c051610360526102e051610380526060610340a1005b63c2c4c5c1811861054c576105466102a0611a63565b6102a050005b63615e5237811861058d576004358060a01c612300576102a0526102a05160e0526105786102c0611c4c565b6102c0506105876102c0611a63565b6102c050005b636207d86681186105a257426101e0526105b5565b63d3078c9481186105ed576024356101e0525b6004358060a01c612300576101c0526101c05160e0526101e051610100526105de610200611df8565b61020051610220526020610220f35b6395cfcec3811861060257426102c052610615565b636472eee18118610672576024356102c0525b6004358060a01c612300576102a0526102a05160e0526106366102e0611c4c565b6102e0506106456102e0611a63565b6102e0506102a05160e0526102c051610100526106636102e0611df8565b6102e051610300526020610300f35b6326e56d5e81186106885760006104405261069b565b6392d0d23281186107f757602435610440525b60043560040160408135116123005780803560200180826103e037505050600054331861230057600454610460526103e08060066104605160a0526080526040608020602082510160c060006003818352015b8260c05160200211156107005761071f565b60c05160200285015160c05185015581516001018083528114156106ee575b5050505050506104605160018082018060801d81607f1d186123005790509050600455600061044051146107f557610460516102a052610440516102c052610765611f26565b7f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc84610480806040808252808301806103e080516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905060208201915061046051825290509050610480a15b005b63db1ca2608118610838576004358060801d81607f1d18612300576103e0526000543318612300576103e0516102a0526024356102c052610836611f26565b005b63d4d2646e8118610874576004358060a01c6123005761044052600054331861230057610440516102a0526024356102c0526108726120b8565b005b63d71363288118611220576004358060a01c612300576102a0526003546102c052637c74a1746103005233610320526020610300602461031c6102c0515afa6108c2573d600060003e3d6000fd5b601f3d1115612300576103005160008112612300576102e05263adc635896103205233610340526020610320602461033c6102c0515afa610908573d600060003e3d6000fd5b601f3d1115612300576103205161030052600554610320524262093a808181830110612300578082019050905062093a808082049050905062093a808082028215828483041417156123005790509050610340526103405161030051116109e0576020610360527f596f757220746f6b656e206c6f636b206578706972657320746f6f20736f6f6e6103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b600060243510156109f25760006109fb565b61271060243511155b610a7657601e610360527f596f75207573656420616c6c20796f757220766f74696e6720706f77657200006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca0a3360a05260805260406080206102a05160a052608052604060802054620d2f0081818301106123005780820190509050421015610b29576014610360527f43616e6e6f7420766f746520736f206f6674656e0000000000000000000000006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca076102a05160a05260805260406080205460018082038060801d81607f1d186123005790509050610360526000610360511215610bdb57600f610380527f4761756765206e6f7420616464656400000000000000000000000000000000006103a0526103805061038051806103a001818260206001820306601f82010390500336823750506308c379a0610340526020610360526103805160206001820306601f820103905060440161035cfd5b633b9aca083360a05260805260406080206102a05160a052608052604060802080546103805260018101546103a05260028101546103c0525060006103e052610340516103c0511115610c43576103c0516103405180821061230057808203905090506103e0525b610380516103e0518082028215828483041417156123005790509050610400526102e051602435808202821582848304141715612300579050905061271080820490509050610420526024356104405261030051610460526103005161034051808210612300578082039050905061048052610420516104805180820282158284830414171561230057905090506104a052633b9aca093360a0526080526040608020546104c0526104c05161044051818183011061230057808201905090506103a05180821061230057808203905090506104c0526104c051633b9aca093360a05260805260406080205560006104c0511015610d42576000610d4c565b6127106104c05111155b610dc75760136104e0527f5573656420746f6f206d75636820706f77657200000000000000000000000000610500526104e0506104e0518061050001818260206001820306601f82010390500336823750506308c379a06104a05260206104c0526104e05160206001820306601f82010390506044016104bcfd5b6102a05160e052610dd9610500611c4c565b610500516104e0526001633b9aca0b6102a05160a05260805260406080206103405160a05260805260406080200154610500526103605160e052610e1e6105406118ad565b61054051610520526001633b9aca0e6103605160a05260805260406080206103405160a05260805260406080200154610540526104e0516104a0518181830110612300578082019050905061040051808210610e7a5781610e7c565b805b90509050610400518082106123005780820390509050633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802055610520516104a0518181830110612300578082019050905061040051808210610edf5781610ee1565b805b90509050610400518082106123005780820390509050633b9aca0e6103605160a05260805260406080206103405160a052608052604060802055610340516103c05111610fab576001633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802001805461042051818183011061230057808201905090508155506001633b9aca0e6103605160a05260805260406080206103405160a0526080526040608020018054610420518181830110612300578082019050905081555061107c565b61050051610420518181830110612300578082019050905061038051808210610fd45781610fd6565b805b905090506103805180821061230057808203905090506001633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802001556105405161042051818183011061230057808201905090506103805180821061103c578161103e565b805b905090506103805180821061230057808203905090506001633b9aca0e6103605160a05260805260406080206103405160a052608052604060802001555b426103c05111156110fc57633b9aca0c6102a05160a05260805260406080206103c05160a05260805260406080208054610380518082106123005780820390509050815550633b9aca0f6103605160a05260805260406080206103c05160a052608052604060802080546103805180821061230057808203905090508155505b633b9aca0c6102a05160a05260805260406080206104605160a052608052604060802080546104205181818301106123005780820190509050815550633b9aca0f6103605160a05260805260406080206104605160a05260805260406080208054610420518181830110612300578082019050905081555061117f610560611a63565b61056050633b9aca083360a05260805260406080206102a05160a05260805260406080206104205181556104405160018201556104605160028201555042633b9aca0a3360a05260805260406080206102a05160a0526080526040608020557f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc91426105605233610580526102a0516105a0526024356105c0526080610560a1005b634e791a3a8118611277576004358060a01c6123005760e052633b9aca0b60e05160a0526080526040608020633b9aca0d60e05160a05260805260406080205460a052608052604060802054610100526020610100f35b6372fdccfa81186112d8576004358060801d81607f1d186123005760e052637735941260e05160a0526080526040608020600160e051633b9aca0081101561230057026377359413015460a052608052604060802054610100526020610100f35b636977ff92811861130357637735941063773594115460a05260805260406080205460e052602060e0f35b636f214a6a8118611364576004358060801d81607f1d186123005760e052633b9aca0e60e05160a0526080526040608020600160e051633b9aca008110156123005702633b9aca10015460a052608052604060802054610100526020610100f35b63f851a440811861137b5760005460e052602060e0f35b6317f7182a81186113925760015460e052602060e0f35b63fc0c546a81186113a95760025460e052602060e0f35b63dfe0503181186113c05760035460e052602060e0f35b639fba03a181186113d75760045460e052602060e0f35b63e93841d081186113ee5760055460e052602060e0f35b63d958a8fc81186114b7576004358060801d81607f1d186123005760e052610100806020808252600660e05160a052608052604060802081840180828082602082540160c060006003818352015b8260c051602002111561144e5761146d565b60c05185015460c051602002850152815160010180835281141561143c575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f82010390509050905090508101905090509050610100f35b63b053918781186114e1576001600435633b9aca0081101561230057026007015460e052602060e0f35b630f467f98811861154b576004358060a01c6123005760e0526024358060a01c6123005761010052633b9aca0860e05160a05260805260406080206101005160a0526080526040608020805461012052600181015461014052600281015461016052506060610120f35b63411e74b58118611583576004358060a01c6123005760e052633b9aca0960e05160a052608052604060802054610100526020610100f35b637e418fa081186115d9576004358060a01c6123005760e0526024358060a01c6123005761010052633b9aca0a60e05160a05260805260406080206101005160a052608052604060802054610120526020610120f35b63edba5273811861162a576004358060a01c6123005760e052633b9aca0b60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b63a4d7a2508118611662576004358060a01c6123005760e052633b9aca0d60e05160a052608052604060802054610100526020610100f35b63a9b48c0181186116b8576004358060801d81607f1d186123005760e052633b9aca0e60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b635a54915881186116e5576001600435633b9aca008110156123005702633b9aca10015460e052602060e0f35b631142916b811861170d57637735941060043560a05260805260406080205460e052602060e0f35b63513872bd81186117275763773594115460e052602060e0f35b63afd2bb498118611772576004358060801d81607f1d186123005760e052637735941260e05160a052608052604060802060243560a052608052604060802054610100526020610100f35b6351ce6b59811861179f576001600435633b9aca0081101561230057026377359413015460e052602060e0f35b505b60006000fd5b600160e051633b9aca0081101561230057026377359413015461010052600061010051116117dd5760008152506118ab566118ab565b637735941260e05160a05260805260406080206101005160a0526080526040608020546101205261014060006101f4818352015b426101005111156118215761189d565b610100805162093a808181830110612300578082019050905081525061012051637735941260e05160a05260805260406080206101005160a0526080526040608020554261010051111561188d5761010051600160e051633b9aca008110156123005702637735941301555b8151600101808352811415611811575b5050610120518152506118ab565b565b600160e051633b9aca008110156123005702633b9aca10015461010052600061010051116118e3576000815250611a6156611a61565b633b9aca0e60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b4261010051111561193257611a53565b610100805162093a80818183011061230057808201905090508152506101405162093a8080820282158284830414171561230057905090506101805261018051610120511161198c576000610120526000610140526119e8565b6101208051610180518082106123005780820390509050815250633b9aca0f60e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230057808203905090508152505b633b9aca0e60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611a435761010051600160e051633b9aca008110156123005702633b9aca1001555b8151600101808352811415611922575b505061012051815250611a61565b565b6377359411546101c0526004546101e052426101c0511115611a9a576101c0805162093a8080821061230057808203905090508152505b63773594106101c05160a0526080526040608020546102005261022060006064818352015b6101e0516102205118611ad157611b0d565b6102205160e052611ae36102406118ad565b610240506102205160e052611af96102406117a7565b610240508151600101808352811415611abf575b505061022060006101f4818352015b426101c0511115611b2c57611c41565b6101c0805162093a808181830110612300578082019050905081525060006102005261024060006064818352015b6101e0516102405118611b6c57611c00565b633b9aca0e6102405160a05260805260406080206101c05160a0526080526040608020546102605263773594126102405160a05260805260406080206101c05160a05260805260406080205461028052610200805161026051610280518082028215828483041417156123005790509050818183011061230057808201905090508152508151600101808352811415611b5a575b50506102005163773594106101c05160a052608052604060802055426101c0511115611c31576101c0516377359411555b8151600101808352811415611b1c575b505061020051815250565b633b9aca0d60e05160a0526080526040608020546101005260006101005111611c7d576000815250611df656611df6565b633b9aca0b60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b42610100511115611ccc57611de8565b610100805162093a80818183011061230057808201905090508152506101405162093a80808202821582848304141715612300579050905061018052610180516101205111611d2657600061012052600061014052611d82565b6101208051610180518082106123005780820390509050815250633b9aca0c60e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230057808203905090508152505b633b9aca0b60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611dd85761010051633b9aca0d60e05160a0526080526040608020555b8151600101808352811415611cbc575b505061012051815250611df6565b565b6101005162093a808082049050905062093a8080820282158284830414171561230057905090506101205263773594106101205160a0526080526040608020546101405260006101405111611e55576000815250611f2456611f24565b633b9aca0760e05160a05260805260406080205460018082038060801d81607f1d1861230057905090506101605263773594126101605160a05260805260406080206101205160a05260805260406080205461018052633b9aca0b60e05160a05260805260406080206101205160a0526080526040608020546101a052670de0b6b3a76400006101805180820282158284830414171561230057905090506101a05180820282158284830414171561230057905090506101405180801561230057820490509050815250611f24565b565b6102a05160e052611f386103006117a7565b610300516102e0526102a05160e052611f526103206118ad565b6103205161030052611f65610340611a63565b61034051610320524262093a808181830110612300578082019050905062093a808082049050905062093a8080820282158284830414171561230057905090506103405261032051610300516102c051808202821582848304141715612300579050905081818301106123005780820190509050610300516102e05180820282158284830414171561230057905090508082106123005780820390509050610320526103205163773594106103405160a0526080526040608020556102c05163773594126102a05160a05260805260406080206103405160a052608052604060802055610340516377359411556103405160016102a051633b9aca008110156123005702637735941301557e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016102a0516103605261034051610380526102c0516103a052610320516103c0526080610360a1565b633b9aca076102a05160a05260805260406080205460018082038060801d81607f1d1861230057905090506102e0526102a05160e0526120f9610320611c4c565b61032051610300526102e05160e0526121136103406117a7565b61034051610320526102e05160e05261212d6103606118ad565b6103605161034052612140610380611a63565b61038051610360524262093a808181830110612300578082019050905062093a808082049050905062093a808082028215828483041417156123005790509050610380526102c051633b9aca0b6102a05160a05260805260406080206103805160a05260805260406080205561038051633b9aca0d6102a05160a052608052604060802055610340516102c051818183011061230057808201905090506103005180821061230057808203905090506103a0526103a051633b9aca0e6102e05160a05260805260406080206103805160a0526080526040608020556103805160016102e051633b9aca008110156123005702633b9aca100155610360516103a05161032051808202821582848304141715612300579050905081818301106123005780820190509050610340516103205180820282158284830414171561230057905090508082106123005780820390509050610360526103605163773594106103805160a052608052604060802055610380516377359411557f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726102a0516103c052426103e0526102c05161040052610360516104205260806103c0a1565b600080fd5b61000461230903610004600039610004612309036000f3
Deployed Bytecode
0x600436101561000d576117a1565b60046000601c37600051346123005763c0c53b8b8118610128576004358060a01c6123005760e0526024358060a01c61230057610100526044358060a01c612300576101205260006101005114612300576000610120511461230057600054156100e8576013610140527f616c726561647920696e697469616c697a6564000000000000000000000000006101605261014050610140518061016001818260206001820306601f82010390500336823750506308c379a0610100526020610120526101405160206001820306601f820103905060440161011cfd5b60e05160005561010051600255610120516003554262093a808082049050905062093a808082028215828483041417156123005790509050637735941155005b636b441a408118610180576004358060a01c6123005760e05260005433186123005760e0516001557f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e960e051610100526020610100a1005b636a1c05ae81186101da5760005433186123005760015460e052600060e051146123005760e0516000557febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a118910560e051610100526020610100a1005b633f9095b7811861023b576004358060a01c6123005760e052633b9aca0760e05160a0526080526040608020546101005260006101005114612300576101005160018082038060801d81607f1d186123005790509050610120526020610120f35b633a04f90081186102515760006102e052610264565b6318dfe9218118610530576044356102e0525b6004358060a01c612300576102a0526024358060801d81607f1d18612300576102c05260005433186123005760006102c05112156102a35760006102ac565b6004546102c051125b1561230057633b9aca076102a05160a05260805260406080205461230057600554610300526103005160018082018060801d81607f1d1861230057905090506005556102a051600161030051633b9aca008110156123005702600701556102c05160018082018060801d81607f1d186123005790509050633b9aca076102a05160a0526080526040608020554262093a808181830110612300578082019050905062093a808082049050905062093a8080820282158284830414171561230057905090506103205260006102e0511115610499576102c05160e0526103926103606117a7565b61036051610340526102c05160e0526103ac6103806118ad565b61038051610360526103bf6103a0611a63565b6103a051610380526102e0516103605181818301106123005780820190509050633b9aca0e6102c05160a05260805260406080206103205160a0526080526040608020556103205160016102c051633b9aca008110156123005702633b9aca10015561038051610340516102e05180820282158284830414171561230057905090508181830110612300578082019050905063773594106103205160a052608052604060802055610320516377359411556102e051633b9aca0b6102a05160a05260805260406080206103205160a0526080526040608020555b60016102c051633b9aca008110156123005702633b9aca1001546104d6576103205160016102c051633b9aca008110156123005702633b9aca1001555b61032051633b9aca0d6102a05160a0526080526040608020557ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd8776102a051610340526102c051610360526102e051610380526060610340a1005b63c2c4c5c1811861054c576105466102a0611a63565b6102a050005b63615e5237811861058d576004358060a01c612300576102a0526102a05160e0526105786102c0611c4c565b6102c0506105876102c0611a63565b6102c050005b636207d86681186105a257426101e0526105b5565b63d3078c9481186105ed576024356101e0525b6004358060a01c612300576101c0526101c05160e0526101e051610100526105de610200611df8565b61020051610220526020610220f35b6395cfcec3811861060257426102c052610615565b636472eee18118610672576024356102c0525b6004358060a01c612300576102a0526102a05160e0526106366102e0611c4c565b6102e0506106456102e0611a63565b6102e0506102a05160e0526102c051610100526106636102e0611df8565b6102e051610300526020610300f35b6326e56d5e81186106885760006104405261069b565b6392d0d23281186107f757602435610440525b60043560040160408135116123005780803560200180826103e037505050600054331861230057600454610460526103e08060066104605160a0526080526040608020602082510160c060006003818352015b8260c05160200211156107005761071f565b60c05160200285015160c05185015581516001018083528114156106ee575b5050505050506104605160018082018060801d81607f1d186123005790509050600455600061044051146107f557610460516102a052610440516102c052610765611f26565b7f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc84610480806040808252808301806103e080516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905060208201915061046051825290509050610480a15b005b63db1ca2608118610838576004358060801d81607f1d18612300576103e0526000543318612300576103e0516102a0526024356102c052610836611f26565b005b63d4d2646e8118610874576004358060a01c6123005761044052600054331861230057610440516102a0526024356102c0526108726120b8565b005b63d71363288118611220576004358060a01c612300576102a0526003546102c052637c74a1746103005233610320526020610300602461031c6102c0515afa6108c2573d600060003e3d6000fd5b601f3d1115612300576103005160008112612300576102e05263adc635896103205233610340526020610320602461033c6102c0515afa610908573d600060003e3d6000fd5b601f3d1115612300576103205161030052600554610320524262093a808181830110612300578082019050905062093a808082049050905062093a808082028215828483041417156123005790509050610340526103405161030051116109e0576020610360527f596f757220746f6b656e206c6f636b206578706972657320746f6f20736f6f6e6103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b600060243510156109f25760006109fb565b61271060243511155b610a7657601e610360527f596f75207573656420616c6c20796f757220766f74696e6720706f77657200006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca0a3360a05260805260406080206102a05160a052608052604060802054620d2f0081818301106123005780820190509050421015610b29576014610360527f43616e6e6f7420766f746520736f206f6674656e0000000000000000000000006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca076102a05160a05260805260406080205460018082038060801d81607f1d186123005790509050610360526000610360511215610bdb57600f610380527f4761756765206e6f7420616464656400000000000000000000000000000000006103a0526103805061038051806103a001818260206001820306601f82010390500336823750506308c379a0610340526020610360526103805160206001820306601f820103905060440161035cfd5b633b9aca083360a05260805260406080206102a05160a052608052604060802080546103805260018101546103a05260028101546103c0525060006103e052610340516103c0511115610c43576103c0516103405180821061230057808203905090506103e0525b610380516103e0518082028215828483041417156123005790509050610400526102e051602435808202821582848304141715612300579050905061271080820490509050610420526024356104405261030051610460526103005161034051808210612300578082039050905061048052610420516104805180820282158284830414171561230057905090506104a052633b9aca093360a0526080526040608020546104c0526104c05161044051818183011061230057808201905090506103a05180821061230057808203905090506104c0526104c051633b9aca093360a05260805260406080205560006104c0511015610d42576000610d4c565b6127106104c05111155b610dc75760136104e0527f5573656420746f6f206d75636820706f77657200000000000000000000000000610500526104e0506104e0518061050001818260206001820306601f82010390500336823750506308c379a06104a05260206104c0526104e05160206001820306601f82010390506044016104bcfd5b6102a05160e052610dd9610500611c4c565b610500516104e0526001633b9aca0b6102a05160a05260805260406080206103405160a05260805260406080200154610500526103605160e052610e1e6105406118ad565b61054051610520526001633b9aca0e6103605160a05260805260406080206103405160a05260805260406080200154610540526104e0516104a0518181830110612300578082019050905061040051808210610e7a5781610e7c565b805b90509050610400518082106123005780820390509050633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802055610520516104a0518181830110612300578082019050905061040051808210610edf5781610ee1565b805b90509050610400518082106123005780820390509050633b9aca0e6103605160a05260805260406080206103405160a052608052604060802055610340516103c05111610fab576001633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802001805461042051818183011061230057808201905090508155506001633b9aca0e6103605160a05260805260406080206103405160a0526080526040608020018054610420518181830110612300578082019050905081555061107c565b61050051610420518181830110612300578082019050905061038051808210610fd45781610fd6565b805b905090506103805180821061230057808203905090506001633b9aca0b6102a05160a05260805260406080206103405160a052608052604060802001556105405161042051818183011061230057808201905090506103805180821061103c578161103e565b805b905090506103805180821061230057808203905090506001633b9aca0e6103605160a05260805260406080206103405160a052608052604060802001555b426103c05111156110fc57633b9aca0c6102a05160a05260805260406080206103c05160a05260805260406080208054610380518082106123005780820390509050815550633b9aca0f6103605160a05260805260406080206103c05160a052608052604060802080546103805180821061230057808203905090508155505b633b9aca0c6102a05160a05260805260406080206104605160a052608052604060802080546104205181818301106123005780820190509050815550633b9aca0f6103605160a05260805260406080206104605160a05260805260406080208054610420518181830110612300578082019050905081555061117f610560611a63565b61056050633b9aca083360a05260805260406080206102a05160a05260805260406080206104205181556104405160018201556104605160028201555042633b9aca0a3360a05260805260406080206102a05160a0526080526040608020557f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc91426105605233610580526102a0516105a0526024356105c0526080610560a1005b634e791a3a8118611277576004358060a01c6123005760e052633b9aca0b60e05160a0526080526040608020633b9aca0d60e05160a05260805260406080205460a052608052604060802054610100526020610100f35b6372fdccfa81186112d8576004358060801d81607f1d186123005760e052637735941260e05160a0526080526040608020600160e051633b9aca0081101561230057026377359413015460a052608052604060802054610100526020610100f35b636977ff92811861130357637735941063773594115460a05260805260406080205460e052602060e0f35b636f214a6a8118611364576004358060801d81607f1d186123005760e052633b9aca0e60e05160a0526080526040608020600160e051633b9aca008110156123005702633b9aca10015460a052608052604060802054610100526020610100f35b63f851a440811861137b5760005460e052602060e0f35b6317f7182a81186113925760015460e052602060e0f35b63fc0c546a81186113a95760025460e052602060e0f35b63dfe0503181186113c05760035460e052602060e0f35b639fba03a181186113d75760045460e052602060e0f35b63e93841d081186113ee5760055460e052602060e0f35b63d958a8fc81186114b7576004358060801d81607f1d186123005760e052610100806020808252600660e05160a052608052604060802081840180828082602082540160c060006003818352015b8260c051602002111561144e5761146d565b60c05185015460c051602002850152815160010180835281141561143c575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f82010390509050905090508101905090509050610100f35b63b053918781186114e1576001600435633b9aca0081101561230057026007015460e052602060e0f35b630f467f98811861154b576004358060a01c6123005760e0526024358060a01c6123005761010052633b9aca0860e05160a05260805260406080206101005160a0526080526040608020805461012052600181015461014052600281015461016052506060610120f35b63411e74b58118611583576004358060a01c6123005760e052633b9aca0960e05160a052608052604060802054610100526020610100f35b637e418fa081186115d9576004358060a01c6123005760e0526024358060a01c6123005761010052633b9aca0a60e05160a05260805260406080206101005160a052608052604060802054610120526020610120f35b63edba5273811861162a576004358060a01c6123005760e052633b9aca0b60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b63a4d7a2508118611662576004358060a01c6123005760e052633b9aca0d60e05160a052608052604060802054610100526020610100f35b63a9b48c0181186116b8576004358060801d81607f1d186123005760e052633b9aca0e60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b635a54915881186116e5576001600435633b9aca008110156123005702633b9aca10015460e052602060e0f35b631142916b811861170d57637735941060043560a05260805260406080205460e052602060e0f35b63513872bd81186117275763773594115460e052602060e0f35b63afd2bb498118611772576004358060801d81607f1d186123005760e052637735941260e05160a052608052604060802060243560a052608052604060802054610100526020610100f35b6351ce6b59811861179f576001600435633b9aca0081101561230057026377359413015460e052602060e0f35b505b60006000fd5b600160e051633b9aca0081101561230057026377359413015461010052600061010051116117dd5760008152506118ab566118ab565b637735941260e05160a05260805260406080206101005160a0526080526040608020546101205261014060006101f4818352015b426101005111156118215761189d565b610100805162093a808181830110612300578082019050905081525061012051637735941260e05160a05260805260406080206101005160a0526080526040608020554261010051111561188d5761010051600160e051633b9aca008110156123005702637735941301555b8151600101808352811415611811575b5050610120518152506118ab565b565b600160e051633b9aca008110156123005702633b9aca10015461010052600061010051116118e3576000815250611a6156611a61565b633b9aca0e60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b4261010051111561193257611a53565b610100805162093a80818183011061230057808201905090508152506101405162093a8080820282158284830414171561230057905090506101805261018051610120511161198c576000610120526000610140526119e8565b6101208051610180518082106123005780820390509050815250633b9aca0f60e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230057808203905090508152505b633b9aca0e60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611a435761010051600160e051633b9aca008110156123005702633b9aca1001555b8151600101808352811415611922575b505061012051815250611a61565b565b6377359411546101c0526004546101e052426101c0511115611a9a576101c0805162093a8080821061230057808203905090508152505b63773594106101c05160a0526080526040608020546102005261022060006064818352015b6101e0516102205118611ad157611b0d565b6102205160e052611ae36102406118ad565b610240506102205160e052611af96102406117a7565b610240508151600101808352811415611abf575b505061022060006101f4818352015b426101c0511115611b2c57611c41565b6101c0805162093a808181830110612300578082019050905081525060006102005261024060006064818352015b6101e0516102405118611b6c57611c00565b633b9aca0e6102405160a05260805260406080206101c05160a0526080526040608020546102605263773594126102405160a05260805260406080206101c05160a05260805260406080205461028052610200805161026051610280518082028215828483041417156123005790509050818183011061230057808201905090508152508151600101808352811415611b5a575b50506102005163773594106101c05160a052608052604060802055426101c0511115611c31576101c0516377359411555b8151600101808352811415611b1c575b505061020051815250565b633b9aca0d60e05160a0526080526040608020546101005260006101005111611c7d576000815250611df656611df6565b633b9aca0b60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b42610100511115611ccc57611de8565b610100805162093a80818183011061230057808201905090508152506101405162093a80808202821582848304141715612300579050905061018052610180516101205111611d2657600061012052600061014052611d82565b6101208051610180518082106123005780820390509050815250633b9aca0c60e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230057808203905090508152505b633b9aca0b60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611dd85761010051633b9aca0d60e05160a0526080526040608020555b8151600101808352811415611cbc575b505061012051815250611df6565b565b6101005162093a808082049050905062093a8080820282158284830414171561230057905090506101205263773594106101205160a0526080526040608020546101405260006101405111611e55576000815250611f2456611f24565b633b9aca0760e05160a05260805260406080205460018082038060801d81607f1d1861230057905090506101605263773594126101605160a05260805260406080206101205160a05260805260406080205461018052633b9aca0b60e05160a05260805260406080206101205160a0526080526040608020546101a052670de0b6b3a76400006101805180820282158284830414171561230057905090506101a05180820282158284830414171561230057905090506101405180801561230057820490509050815250611f24565b565b6102a05160e052611f386103006117a7565b610300516102e0526102a05160e052611f526103206118ad565b6103205161030052611f65610340611a63565b61034051610320524262093a808181830110612300578082019050905062093a808082049050905062093a8080820282158284830414171561230057905090506103405261032051610300516102c051808202821582848304141715612300579050905081818301106123005780820190509050610300516102e05180820282158284830414171561230057905090508082106123005780820390509050610320526103205163773594106103405160a0526080526040608020556102c05163773594126102a05160a05260805260406080206103405160a052608052604060802055610340516377359411556103405160016102a051633b9aca008110156123005702637735941301557e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016102a0516103605261034051610380526102c0516103a052610320516103c0526080610360a1565b633b9aca076102a05160a05260805260406080205460018082038060801d81607f1d1861230057905090506102e0526102a05160e0526120f9610320611c4c565b61032051610300526102e05160e0526121136103406117a7565b61034051610320526102e05160e05261212d6103606118ad565b6103605161034052612140610380611a63565b61038051610360524262093a808181830110612300578082019050905062093a808082049050905062093a808082028215828483041417156123005790509050610380526102c051633b9aca0b6102a05160a05260805260406080206103805160a05260805260406080205561038051633b9aca0d6102a05160a052608052604060802055610340516102c051818183011061230057808201905090506103005180821061230057808203905090506103a0526103a051633b9aca0e6102e05160a05260805260406080206103805160a0526080526040608020556103805160016102e051633b9aca008110156123005702633b9aca100155610360516103a05161032051808202821582848304141715612300579050905081818301106123005780820190509050610340516103205180820282158284830414171561230057905090508082106123005780820390509050610360526103605163773594106103805160a052608052604060802055610380516377359411557f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726102a0516103c052426103e0526102c05161040052610360516104205260806103c0a1565b600080fd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.