Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
8 addresses found via
Latest 25 from a total of 100 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Vote_for_gauge_w... | 17823316 | 57 days 5 hrs ago | IN | 0 ETH | 0.00603048 | ||||
Vote_for_gauge_w... | 17675322 | 77 days 23 hrs ago | IN | 0 ETH | 0.00348691 | ||||
Vote_for_gauge_w... | 17314988 | 128 days 15 hrs ago | IN | 0 ETH | 0.0072235 | ||||
Vote_for_gauge_w... | 17271653 | 134 days 18 hrs ago | IN | 0 ETH | 0.00886599 | ||||
Vote_for_gauge_w... | 17271618 | 134 days 18 hrs ago | IN | 0 ETH | 0.00481024 | ||||
Vote_for_gauge_w... | 17234948 | 139 days 23 hrs ago | IN | 0 ETH | 0.01830273 | ||||
Vote_for_gauge_w... | 17234941 | 139 days 23 hrs ago | IN | 0 ETH | 0.01549949 | ||||
Vote_for_gauge_w... | 17131264 | 154 days 13 hrs ago | IN | 0 ETH | 0.01039558 | ||||
Vote_for_gauge_w... | 17130121 | 154 days 17 hrs ago | IN | 0 ETH | 0.00790197 | ||||
Vote_for_gauge_w... | 17130120 | 154 days 17 hrs ago | IN | 0 ETH | 0.00820249 | ||||
Vote_for_gauge_w... | 17130114 | 154 days 17 hrs ago | IN | 0 ETH | 0.00336573 | ||||
Vote_for_gauge_w... | 17105659 | 158 days 3 hrs ago | IN | 0 ETH | 0.0044411 | ||||
Vote_for_gauge_w... | 17007985 | 172 days 1 hr ago | IN | 0 ETH | 0.00543123 | ||||
Vote_for_gauge_w... | 16985676 | 175 days 5 hrs ago | IN | 0 ETH | 0.00582063 | ||||
Vote_for_gauge_w... | 16985674 | 175 days 5 hrs ago | IN | 0 ETH | 0.00272278 | ||||
Vote_for_gauge_w... | 16958975 | 179 days 40 mins ago | IN | 0 ETH | 0.0057864 | ||||
Vote_for_gauge_w... | 16918863 | 184 days 15 hrs ago | IN | 0 ETH | 0.00607667 | ||||
Vote_for_gauge_w... | 16903865 | 186 days 18 hrs ago | IN | 0 ETH | 0.00312593 | ||||
Vote_for_gauge_w... | 16901998 | 187 days 47 mins ago | IN | 0 ETH | 0.00318419 | ||||
Vote_for_gauge_w... | 16894746 | 188 days 1 hr ago | IN | 0 ETH | 0.00311258 | ||||
Vote_for_gauge_w... | 16887527 | 189 days 1 hr ago | IN | 0 ETH | 0.00559227 | ||||
Vote_for_gauge_w... | 16880276 | 190 days 2 hrs ago | IN | 0 ETH | 0.0036574 | ||||
Vote_for_gauge_w... | 16879001 | 190 days 6 hrs ago | IN | 0 ETH | 0.00464528 | ||||
Vote_for_gauge_w... | 16878212 | 190 days 8 hrs ago | IN | 0 ETH | 0.00447118 | ||||
Vote_for_gauge_w... | 16878198 | 190 days 9 hrs ago | IN | 0 ETH | 0.00444919 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x0cb9cc...42eF6415 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.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 """ # 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 VotingEnabled: voting_enabled: bool 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) # CRV token voting_escrow: public(address) # Voting escrow veboost_proxy: public(address) # Boosting delegation # 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) voting_enabled: public(bool) # whether veRBN holders can currently vote on gauge weights @external def __init__(_token: address, _voting_escrow: address, _veboost_proxy: address, _admin: address): """ @notice Contract constructor @param _token `ERC20CRV` contract address @param _voting_escrow `VotingEscrow` contract address @param _admin Admin of contract """ assert _token != ZERO_ADDRESS assert _voting_escrow != ZERO_ADDRESS assert _veboost_proxy != ZERO_ADDRESS assert _admin != ZERO_ADDRESS self.admin = _admin self.token = _token self.voting_escrow = _voting_escrow self.veboost_proxy = _veboost_proxy 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 def set_voting_enabled(_voting_enabled: bool): """ @notice Toggle voting enabled """ assert msg.sender == self.admin # dev: admin only self.voting_enabled = _voting_enabled log VotingEnabled(_voting_enabled) @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 """ assert self.voting_enabled, "Voting disabled" 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":"VotingEnabled","inputs":[{"name":"voting_enabled","type":"bool","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":"_token","type":"address"},{"name":"_voting_escrow","type":"address"},{"name":"_veboost_proxy","type":"address"},{"name":"_admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":39445},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":41536},{"stateMutability":"nonpayable","type":"function","name":"set_voting_enabled","inputs":[{"name":"_voting_enabled","type":"bool"}],"outputs":[],"gas":39505},{"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":9375128672},{"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":"veboost_proxy","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3090},{"stateMutability":"view","type":"function","name":"n_gauge_types","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3120},{"stateMutability":"view","type":"function","name":"n_gauges","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3150},{"stateMutability":"view","type":"function","name":"gauge_type_names","inputs":[{"name":"arg0","type":"int128"}],"outputs":[{"name":"","type":"string"}],"gas":13756},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3255},{"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":8045},{"stateMutability":"view","type":"function","name":"vote_user_power","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3536},{"stateMutability":"view","type":"function","name":"last_user_vote","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3832},{"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":5868},{"stateMutability":"view","type":"function","name":"time_weight","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3626},{"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":5938},{"stateMutability":"view","type":"function","name":"time_sum","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3465},{"stateMutability":"view","type":"function","name":"points_total","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3565},{"stateMutability":"view","type":"function","name":"time_total","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3480},{"stateMutability":"view","type":"function","name":"points_type_weight","inputs":[{"name":"arg0","type":"int128"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3901},{"stateMutability":"view","type":"function","name":"time_type_weight","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3585},{"stateMutability":"view","type":"function","name":"voting_enabled","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3570}]
Deployed Bytecode
0x600436101561000d576117a2565b60046000601c376000513461230157636b441a408118610074576004358060a01c6123015760e05260005433186123015760e0516001557f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e960e051610100526020610100a1005b636a1c05ae81186100ce5760005433186123015760015460e052600060e051146123015760e0516000557febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a118910560e051610100526020610100a1005b6358c9da998118610129576004358060011c6123015760e05260005433186123015760e05163b2d05e14557f24505c2a690f21afd3a9d6fd8280e5a12ad3fcf5edee69a44d19537561a85ad860e051610100526020610100a1005b633f9095b7811861018a576004358060a01c6123015760e052633b9aca0860e05160a0526080526040608020546101005260006101005114612301576101005160018082038060801d81607f1d186123015790509050610120526020610120f35b633a04f90081186101a05760006102e0526101b3565b6318dfe921811861047f576044356102e0525b6004358060a01c612301576102a0526024358060801d81607f1d18612301576102c05260005433186123015760006102c05112156101f25760006101fb565b6005546102c051125b1561230157633b9aca086102a05160a05260805260406080205461230157600654610300526103005160018082018060801d81607f1d1861230157905090506006556102a051600161030051633b9aca008110156123015702600801556102c05160018082018060801d81607f1d186123015790509050633b9aca086102a05160a0526080526040608020554262093a808181830110612301578082019050905062093a808082049050905062093a8080820282158284830414171561230157905090506103205260006102e05111156103e8576102c05160e0526102e16103606117a8565b61036051610340526102c05160e0526102fb6103806118ae565b610380516103605261030e6103a0611a64565b6103a051610380526102e0516103605181818301106123015780820190509050633b9aca0f6102c05160a05260805260406080206103205160a0526080526040608020556103205160016102c051633b9aca008110156123015702633b9aca11015561038051610340516102e05180820282158284830414171561230157905090508181830110612301578082019050905063773594116103205160a052608052604060802055610320516377359412556102e051633b9aca0c6102a05160a05260805260406080206103205160a0526080526040608020555b60016102c051633b9aca008110156123015702633b9aca110154610425576103205160016102c051633b9aca008110156123015702633b9aca1101555b61032051633b9aca0e6102a05160a0526080526040608020557ffd55b3191f9c9dd92f4f134dd700e7d76f6a0c836a08687023d6d38f03ebd8776102a051610340526102c051610360526102e051610380526060610340a1005b63c2c4c5c1811861049b576104956102a0611a64565b6102a050005b63615e523781186104dc576004358060a01c612301576102a0526102a05160e0526104c76102c0611c4d565b6102c0506104d66102c0611a64565b6102c050005b636207d86681186104f157426101e052610504565b63d3078c94811861053c576024356101e0525b6004358060a01c612301576101c0526101c05160e0526101e0516101005261052d610200611df9565b61020051610220526020610220f35b6395cfcec3811861055157426102c052610564565b636472eee181186105c1576024356102c0525b6004358060a01c612301576102a0526102a05160e0526105856102e0611c4d565b6102e0506105946102e0611a64565b6102e0506102a05160e0526102c051610100526105b26102e0611df9565b6102e051610300526020610300f35b6326e56d5e81186105d7576000610440526105ea565b6392d0d232811861074657602435610440525b60043560040160408135116123015780803560200180826103e037505050600054331861230157600554610460526103e08060076104605160a0526080526040608020602082510160c060006003818352015b8260c051602002111561064f5761066e565b60c05160200285015160c051850155815160010180835281141561063d575b5050505050506104605160018082018060801d81607f1d1861230157905090506005556000610440511461074457610460516102a052610440516102c0526106b4611f27565b7f6fbe76157c712f16b5a3c44ed48baa04e3450bc3fab0c020e848aca72bbccc84610480806040808252808301806103e080516020018083828460045afa905050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905060208201915061046051825290509050610480a15b005b63db1ca2608118610787576004358060801d81607f1d18612301576103e0526000543318612301576103e0516102a0526024356102c052610785611f27565b005b63d4d2646e81186107c3576004358060a01c6123015761044052600054331861230157610440516102a0526024356102c0526107c16120b9565b005b63d713632881186111f0576004358060a01c612301576102a05263b2d05e145461085e57600f6102c0527f566f74696e672064697361626c656400000000000000000000000000000000006102e0526102c0506102c051806102e001818260206001820306601f82010390500336823750506308c379a06102805260206102a0526102c05160206001820306601f820103905060440161029cfd5b6003546102c052637c74a1746103005233610320526020610300602461031c6102c0515afa610892573d600060003e3d6000fd5b601f3d1115612301576103005160008112612301576102e05263adc635896103205233610340526020610320602461033c6102c0515afa6108d8573d600060003e3d6000fd5b601f3d1115612301576103205161030052600654610320524262093a808181830110612301578082019050905062093a808082049050905062093a808082028215828483041417156123015790509050610340526103405161030051116109b0576020610360527f596f757220746f6b656e206c6f636b206578706972657320746f6f20736f6f6e6103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b600060243510156109c25760006109cb565b61271060243511155b610a4657601e610360527f596f75207573656420616c6c20796f757220766f74696e6720706f77657200006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca0b3360a05260805260406080206102a05160a052608052604060802054620d2f0081818301106123015780820190509050421015610af9576014610360527f43616e6e6f7420766f746520736f206f6674656e0000000000000000000000006103805261036050610360518061038001818260206001820306601f82010390500336823750506308c379a0610320526020610340526103605160206001820306601f820103905060440161033cfd5b633b9aca086102a05160a05260805260406080205460018082038060801d81607f1d186123015790509050610360526000610360511215610bab57600f610380527f4761756765206e6f7420616464656400000000000000000000000000000000006103a0526103805061038051806103a001818260206001820306601f82010390500336823750506308c379a0610340526020610360526103805160206001820306601f820103905060440161035cfd5b633b9aca093360a05260805260406080206102a05160a052608052604060802080546103805260018101546103a05260028101546103c0525060006103e052610340516103c0511115610c13576103c0516103405180821061230157808203905090506103e0525b610380516103e0518082028215828483041417156123015790509050610400526102e051602435808202821582848304141715612301579050905061271080820490509050610420526024356104405261030051610460526103005161034051808210612301578082039050905061048052610420516104805180820282158284830414171561230157905090506104a052633b9aca0a3360a0526080526040608020546104c0526104c05161044051818183011061230157808201905090506103a05180821061230157808203905090506104c0526104c051633b9aca0a3360a05260805260406080205560006104c0511015610d12576000610d1c565b6127106104c05111155b610d975760136104e0527f5573656420746f6f206d75636820706f77657200000000000000000000000000610500526104e0506104e0518061050001818260206001820306601f82010390500336823750506308c379a06104a05260206104c0526104e05160206001820306601f82010390506044016104bcfd5b6102a05160e052610da9610500611c4d565b610500516104e0526001633b9aca0c6102a05160a05260805260406080206103405160a05260805260406080200154610500526103605160e052610dee6105406118ae565b61054051610520526001633b9aca0f6103605160a05260805260406080206103405160a05260805260406080200154610540526104e0516104a0518181830110612301578082019050905061040051808210610e4a5781610e4c565b805b90509050610400518082106123015780820390509050633b9aca0c6102a05160a05260805260406080206103405160a052608052604060802055610520516104a0518181830110612301578082019050905061040051808210610eaf5781610eb1565b805b90509050610400518082106123015780820390509050633b9aca0f6103605160a05260805260406080206103405160a052608052604060802055610340516103c05111610f7b576001633b9aca0c6102a05160a05260805260406080206103405160a052608052604060802001805461042051818183011061230157808201905090508155506001633b9aca0f6103605160a05260805260406080206103405160a0526080526040608020018054610420518181830110612301578082019050905081555061104c565b61050051610420518181830110612301578082019050905061038051808210610fa45781610fa6565b805b905090506103805180821061230157808203905090506001633b9aca0c6102a05160a05260805260406080206103405160a052608052604060802001556105405161042051818183011061230157808201905090506103805180821061100c578161100e565b805b905090506103805180821061230157808203905090506001633b9aca0f6103605160a05260805260406080206103405160a052608052604060802001555b426103c05111156110cc57633b9aca0d6102a05160a05260805260406080206103c05160a05260805260406080208054610380518082106123015780820390509050815550633b9aca106103605160a05260805260406080206103c05160a052608052604060802080546103805180821061230157808203905090508155505b633b9aca0d6102a05160a05260805260406080206104605160a052608052604060802080546104205181818301106123015780820190509050815550633b9aca106103605160a05260805260406080206104605160a05260805260406080208054610420518181830110612301578082019050905081555061114f610560611a64565b61056050633b9aca093360a05260805260406080206102a05160a05260805260406080206104205181556104405160018201556104605160028201555042633b9aca0b3360a05260805260406080206102a05160a0526080526040608020557f45ca9a4c8d0119eb329e580d28fe689e484e1be230da8037ade9547d2d25cc91426105605233610580526102a0516105a0526024356105c0526080610560a1005b634e791a3a8118611247576004358060a01c6123015760e052633b9aca0c60e05160a0526080526040608020633b9aca0e60e05160a05260805260406080205460a052608052604060802054610100526020610100f35b6372fdccfa81186112a8576004358060801d81607f1d186123015760e052637735941360e05160a0526080526040608020600160e051633b9aca0081101561230157026377359414015460a052608052604060802054610100526020610100f35b636977ff9281186112d357637735941163773594125460a05260805260406080205460e052602060e0f35b636f214a6a8118611334576004358060801d81607f1d186123015760e052633b9aca0f60e05160a0526080526040608020600160e051633b9aca008110156123015702633b9aca11015460a052608052604060802054610100526020610100f35b63f851a440811861134b5760005460e052602060e0f35b6317f7182a81186113625760015460e052602060e0f35b63fc0c546a81186113795760025460e052602060e0f35b63dfe0503181186113905760035460e052602060e0f35b6349ec3b3f81186113a75760045460e052602060e0f35b639fba03a181186113be5760055460e052602060e0f35b63e93841d081186113d55760065460e052602060e0f35b63d958a8fc811861149e576004358060801d81607f1d186123015760e052610100806020808252600760e05160a052608052604060802081840180828082602082540160c060006003818352015b8260c051602002111561143557611454565b60c05185015460c0516020028501528151600101808352811415611423575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f82010390509050905090508101905090509050610100f35b63b053918781186114c8576001600435633b9aca0081101561230157026008015460e052602060e0f35b630f467f988118611532576004358060a01c6123015760e0526024358060a01c6123015761010052633b9aca0960e05160a05260805260406080206101005160a0526080526040608020805461012052600181015461014052600281015461016052506060610120f35b63411e74b5811861156a576004358060a01c6123015760e052633b9aca0a60e05160a052608052604060802054610100526020610100f35b637e418fa081186115c0576004358060a01c6123015760e0526024358060a01c6123015761010052633b9aca0b60e05160a05260805260406080206101005160a052608052604060802054610120526020610120f35b63edba52738118611611576004358060a01c6123015760e052633b9aca0c60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b63a4d7a2508118611649576004358060a01c6123015760e052633b9aca0e60e05160a052608052604060802054610100526020610100f35b63a9b48c01811861169f576004358060801d81607f1d186123015760e052633b9aca0f60e05160a052608052604060802060243560a0526080526040608020805461010052600181015461012052506040610100f35b635a54915881186116cc576001600435633b9aca008110156123015702633b9aca11015460e052602060e0f35b631142916b81186116f457637735941160043560a05260805260406080205460e052602060e0f35b63513872bd811861170e5763773594125460e052602060e0f35b63afd2bb498118611759576004358060801d81607f1d186123015760e052637735941360e05160a052608052604060802060243560a052608052604060802054610100526020610100f35b6351ce6b598118611786576001600435633b9aca0081101561230157026377359414015460e052602060e0f35b6311d9dbd381186117a05763b2d05e145460e052602060e0f35b505b60006000fd5b600160e051633b9aca0081101561230157026377359414015461010052600061010051116117de5760008152506118ac566118ac565b637735941360e05160a05260805260406080206101005160a0526080526040608020546101205261014060006101f4818352015b426101005111156118225761189e565b610100805162093a808181830110612301578082019050905081525061012051637735941360e05160a05260805260406080206101005160a0526080526040608020554261010051111561188e5761010051600160e051633b9aca008110156123015702637735941401555b8151600101808352811415611812575b5050610120518152506118ac565b565b600160e051633b9aca008110156123015702633b9aca11015461010052600061010051116118e4576000815250611a6256611a62565b633b9aca0f60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b4261010051111561193357611a54565b610100805162093a80818183011061230157808201905090508152506101405162093a8080820282158284830414171561230157905090506101805261018051610120511161198d576000610120526000610140526119e9565b6101208051610180518082106123015780820390509050815250633b9aca1060e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230157808203905090508152505b633b9aca0f60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611a445761010051600160e051633b9aca008110156123015702633b9aca1101555b8151600101808352811415611923575b505061012051815250611a62565b565b6377359412546101c0526005546101e052426101c0511115611a9b576101c0805162093a8080821061230157808203905090508152505b63773594116101c05160a0526080526040608020546102005261022060006064818352015b6101e0516102205118611ad257611b0e565b6102205160e052611ae46102406118ae565b610240506102205160e052611afa6102406117a8565b610240508151600101808352811415611ac0575b505061022060006101f4818352015b426101c0511115611b2d57611c42565b6101c0805162093a808181830110612301578082019050905081525060006102005261024060006064818352015b6101e0516102405118611b6d57611c01565b633b9aca0f6102405160a05260805260406080206101c05160a0526080526040608020546102605263773594136102405160a05260805260406080206101c05160a05260805260406080205461028052610200805161026051610280518082028215828483041417156123015790509050818183011061230157808201905090508152508151600101808352811415611b5b575b50506102005163773594116101c05160a052608052604060802055426101c0511115611c32576101c0516377359412555b8151600101808352811415611b1d575b505061020051815250565b633b9aca0e60e05160a0526080526040608020546101005260006101005111611c7e576000815250611df756611df7565b633b9aca0c60e05160a05260805260406080206101005160a05260805260406080208054610120526001810154610140525061016060006101f4818352015b42610100511115611ccd57611de9565b610100805162093a80818183011061230157808201905090508152506101405162093a80808202821582848304141715612301579050905061018052610180516101205111611d2757600061012052600061014052611d83565b6101208051610180518082106123015780820390509050815250633b9aca0d60e05160a05260805260406080206101005160a0526080526040608020546101a05261014080516101a05180821061230157808203905090508152505b633b9aca0c60e05160a05260805260406080206101005160a05260805260406080206101205181556101405160018201555042610100511115611dd95761010051633b9aca0e60e05160a0526080526040608020555b8151600101808352811415611cbd575b505061012051815250611df7565b565b6101005162093a808082049050905062093a8080820282158284830414171561230157905090506101205263773594116101205160a0526080526040608020546101405260006101405111611e56576000815250611f2556611f25565b633b9aca0860e05160a05260805260406080205460018082038060801d81607f1d1861230157905090506101605263773594136101605160a05260805260406080206101205160a05260805260406080205461018052633b9aca0c60e05160a05260805260406080206101205160a0526080526040608020546101a052670de0b6b3a76400006101805180820282158284830414171561230157905090506101a05180820282158284830414171561230157905090506101405180801561230157820490509050815250611f25565b565b6102a05160e052611f396103006117a8565b610300516102e0526102a05160e052611f536103206118ae565b6103205161030052611f66610340611a64565b61034051610320524262093a808181830110612301578082019050905062093a808082049050905062093a8080820282158284830414171561230157905090506103405261032051610300516102c051808202821582848304141715612301579050905081818301106123015780820190509050610300516102e05180820282158284830414171561230157905090508082106123015780820390509050610320526103205163773594116103405160a0526080526040608020556102c05163773594136102a05160a05260805260406080206103405160a052608052604060802055610340516377359412556103405160016102a051633b9aca008110156123015702637735941401557e170bcdc909b6ac6e12d020fe8942256312cdcd555fb6d712899eba56d2f9016102a0516103605261034051610380526102c0516103a052610320516103c0526080610360a1565b633b9aca086102a05160a05260805260406080205460018082038060801d81607f1d1861230157905090506102e0526102a05160e0526120fa610320611c4d565b61032051610300526102e05160e0526121146103406117a8565b61034051610320526102e05160e05261212e6103606118ae565b6103605161034052612141610380611a64565b61038051610360524262093a808181830110612301578082019050905062093a808082049050905062093a808082028215828483041417156123015790509050610380526102c051633b9aca0c6102a05160a05260805260406080206103805160a05260805260406080205561038051633b9aca0e6102a05160a052608052604060802055610340516102c051818183011061230157808201905090506103005180821061230157808203905090506103a0526103a051633b9aca0f6102e05160a05260805260406080206103805160a0526080526040608020556103805160016102e051633b9aca008110156123015702633b9aca110155610360516103a05161032051808202821582848304141715612301579050905081818301106123015780820190509050610340516103205180820282158284830414171561230157905090508082106123015780820390509050610360526103605163773594116103805160a052608052604060802055610380516377359412557f54c0cf3647e6cdb2fc0a7876e60ba77563fceedf2e06c01c597f8dccb9e6bd726102a0516103c052426103e0526102c05161040052610360516104205260806103c0a1565b600080fd
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.