Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 109 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Vote_for_gauge_w... | 106247994 | 636 days ago | IN | 0 ETH | 0.000120544204 | ||||
Vote_for_gauge_w... | 89610364 | 715 days ago | IN | 0 ETH | 0.000120706156 | ||||
Vote_for_gauge_w... | 89609669 | 715 days ago | IN | 0 ETH | 0.000106882309 | ||||
Vote_for_gauge_w... | 88462196 | 717 days ago | IN | 0 ETH | 0.000085527713 | ||||
Vote_for_gauge_w... | 88462091 | 717 days ago | IN | 0 ETH | 0.000085544813 | ||||
Vote_for_gauge_w... | 88461977 | 717 days ago | IN | 0 ETH | 0.000085561913 | ||||
Vote_for_gauge_w... | 88461832 | 717 days ago | IN | 0 ETH | 0.000085527713 | ||||
Vote_for_gauge_w... | 88458971 | 717 days ago | IN | 0 ETH | 0.000087117272 | ||||
Vote_for_gauge_w... | 85372222 | 726 days ago | IN | 0 ETH | 0.00007804325 | ||||
Vote_for_gauge_w... | 85372106 | 726 days ago | IN | 0 ETH | 0.000077295672 | ||||
Vote_for_gauge_w... | 84631919 | 729 days ago | IN | 0 ETH | 0.000157151782 | ||||
Vote_for_gauge_w... | 84631843 | 729 days ago | IN | 0 ETH | 0.000173255661 | ||||
Vote_for_gauge_w... | 83555499 | 733 days ago | IN | 0 ETH | 0.00005848031 | ||||
Vote_for_gauge_w... | 83073413 | 735 days ago | IN | 0 ETH | 0.000053659608 | ||||
Vote_for_gauge_w... | 82604206 | 737 days ago | IN | 0 ETH | 0.000053115396 | ||||
Vote_for_gauge_w... | 82604143 | 737 days ago | IN | 0 ETH | 0.000052476484 | ||||
Vote_for_gauge_w... | 82463337 | 738 days ago | IN | 0 ETH | 0.000175289985 | ||||
Vote_for_gauge_w... | 82463305 | 738 days ago | IN | 0 ETH | 0.000175289985 | ||||
Vote_for_gauge_w... | 82330753 | 738 days ago | IN | 0 ETH | 0.000054050797 | ||||
Vote_for_gauge_w... | 82330556 | 738 days ago | IN | 0 ETH | 0.000053655516 | ||||
Vote_for_gauge_w... | 81241520 | 743 days ago | IN | 0 ETH | 0.000097750101 | ||||
Vote_for_gauge_w... | 81241358 | 743 days ago | IN | 0 ETH | 0.000096772855 | ||||
Vote_for_gauge_w... | 80917310 | 744 days ago | IN | 0 ETH | 0.000145821828 | ||||
Vote_for_gauge_w... | 80917235 | 744 days ago | IN | 0 ETH | 0.00014556838 | ||||
Vote_for_gauge_w... | 80843649 | 744 days ago | IN | 0 ETH | 0.000224947445 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH | ||||
107461498 | 608 days ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xBa57440f...7aB1f6C2B The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Vyper_contract
Compiler Version
vyper:0.2.15
Contract Source Code (Vyper language format)
# @version 0.2.15 """ @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 struct Point: bias: uint256 slope: uint256 struct VotedSlope: slope: uint256 power: uint256 end: uint256 struct MirroredChain: chain_id: uint256 escrow_count: uint256 interface MirroredVotingEscrow: def get_last_user_slope(_addr: address, _chain: uint256, _escrow_id: uint256) -> int128: view def locked__end(_addr: address, _chain: uint256, _escrow_id: uint256) -> uint256: view def mirrored_chains_count() -> uint256: view def mirrored_chains(_idx: uint256) -> MirroredChain: view def voting_escrow_count() -> 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 voting_escrow: public(address) # Mirrored 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, HashMap[uint256, HashMap[uint256, VotedSlope]]]]) # user -> gauge_addr -> chain -> escrow_id -> VotedSlope vote_user_power: public(HashMap[address, HashMap[uint256, HashMap[uint256, uint256]]]) # Total vote power used by user and chain 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__(_mirrored_voting_escrow: address, _admin: address): """ @notice Contract constructor @param _mirrored_voting_escrow `MirroredVotingEscrow` contract address """ assert _mirrored_voting_escrow != ZERO_ADDRESS self.admin = _admin self.voting_escrow = _mirrored_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) @internal def _vote_for_chain_gauge_weights(_user: address, _chain: uint256, _escrow_id: uint256, _gauge_addr: address, _user_weight: uint256): escrow: address = self.voting_escrow slope: uint256 = convert(MirroredVotingEscrow(escrow).get_last_user_slope(_user, _chain, _escrow_id), uint256) lock_end: uint256 = MirroredVotingEscrow(escrow).locked__end(_user, _chain, _escrow_id) next_time: uint256 = (block.timestamp + WEEK) / WEEK * WEEK # skip if lock is expired on a given chain if lock_end <= next_time: return 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][_chain][_escrow_id] 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[_user][_chain][_escrow_id] power_used = power_used + new_slope.power - old_slope.power self.vote_user_power[_user][_chain][_escrow_id] = power_used assert 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][_chain][_escrow_id] = new_slope # Record last action time self.last_user_vote[_user][_gauge_addr] = block.timestamp @internal def _vote_for_gauge_weights(_sender: address, _gauge_addr: address, _user_weight: uint256): """ @notice Allocate voting power for changing pool weights @param _sender voter address @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 """ assert (_user_weight >= 0) and (_user_weight <= 10000), "You used all your voting power" _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count() for i in range(99): if i >= _escrow_count: break self._vote_for_chain_gauge_weights(_sender, 0, i, _gauge_addr, _user_weight) _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count() for i in range(99): if i >= _chain_count: break _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i) for j in range(99): if j >= _chain.escrow_count: break self._vote_for_chain_gauge_weights(_sender, _chain.chain_id, j, _gauge_addr, _user_weight) log VoteForGauge(block.timestamp, _sender, _gauge_addr, _user_weight) @external def vote_for_gauge_weights(_gauge_addr: address, _user_weight: uint256): self._vote_for_gauge_weights(msg.sender, _gauge_addr, _user_weight) @external def vote_for_many_gauge_weights(_gauge_addr: address[10], _user_weight: uint256[10]): for i in range(9): if _gauge_addr[i] == ZERO_ADDRESS: break self._vote_for_gauge_weights(msg.sender, _gauge_addr[i], _user_weight[i]) @external @view def user_vote_power(addr: address) -> uint256: _used_power: uint256 = 0 _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count() for i in range(99): if i >= _escrow_count: break _used_power = self.vote_user_power[addr][0][i] if _used_power > 0: return _used_power _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count() for i in range(99): if i >= _chain_count: break _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i) for j in range(99): if j >= _chain.escrow_count: break _used_power = self.vote_user_power[addr][_chain.chain_id][j] if _used_power > 0: break return _used_power @external @view def vote_user_power_for_gauge(addr: address, gauge: address) -> uint256: _used_power: uint256 = 0 _escrow_count: uint256 = MirroredVotingEscrow(self.voting_escrow).voting_escrow_count() for i in range(99): if i >= _escrow_count: break _used_power = self.vote_user_slopes[addr][gauge][0][i].power if _used_power > 0: return _used_power _chain_count: uint256 = MirroredVotingEscrow(self.voting_escrow).mirrored_chains_count() for i in range(99): if i >= _chain_count: break _chain: MirroredChain = MirroredVotingEscrow(self.voting_escrow).mirrored_chains(i) for j in range(99): if j >= _chain.escrow_count: break if _used_power == 0: _used_power = self.vote_user_slopes[addr][gauge][_chain.chain_id][j].power if _used_power > 0: break return _used_power @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
Contract ABI
API[{"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":"constructor","inputs":[{"name":"_mirrored_voting_escrow","type":"address"},{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":38895},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":41034},{"stateMutability":"view","type":"function","name":"gauge_types","inputs":[{"name":"_addr","type":"address"}],"outputs":[{"name":"","type":"int128"}],"gas":3014},{"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":[],"gas":18271410417},{"stateMutability":"nonpayable","type":"function","name":"checkpoint_gauge","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":18325922441},{"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":[],"gas":36722675398},{"stateMutability":"nonpayable","type":"function","name":"change_gauge_weight","inputs":[{"name":"addr","type":"address"},{"name":"weight","type":"uint256"}],"outputs":[],"gas":36831772473},{"stateMutability":"nonpayable","type":"function","name":"vote_for_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address"},{"name":"_user_weight","type":"uint256"}],"outputs":[],"gas":727873652557724},{"stateMutability":"nonpayable","type":"function","name":"vote_for_many_gauge_weights","inputs":[{"name":"_gauge_addr","type":"address[10]"},{"name":"_user_weight","type":"uint256[10]"}],"outputs":[],"gas":6550862873016902},{"stateMutability":"view","type":"function","name":"user_vote_power","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":27298116},{"stateMutability":"view","type":"function","name":"vote_user_power_for_gauge","inputs":[{"name":"addr","type":"address"},{"name":"gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":29064604},{"stateMutability":"view","type":"function","name":"get_gauge_weight","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":5380},{"stateMutability":"view","type":"function","name":"get_type_weight","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5421},{"stateMutability":"view","type":"function","name":"get_total_weight","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":5110},{"stateMutability":"view","type":"function","name":"get_weights_sum_per_type","inputs":[{"name":"type_id","type":"int128"}],"outputs":[{"name":"","type":"uint256"}],"gas":5481},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2958},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2988},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3018},{"stateMutability":"view","type":"function","name":"n_gauge_types","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3048},{"stateMutability":"view","type":"function","name":"n_gauges","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3078},{"stateMutability":"view","type":"function","name":"gauge_type_names","inputs":[{"name":"arg0","type":"int128"}],"outputs":[{"name":"","type":"string"}],"gas":13634},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3183},{"stateMutability":"view","type":"function","name":"vote_user_slopes","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"},{"name":"arg2","type":"uint256"},{"name":"arg3","type":"uint256"}],"outputs":[{"name":"slope","type":"uint256"},{"name":"power","type":"uint256"},{"name":"end","type":"uint256"}],"gas":8428},{"stateMutability":"view","type":"function","name":"vote_user_power","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3643},{"stateMutability":"view","type":"function","name":"last_user_vote","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3658},{"stateMutability":"view","type":"function","name":"points_weight","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}],"gas":5978},{"stateMutability":"view","type":"function","name":"time_weight","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3503},{"stateMutability":"view","type":"function","name":"points_sum","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"bias","type":"uint256"},{"name":"slope","type":"uint256"}],"gas":6119},{"stateMutability":"view","type":"function","name":"time_sum","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3393},{"stateMutability":"view","type":"function","name":"points_total","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3493},{"stateMutability":"view","type":"function","name":"time_total","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3408},{"stateMutability":"view","type":"function","name":"points_type_weight","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3849},{"stateMutability":"view","type":"function","name":"time_type_weight","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3513}]
Deployed Bytecode
0x600436101561000d57611456565b600035601c5260005134612e7f57636b441a408114156100715760043560a01c612e7f57600054331415612e7f57600435600155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae8114156100d257600054331415612e7f57600154610140526000610140511815612e7f576101405160005561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b633f9095b78114156101385760043560a01c612e7f57633b9aca0660043560e05260c052604060c02054610140526000610140511815612e7f576101405160018082038080600081121561012257195b607f1c612e7f5790509050905060005260206000f35b633a04f90081141561014f57600061014052610170565b6318dfe92181141561016b576020604461014037600050610170565b6104c7565b60043560a01c612e7f576024358080600081121561018a57195b607f1c612e7f57905050600054331415612e7f576000602435126101b457600354602435126101b7565b60005b15612e7f57633b9aca0660043560e05260c052604060c02054612e7f5760045461016052610160516001808201808060008112156101f157195b607f1c612e7f57905090509050600455600435600161016051633b9aca00811015612e7f57026006015560243560018082018080600081121561023057195b607f1c612e7f57905090509050633b9aca0660043560e05260c052604060c020554262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f578090509050905061018052600061014051111561043b576101405161016051610180516101a0516024356101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c0516024356101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e052610140516101c0518181830110612e7f5780820190509050633b9aca0d60243560e05260c052604060c0206101805160e05260c052604060c02055610180516001602435633b9aca00811015612e7f5702633b9aca0f01556101e0516101a05161014051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050637735940f6101805160e05260c052604060c020556101805163773594105561014051633b9aca0a60043560e05260c052604060c0206101805160e05260c052604060c020555b6001602435633b9aca00811015612e7f5702633b9aca0f015461047657610180516001602435633b9aca00811015612e7f5702633b9aca0f01555b61018051633b9aca0c60043560e05260c052604060c02055604060046101a037610140516101e0527ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd87760606101a0a1005b63c2c4c5c18114156104e6576006580161174f565b6101405261014050005b63615e523781141561052b5760043560a01c612e7f576004356101405261014051600658016119a9565b6101a0526101a0506006580161174f565b6101405261014050005b636207d866811415610541574261014052610562565b63d3078c9481141561055d576020602461014037600050610562565b6105a5565b60043560a01c612e7f5761014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6395cfcec38114156105bb5742610140526105dc565b636472eee18114156105d75760206024610140376000506105dc565b61065c565b60043560a01c612e7f57610140516004356101605261016051600658016119a9565b6101c052610140526101c050610140516006580161174f565b61016052610140526101605061014051600435610160526101405161018052610180516101605160065801611b76565b6101e052610140526101e05160005260206000f35b6326e56d5e8114156106735760006101c052610694565b6392d0d23281141561068f57602060246101c037600050610694565b610857565b60606004356004016101403760406004356004013511612e7f57600054331415612e7f576003546101e0526101408060056101e05160e05260c052604060c020602082510161012060006003818352015b826101205160200211156106f85761071a565b61012051602002850151610120518501555b81516001018083528114156106e5575b5050505050506101e05160018082018080600081121561073657195b607f1c612e7f5790509050905060035560006101c0511815610855576101405161016051610180516101a0516101c0516101e0516101e051610200526101c05161022052610220516102005160065801611ccd565b6101e0526101c0526101a0526101805261016052610140526000506101e05161026052604061020052610200516102405261014080516020018061020051610240018284600060045af115612e7f57505061020051610240015180602061020051610240010101818260206001820306601f8201039050033682375050602061020051610240015160206001820306601f8201039050610200510101610200527f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc8461020051610240a15b005b63db1ca2608114156108ab576004358080600081121561087357195b607f1c612e7f57905050600054331415612e7f576004356101405260243561016052610160516101405160065801611ccd565b600050005b63d4d2646e8114156108ef5760043560a01c612e7f57600054331415612e7f576004356101405260243561016052610160516101405160065801611f00565b600050005b63d71363288114156109325760043560a01c612e7f573361014052600435610160526024356101805261018051610160516101405160065801612b56565b600050005b6381237fbf811415610a05576000610120525b610120516004013560a01c612e7f57602061012051016101205261014061012051101561097157610945565b61014060006009818352015b600461014051600a811015612e7f57602002013561099a57610a01565b610140513361016052600461014051600a811015612e7f5760200201356101805261014461014051600a811015612e7f5760200201356101a0526101a051610180516101605160065801612b56565b610140526000505b815160010180835281141561097d575b5050005b63f782f0ea811415610c1e5760043560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610a7057610ace565b633b9aca0860043560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c02054610140526000610140511115610abd576101405160005260206000f35b5b8151600101808352811415610a5e575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610b1f57610c0f565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610ba457610bfc565b633b9aca0860043560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c02054610140526000610140511115610beb57610bfc565b5b8151600101808352811415610b92575b50505b8151600101808352811415610b0d575b50506101405160005260206000f35b6355dd6788811415610e6c5760043560a01c612e7f5760243560a01c612e7f5760006101405260206101e0600463730762b86101805261019c6002545afa15612e7f57601f3d1115612e7f576000506101e0516101605261018060006063818352015b610160516101805110610c9357610d02565b6001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c020600060e05260c052604060c0206101805160e05260c052604060c0200154610140526000610140511115610cf1576101405160005260206000f35b5b8151600101808352811415610c81575b50506020610200600463f1d90a156101a0526101bc6002545afa15612e7f57601f3d1115612e7f5760005061020051610180526101a060006063818352015b610180516101a05110610d5357610e5d565b6101c0604061028060246327294447610200526101a0516102205261021c6002545afa15612e7f57603f3d1115612e7f5761028080808080516102c0525050602081019050808080516102e052505050506000506102c08051825280602001518260200152505061020060006063818352015b6101e0516102005110610dd857610e4a565b61014051610e28576001633b9aca0760043560e05260c052604060c02060243560e05260c052604060c0206101c05160e05260c052604060c0206102005160e05260c052604060c0200154610140525b6000610140511115610e3957610e4a565b5b8151600101808352811415610dc6575b50505b8151600101808352811415610d41575b50506101405160005260206000f35b634e791a3a811415610ebe5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c020633b9aca0c60043560e05260c052604060c0205460e05260c052604060c0205460005260206000f35b6372fdccfa811415610f255760043580806000811215610eda57195b607f1c612e7f57905050637735941160043560e05260c052604060c0206001600435633b9aca00811015612e7f57026377359412015460e05260c052604060c0205460005260206000f35b636977ff92811415610f5157637735940f63773594105460e05260c052604060c0205460005260206000f35b636f214a6a811415610fb85760043580806000811215610f6d57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c0206001600435633b9aca00811015612e7f5702633b9aca0f015460e05260c052604060c0205460005260206000f35b63f851a440811415610fd05760005460005260206000f35b6317f7182a811415610fe85760015460005260206000f35b63dfe050318114156110005760025460005260206000f35b639fba03a18114156110185760035460005260206000f35b63e93841d08114156110305760045460005260206000f35b63d958a8fc8114156110f5576004358080600081121561104c57195b607f1c612e7f57905050600560043560e05260c052604060c02080610180602082540161012060006003818352015b8261012051602002111561108e576110b0565b61012051850154610120516020028501525b815160010180835281141561107b575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63b0539187811415611120576001600435633b9aca00811015612e7f57026006015460005260206000f35b634ac3b2768114156111bc5760043560a01c612e7f5760243560a01c612e7f57633b9aca0760043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c02060643560e05260c052604060c0206101408080808454815250506020810190508080600185015481525050602081019050808060028501548152505060609050905060c05260c051610140f35b6382cec59181141561120b5760043560a01c612e7f57633b9aca0860043560e05260c052604060c02060243560e05260c052604060c02060443560e05260c052604060c0205460005260206000f35b637e418fa08114156112565760043560a01c612e7f5760243560a01c612e7f57633b9aca0960043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b63edba52738114156112bb5760043560a01c612e7f57633b9aca0a60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b63a4d7a2508114156112ee5760043560a01c612e7f57633b9aca0c60043560e05260c052604060c0205460005260206000f35b63a9b48c01811415611363576004358080600081121561130a57195b607f1c612e7f57905050633b9aca0d60043560e05260c052604060c02060243560e05260c052604060c020610140808080845481525050602081019050808060018501548152505060409050905060c05260c051610140f35b635a549158811415611391576001600435633b9aca00811015612e7f5702633b9aca0f015460005260206000f35b631142916b8114156113ba57637735940f60043560e05260c052604060c0205460005260206000f35b63513872bd8114156113d55763773594105460005260206000f35b63afd2bb4981141561142657600435808060008112156113f157195b607f1c612e7f57905050637735941160043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b6351ce6b59811415611454576001600435633b9aca00811015612e7f57026377359412015460005260206000f35b505b60006000fd5b6101605261014052600161014051633b9aca00811015612e7f5702637735941201546101805260006101805111156115685763773594116101405160e05260c052604060c0206101805160e05260c052604060c020546101a0526101c060006101f4818352015b426101805111156114d357611552565b610180805162093a808181830110612e7f57808201905090508152506101a05163773594116101405160e05260c052604060c0206101805160e05260c052604060c02055426101805111156115415761018051600161014051633b9aca00811015612e7f5702637735941201555b5b81516001018083528114156114c3575b50506101a0516000526000516101605156611576565b600060005260005161016051565b005b6101605261014052600161014051633b9aca00811015612e7f5702633b9aca0f015461018052600061018051111561173f576101a0633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b426101805111156115fd57611729565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a05111156116ab576101a0805161020051808210612e7f5780820390509050815250633b9aca0e6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f57808203905090508152506116b8565b60006101a05260006101c0525b633b9aca0d6101405160e05260c052604060c0206101805160e05260c052604060c0206101a080518255806020015160018301555050426101805111156117185761018051600161014051633b9aca00811015612e7f5702633b9aca0f01555b5b81516001018083528114156115ed575b50506101a051600052600051610160515661174d565b600060005260005161016051565b005b6101405263773594105461016052600354610180524261016051111561178a57610160805162093a80808210612e7f57808203905090508152505b637735940f6101605160e05260c052604060c020546101a0526101c060006064818352015b610180516101c05114156117c25761185d565b6101405161016051610180516101a0516101c0516101c0516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240506101405161016051610180516101a0516101c0516101c0516101e0526101e0516006580161145c565b610240526101c0526101a052610180526101605261014052610240505b81516001018083528114156117af575b50506101c060006101f4818352015b4261016051111561187c57611997565b610160805162093a808181830110612e7f578082019050905081525060006101a0526101e060006064818352015b610180516101e05114156118bd57611955565b633b9aca0d6101e05160e05260c052604060c0206101605160e05260c052604060c020546102005263773594116101e05160e05260c052604060c0206101605160e05260c052604060c02054610220526101a080516102005161022051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090508152505b81516001018083528114156118aa575b50506101a051637735940f6101605160e05260c052604060c020554261016051111561198657610160516377359410555b5b815160010180835281141561186c575b50506101a05160005260005161014051565b6101605261014052633b9aca0c6101405160e05260c052604060c02054610180526000610180511115611b66576101a0633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c020805482526001810154826020015250506101e060006101f4818352015b42610180511115611a2957611b50565b610180805162093a808181830110612e7f57808201905090508152506101c05162093a80808202821582848304141715612e7f578090509050905061020052610200516101a0511115611ad7576101a0805161020051808210612e7f5780820390509050815250633b9aca0b6101405160e05260c052604060c0206101805160e05260c052604060c02054610220526101c0805161022051808210612e7f5780820390509050815250611ae4565b60006101a05260006101c0525b633b9aca0a6101405160e05260c052604060c0206101805160e05260c052604060c0206101a08051825580602001516001830155505042610180511115611b3f5761018051633b9aca0c6101405160e05260c052604060c020555b5b8151600101808352811415611a19575b50506101a0516000526000516101605156611b74565b600060005260005161016051565b005b6101805261014052610160526101605162093a808082049050905062093a80808202821582848304141715612e7f57809050905090506101a052637735940f6101a05160e05260c052604060c020546101c05260006101c0511115611cbd57633b9aca066101405160e05260c052604060c02054600180820380806000811215611bfc57195b607f1c612e7f579050905090506101e05263773594116101e05160e05260c052604060c0206101a05160e05260c052604060c0205461020052633b9aca0a6101405160e05260c052604060c0206101a05160e05260c052604060c0205461022052670de0b6b3a764000061020051808202821582848304141715612e7f578090509050905061022051808202821582848304141715612e7f57809050905090506101c051808015612e7f578204905090506000526000516101805156611ccb565b600060005260005161018051565b005b6101805261014052610160526101405161016051610180516101a051610140516101c0526101c0516006580161145c565b610220526101a052610180526101605261014052610220516101a0526101405161016051610180516101a0516101c051610140516101e0526101e05160065801611578565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516006580161174f565b610200526101e0526101c0526101a052610180526101605261014052610200516101e0524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f5780905090509050610200526101e0516101c05161016051808202821582848304141715612e7f57809050905090508181830110612e7f57808201905090506101c0516101a051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506101e0526101e051637735940f6102005160e05260c052604060c020556101605163773594116101405160e05260c052604060c0206102005160e05260c052604060c020556102005163773594105561020051600161014051633b9aca00811015612e7f5702637735941201556101405161022052610200516102405261016051610260526101e051610280527e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016080610220a161018051565b610180526101405261016052633b9aca066101405160e05260c052604060c02054600180820380806000811215611f3357195b607f1c612e7f579050905090506101a0526101405161016051610180516101a0516101c051610140516101e0526101e051600658016119a9565b610240526101c0526101a052610180526101605261014052610240516101c0526101405161016051610180516101a0516101c0516101e0516101a05161020052610200516006580161145c565b610260526101e0526101c0526101a052610180526101605261014052610260516101e0526101405161016051610180516101a0516101c0516101e051610200516101a051610220526102205160065801611578565b61028052610200526101e0526101c0526101a05261018052610160526101405261028051610200526101405161016051610180516101a0516101c0516101e05161020051610220516006580161174f565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405261024051610220524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102405261016051633b9aca0a6101405160e05260c052604060c0206102405160e05260c052604060c0205561024051633b9aca0c6101405160e05260c052604060c0205561020051610160518181830110612e7f57808201905090506101c051808210612e7f57808203905090506102605261026051633b9aca0d6101a05160e05260c052604060c0206102405160e05260c052604060c020556102405160016101a051633b9aca00811015612e7f5702633b9aca0f015561022051610260516101e051808202821582848304141715612e7f57809050905090508181830110612e7f5780820190509050610200516101e051808202821582848304141715612e7f5780905090509050808210612e7f57808203905090506102205261022051637735940f6102405160e05260c052604060c02055610240516377359410556101405161028052426102a052610160516102c052610220516102e0527f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726080610280a161018051565b6101e0526101405261016052610180526101a0526101c0526002546102005260206103006064633e7e92cf6102405261014051610260526101605161028052610180516102a05261025c610200515afa15612e7f57601f3d1115612e7f576000506103005160008112612e7f57610220526020610320606463cca604d2610260526101405161028052610160516102a052610180516102c05261027c610200515afa15612e7f57601f3d1115612e7f5760005061032051610240524262093a808181830110612e7f578082019050905062093a808082049050905062093a80808202821582848304141715612e7f57809050905090506102605261026051610240511161235e576101e051565b633b9aca066101a05160e05260c052604060c0205460018082038080600081121561238557195b607f1c612e7f579050905090506102805260006102805112156123e7576308c379a06102a05260206102c052600f6102e0527f4761756765206e6f742061646465640000000000000000000000000000000000610300526102e05060646102bcfd5b6102a0633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c0208054825260018101548260200152600281015482604001525050600061030052610260516102e0511115612474576102e05161026051808210612e7f5780820390509050610300525b6102a05161030051808202821582848304141715612e7f578090509050905061032052610340610220516101c051808202821582848304141715612e7f57809050905090506127108082049050905081526101c0518160200152610240518160400152506102405161026051808210612e7f57808203905090506103a052610340516103a051808202821582848304141715612e7f57809050905090506103c052633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020546103e0526103e051610360518181830110612e7f57808201905090506102c051808210612e7f57808203905090506103e0526103e051633b9aca086101405160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020556127106103e0511115612603576308c379a0610400526020610420526013610440527f5573656420746f6f206d75636820706f776572000000000000000000000000006104605261044050606461041cfd5b610140610420525b6104205151602061042051016104205261042061042051101561262d5761260b565b6101a0516104405261044051600658016119a9565b6104a052610400610420525b61042051526020610420510361042052610140610420511061266f5761264e565b6104a051610400526001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015461042052610140610460525b610460515160206104605101610460526104606104605110156126cc576126aa565b61028051610480526104805160065801611578565b6104e052610440610460525b61046051526020610460510361046052610140610460511061270e576126ed565b6104e051610440526001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020015461046052610400516103c0518181830110612e7f5780820190509050610320518082101561276b578061276d565b815b9050905061032051808210612e7f5780820390509050633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c02055610440516103c0518181830110612e7f578082019050905061032051808210156127d157806127d3565b815b9050905061032051808210612e7f5780820390509050633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c02055610260516102e05111156128f25761042051610340518181830110612e7f57808201905090506102a051808210156128455780612847565b815b905090506102a051808210612e7f57808203905090506001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020015561046051610340518181830110612e7f57808201905090506102a051808210156128ae57806128b0565b815b905090506102a051808210612e7f57808203905090506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c0200155612971565b6001633b9aca0a6101a05160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155506001633b9aca0d6102805160e05260c052604060c0206102605160e05260c052604060c020018054610340518181830110612e7f57808201905090508155505b426102e05111156129f157633b9aca0b6101a05160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f5780820390509050815550633b9aca0e6102805160e05260c052604060c0206102e05160e05260c052604060c02080546102a051808210612e7f57808203905090508155505b633b9aca0b6101a05160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550633b9aca0e6102805160e05260c052604060c0206103805160e05260c052604060c0208054610340518181830110612e7f5780820190509050815550610140610480525b61048051516020610480510161048052610480610480511015612a9357612a71565b6006580161174f565b6104a052610460610480525b610480515260206104805103610480526101406104805110612ac957612aa8565b6104a050633b9aca076101405160e05260c052604060c0206101a05160e05260c052604060c0206101605160e05260c052604060c0206101805160e05260c052604060c020610340805182558060200151600183015580604001516002830155505042633b9aca096101405160e05260c052604060c0206101a05160e05260c052604060c020556101e051565b6101a05261014052610160526101805260006101805110612b7f57612710610180511115612b82565b60005b612bcb576308c379a06101c05260206101e052601e610200527f596f75207573656420616c6c20796f757220766f74696e6720706f7765720000610220526102005060646101dcfd5b6020610240600463730762b86101e0526101fc6002545afa15612e7f57601f3d1115612e7f57600050610240516101c0526101e060006063818352015b6101c0516101e05110612c1a57612ca1565b6101405161016051610180516101a0516101c0516101e05161014051610200526000610220526101e0516102405261016051610260526101805161028052610280516102605161024051610220516102005160065801612251565b6101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612c08575b50506020610260600463f1d90a156102005261021c6002545afa15612e7f57601f3d1115612e7f57600050610260516101e05261020060006063818352015b6101e0516102005110612cf257612e33565b61022060406102e06024632729444761026052610200516102805261027c6002545afa15612e7f57603f3d1115612e7f576102e080808080516103205250506020810190508080805161034052505050506000506103208051825280602001518260200152505061026060006063818352015b610240516102605110612d7757612e20565b6101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516101405161028052610220516102a052610260516102c052610160516102e0526101805161030052610300516102e0516102c0516102a0516102805160065801612251565b610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415612d65575b50505b8151600101808352811415612ce0575b505042610200526101405161022052610160516102405261018051610260527f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc916080610200a16101a051565b600080fd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ARB | 100.00% | $0.383867 | 4,852.5949 | $1,862.75 |
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.