ETH Price: $2,532.36 (+3.73%)

Contract

0x46b38522422D597dDbAA2D6E98D6C9b397028d5B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim205971252024-08-24 8:00:114 days ago1724486411IN
0x46b38522...397028d5B
0 ETH0.00005620.8427193
Claim205971202024-08-24 7:59:114 days ago1724486351IN
0x46b38522...397028d5B
0 ETH0.000059750.8959671
Claim205971162024-08-24 7:58:234 days ago1724486303IN
0x46b38522...397028d5B
0 ETH0.000058790.88159696
Claim205971122024-08-24 7:57:234 days ago1724486243IN
0x46b38522...397028d5B
0 ETH0.00005860.83210468
Claim205971082024-08-24 7:56:354 days ago1724486195IN
0x46b38522...397028d5B
0 ETH0.000078960.90217138
Claim205037382024-08-11 6:59:3517 days ago1723359575IN
0x46b38522...397028d5B
0 ETH0.000057940.86890995
Claim205037322024-08-11 6:58:2317 days ago1723359503IN
0x46b38522...397028d5B
0 ETH0.000065280.97887672
Claim205037292024-08-11 6:57:4717 days ago1723359467IN
0x46b38522...397028d5B
0 ETH0.000065630.98410992
Claim205037252024-08-11 6:56:5917 days ago1723359419IN
0x46b38522...397028d5B
0 ETH0.000065750.93355144
Claim205037222024-08-11 6:56:2317 days ago1723359383IN
0x46b38522...397028d5B
0 ETH0.000083390.95271261
Claim204047892024-07-28 11:36:3531 days ago1722166595IN
0x46b38522...397028d5B
0 ETH0.000081131.21655985
Claim204047862024-07-28 11:35:5931 days ago1722166559IN
0x46b38522...397028d5B
0 ETH0.000077951.16886093
Claim204047822024-07-28 11:35:1131 days ago1722166511IN
0x46b38522...397028d5B
0 ETH0.00007691.15314157
Claim204047792024-07-28 11:34:3531 days ago1722166475IN
0x46b38522...397028d5B
0 ETH0.000084661.20216094
Claim204047762024-07-28 11:33:5931 days ago1722166439IN
0x46b38522...397028d5B
0 ETH0.000109121.2466606
Claim202926542024-07-12 19:56:1147 days ago1720814171IN
0x46b38522...397028d5B
0 ETH0.000144682.16951276
Claim202926512024-07-12 19:55:3547 days ago1720814135IN
0x46b38522...397028d5B
0 ETH0.00014592.18777902
Claim202926462024-07-12 19:54:2347 days ago1720814063IN
0x46b38522...397028d5B
0 ETH0.000137242.0579052
Claim202926422024-07-12 19:53:3547 days ago1720814015IN
0x46b38522...397028d5B
0 ETH0.000149122.11731883
Claim202926392024-07-12 19:52:5947 days ago1720813979IN
0x46b38522...397028d5B
0 ETH0.000186142.12663713
Claim201988282024-06-29 17:27:3560 days ago1719682055IN
0x46b38522...397028d5B
0 ETH0.000141362.11968181
Claim201988242024-06-29 17:26:4760 days ago1719682007IN
0x46b38522...397028d5B
0 ETH0.000143882.15745267
Claim201988202024-06-29 17:25:5960 days ago1719681959IN
0x46b38522...397028d5B
0 ETH0.000142572.13787194
Claim201988172024-06-29 17:25:2360 days ago1719681923IN
0x46b38522...397028d5B
0 ETH0.000166982.37091439
Claim201988142024-06-29 17:24:4760 days ago1719681887IN
0x46b38522...397028d5B
0 ETH0.000215012.45645139
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Gauge controller

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
GNU AGPLv3 license

Contract Source Code (Vyper language format)

# @version 0.3.10
"""
@title Gauge controller
@author Yearn Finance
@license GNU AGPLv3
@notice
    Controls gauge emissions as defined in YIP-73.
    - Gauges can be whitelisted, making them eligible for emissions in future epochs
    - Accounts with a vote weight can distribute their weight over whitelisted gauges every epoch
    - At the end of the epoch the tokens are minted and distributed according to their received vote weights
    - Governance can reserve a percentage of emissions to specific gauges, prior to any votes
    - These reserved emissions are taken out of the pool of votable emissions
    - Votes can be blank. Emissions due to blank votes are partially burned and partially
        reallocated to next epoch
"""

from vyper.interfaces import ERC20

interface Minter:
    def mint(_epoch: uint256) -> uint256: nonpayable

interface Burner:
    def burn(_epoch: uint256, _amount: uint256): nonpayable

interface Measure:
    def total_vote_weight() -> uint256: view
    def vote_weight(_account: address) -> uint256: view

genesis: public(immutable(uint256))
token: public(immutable(ERC20))
management: public(address)
pending_management: public(address)
whitelister: public(address)
legacy_operator: public(address)
measure: public(Measure)
minter: public(Minter)
burner: public(Burner)

packed_emission: uint256 # (epoch, global cumulative emission, global current emission)
blank_emission: public(uint256)
packed_epoch_emission: HashMap[uint256, uint256] # epoch => (_, emission, reserved)
packed_gauge_emission: HashMap[address, uint256] # gauge => (epoch, cumulative emission, current emission)
gauge_claimed: public(HashMap[address, uint256]) # gauge => claimed

blank_burn_points: public(uint256)
reserved_points: public(uint256)
packed_gauge_reserved: HashMap[address, uint256] # gauge => (_, points, last global cumulative emission)
gauge_whitelisted: public(HashMap[address, bool]) # gauge => whitelisted?
legacy_gauge: public(HashMap[address, bool]) # gauge => legacy?

votes: public(HashMap[uint256, uint256]) # epoch => total votes
votes_user: public(HashMap[address, HashMap[uint256, uint256]]) # user => epoch => votes
gauge_votes: public(HashMap[uint256, HashMap[address, uint256]]) # epoch => gauge => votes
gauge_votes_user: public(HashMap[address, HashMap[uint256, HashMap[address, uint256]]]) # user => epoch => gauge => votes

event NewEpoch:
    epoch: uint256
    emission: uint256
    reserved: uint256
    burned: uint256
    blank: uint256

event Claim:
    gauge: indexed(address)
    amount: uint256

event Vote:
    epoch: uint256
    account: indexed(address)
    gauge: indexed(address)
    votes: uint256

event Whitelist:
    gauge: indexed(address)
    whitelisted: bool

event SetReservedPoints:
    gauge: indexed(address)
    points: uint256

event SetBlankBurnPoints:
    points: uint256

event SetLegacyGauge:
    gauge: indexed(address)
    legacy: bool

event SetWhitelister:
    whitelister: address

event SetLegacyOperator:
    operator: address

event SetMeasure:
    measure: address

event SetMinter:
    minter: address

event SetBurner:
    burner: address

event PendingManagement:
    management: indexed(address)

event SetManagement:
    management: indexed(address)

WEEK_LENGTH: constant(uint256) = 7 * 24 * 60 * 60
EPOCH_LENGTH: constant(uint256) = 2 * WEEK_LENGTH
POINTS_SCALE: constant(uint256) = 10_000

MASK: constant(uint256) = 2**112 - 1
EPOCH_MASK: constant(uint256) = 2**32 - 1

@external
def __init__(_genesis: uint256, _token: address, _measure: address, _minter: address, _burner: address):
    """
    @notice Constructor
    @param _genesis Genesis timestamp
    @param _token Reward token address
    @param _measure Vote weight measure
    @param _minter Reward token minter
    @param _burner Reward token burner
    @dev Genesis should be picked at least one full epoch in the past
    """
    genesis = _genesis
    token = ERC20(_token)
    self.management = msg.sender
    self.whitelister = msg.sender
    self.legacy_operator = msg.sender
    self.measure = Measure(_measure)
    self.minter = Minter(_minter)
    self.burner = Burner(_burner)

    epoch: uint256 = self._epoch()
    self.packed_emission = self._pack(epoch - 1, 0, 0)

@external
@view
def epoch() -> uint256:
    """
    @notice Get the current epoch
    @return Current epoch
    """
    return self._epoch()

@internal
@view
def _epoch() -> uint256:
    return (block.timestamp - genesis) / EPOCH_LENGTH

@external
@view
def vote_open() -> bool:
    """
    @notice Check whether the vote is currently open
    @return True: vote is open, False: vote is closed
    """
    return self._vote_open()

@internal
@view
def _vote_open() -> bool:
    return (block.timestamp - genesis) % EPOCH_LENGTH >= WEEK_LENGTH

@external
@view
def votes_available(_account: address) -> uint256:
    """
    @notice Get amount of votes still available
    @param _account Account to check for
    @return Amount of votes still available
    """
    total: uint256 = self.measure.vote_weight(_account)
    epoch: uint256 = self._epoch()
    return total - self.votes_user[_account][epoch]

@external
@view
def emission() -> (uint256, uint256, uint256):
    """
    @notice Get overall emission information
    @return Tuple with:
        - Last finalized epoch. At most one behind the current epoch
        - Cumulative emission for all gauges until the last finalized epoch
        - Emission for all gauges in the last finalized epoch
    """
    return self._unpack(self.packed_emission)

@external
@view
def epoch_emission(_epoch: uint256) -> (uint256, uint256):
    """
    @notice Get emission information for a specific epoch
    @param _epoch Epoch
    @return Tuple with:
        - Emission for all gauges in the epoch
        - Reserved emission in the epoch
    @dev The total emission is inclusive of the reserved emission
    """
    return self._unpack_two(self.packed_epoch_emission[_epoch])

@external
@view
def gauge_emission(_gauge: address) -> (uint256, uint256, uint256):
    """
    @notice Get emission information for a specific gauge
    @param _gauge Gauge address
    @return Tuple with:
        - Last updated epoch. At most equal to the last finalized epoch
        - Cumulative emission for this gauge until the last updated epoch
        - Emission for this gauge in the last finalized epoch
    """
    return self._unpack(self.packed_gauge_emission[_gauge])

@external
@view
def gauge_reserved_points(_gauge: address) -> uint256:
    """
    @notice Get reserved points for a gauge
    @param _gauge Gauge address
    @return Reserved points (bps)
    @dev Gauges with reserved emissions receive a fixed percentage
        of all the emissions, which is subtracted from the available
        emissions for votes
    """
    return self._unpack_two(self.packed_gauge_reserved[_gauge])[0]

@external
@view
def gauge_reserved_last_cumulative(_gauge: address) -> uint256:
    """
    @notice Get gauge's last known overall cumulative emissions
    @param _gauge Gauge address
    @return Last known overall cumulative emission
    @dev Used to fast-forward gauge emissions without having to iterate
    """
    return self._unpack_two(self.packed_gauge_reserved[_gauge])[1]

@external
def vote(_gauges: DynArray[address, 32], _votes: DynArray[uint256, 32]):
    """
    @notice Vote for specific gauges
    @param _gauges Gauge addresses
    @param _votes Votes as a fraction of users total vote weight (bps)
    @dev Can be called multiple times
    @dev Votes are additive, they cant be undone
    @dev Votes can be blank by using the zero address
    """
    assert len(_gauges) == len(_votes)
    assert self._vote_open()

    assert self._update_emission()
    available: uint256 = self.measure.vote_weight(msg.sender)
    epoch: uint256 = self._epoch()

    used: uint256 = 0
    for i in range(32):
        if i == len(_gauges):
            break
        gauge: address = _gauges[i]
        votes: uint256 = available * _votes[i] / POINTS_SCALE

        if gauge != empty(address):
            assert self.gauge_whitelisted[gauge]
            self._update_gauge_emission(gauge)

        self.gauge_votes[epoch][gauge] += votes
        self.gauge_votes_user[msg.sender][epoch][gauge] += votes
        used += votes
        log Vote(epoch, msg.sender, gauge, votes)
    assert used > 0
    self.votes[epoch] += used

    used += self.votes_user[msg.sender][epoch]
    assert used <= available
    self.votes_user[msg.sender][epoch] = used

@external
def claim(_gauge: address = empty(address), _recipient: address = empty(address)) -> (uint256, uint256, uint256):
    """
    @notice Claim rewards for distribution by a gauge
    @param _gauge Gauge address to claim for
    @param _recipient Recipient of legacy gauge rewards
    @dev Certain gauges are considered legacy, for which claiming is permissioned
    """
    gauge: address = _gauge
    if _gauge == empty(address):
        gauge = msg.sender
    recipient: address = gauge

    if self.legacy_gauge[gauge]:
        assert msg.sender == self.legacy_operator
        assert _recipient != empty(address)
        recipient = _recipient

    assert self._update_emission()
    gauge_epoch: uint256 = 0
    cumulative: uint256 = 0
    current: uint256 = 0
    gauge_epoch, cumulative, current = self._update_gauge_emission(gauge)
    claimed: uint256 = self.gauge_claimed[gauge]
    claim: uint256 = cumulative - claimed
    if claim > 0:
        self.gauge_claimed[gauge] = cumulative
        assert token.transfer(recipient, claim, default_return_value=True)
        log Claim(_gauge, claim)

    epoch_start: uint256 = genesis + self._epoch() * EPOCH_LENGTH
    return cumulative, current, epoch_start

@external
def update_emission():
    """
    @notice Update overall emissions
    @dev Should be called by anyone to catch-up overall emissions if no 
        calls to this contract have been made for more than a full epoch
    """
    for _ in range(32):
        if self._update_emission():
            return

@external
def whitelist(_gauge: address, _whitelisted: bool):
    """
    @notice Add or remove a gauge to the whitelist
    @param _gauge Gauge address
    @param _whitelisted True: add to whitelist, False: remove from whitelist
    @dev Only callable by the whitelister
    """
    assert msg.sender == self.whitelister
    assert _gauge != empty(address)
    assert self._update_emission()

    if _whitelisted == self.gauge_whitelisted[_gauge]:
        return

    if not _whitelisted:
        self._update_gauge_emission(_gauge)
        points: uint256 = 0
        last: uint256 = 0
        points, last = self._unpack_two(self.packed_gauge_reserved[_gauge])
        if points > 0:
            self.reserved_points -= points
            self.packed_gauge_reserved[_gauge] = 0
    self.gauge_whitelisted[_gauge] = _whitelisted
    log Whitelist(_gauge, _whitelisted)

@external
def set_reserved_points(_gauge: address, _points: uint256):
    """
    @notice Set the fraction of reserved emissions for a gauge
    @param _gauge Gauge address
    @param _points Reserved emission fraction (bps)
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert self.gauge_whitelisted[_gauge]
    assert self._update_emission()

    self._update_gauge_emission(_gauge)
    prev_points: uint256 = 0
    last: uint256 = 0
    prev_points, last = self._unpack_two(self.packed_gauge_reserved[_gauge])
    if prev_points == 0:
        # to save gas the cumulative amount is never updated for gauges without 
        # reserved points, so we have to do it here
        last = self._unpack_two(self.packed_emission)[0]

    total_points: uint256 = self.reserved_points - prev_points + _points
    assert total_points <= POINTS_SCALE
    self.reserved_points = total_points
    self.packed_gauge_reserved[_gauge] = self._pack(0, _points, last)
    log SetReservedPoints(_gauge, _points)

@external
def set_blank_burn_points(_points: uint256):
    """
    @notice Set fraction of blank emissions to be burned
    @param _points Blank burn fraction (bps)
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert _points <= POINTS_SCALE
    assert self._update_emission()
    self.blank_burn_points = _points
    log SetBlankBurnPoints(_points)

@external
def set_legacy_gauge(_gauge: address, _legacy: bool):
    """
    @notice Set legacy status for a gauge
    @param _gauge Gauge address
    @param _legacy True: legacy, False: no legacy
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert self.gauge_whitelisted[_gauge]
    self.legacy_gauge[_gauge] = _legacy
    log SetLegacyGauge(_gauge, _legacy)

@external
def set_whitelister(_whitelister: address):
    """
    @notice Set new whitelister address
    @param _whitelister New whitelister address
    @dev Only callable by management
    """
    assert msg.sender == self.management
    self.whitelister = _whitelister
    log SetWhitelister(_whitelister)

@external
def set_legacy_operator(_operator: address):
    """
    @notice Set new legacy operator
    @param _operator New operator address
    @dev Only callable by management
    """
    assert msg.sender == self.management
    self.legacy_operator = _operator
    log SetLegacyOperator(_operator)

@external
def set_measure(_measure: address):
    """
    @notice Set vote weight measure
    @param _measure Measure address
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert _measure != empty(address)
    assert not self._vote_open()
    self.measure = Measure(_measure)
    log SetMeasure(_measure)

@external
def set_minter(_minter: address):
    """
    @notice Set new reward minter
    @param _minter New minter address
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert _minter != empty(address)
    assert self._update_emission()
    self.minter = Minter(_minter)
    log SetMinter(_minter)

@external
def set_burner(_burner: address):
    """
    @notice Set new reward burner
    @param _burner New burner address
    @dev Only callable by management
    """
    assert msg.sender == self.management
    assert _burner != empty(address)
    assert self._update_emission()
    self.burner = Burner(_burner)
    log SetBurner(_burner)

@external
def set_management(_management: address):
    """
    @notice 
        Set the pending management address.
        Needs to be accepted by that account separately to transfer management over
    @param _management New pending management address
    """
    assert msg.sender == self.management
    self.pending_management = _management
    log PendingManagement(_management)

@external
def accept_management():
    """
    @notice 
        Accept management role.
        Can only be called by account previously marked as pending management by current management
    """
    assert msg.sender == self.pending_management
    self.pending_management = empty(address)
    self.management = msg.sender
    log SetManagement(msg.sender)

@internal
def _update_emission() -> bool:
    """
    @notice 
        Update global emission. Must be called before:
            - Any gauge is updated
            - Any gauge receives votes
            - Any gauge reserved points is changed
            - Blank vote burn points is changed
    """

    last_epoch: uint256 = self._epoch() - 1
    global_epoch: uint256 = 0
    global_cumulative: uint256 = 0
    global_current: uint256 = 0
    global_epoch, global_cumulative, global_current = self._unpack(self.packed_emission)

    if global_epoch == last_epoch:
        return True
    global_epoch += 1

    minted: uint256 = self.minter.mint(global_epoch) + self.blank_emission
    reserved: uint256 = minted * self.reserved_points / POINTS_SCALE

    blank_votes: uint256 = self.gauge_votes[global_epoch][empty(address)]
    total_votes: uint256 = self.votes[global_epoch]
    blank_emission: uint256 = 0
    if blank_votes > 0:
        blank_emission = (minted - reserved) * blank_votes / total_votes
    elif total_votes == 0:
        # no votes: all non-reserved emissions are considered blank
        blank_emission = minted - reserved

    burn_amount: uint256 = 0
    if blank_emission > 0:
        # blank emission is partially burned and partially added to next epoch
        burn_amount = blank_emission * self.blank_burn_points / POINTS_SCALE
        if burn_amount > 0:
            blank_emission -= burn_amount
            assert token.approve(self.burner.address, burn_amount, default_return_value=True)
            self.burner.burn(global_epoch, burn_amount)

    global_cumulative += minted
    global_current = minted

    self.packed_emission = self._pack(global_epoch, global_cumulative, global_current)
    self.blank_emission = blank_emission
    self.packed_epoch_emission[global_epoch] = self._pack(0, minted, reserved)
    log NewEpoch(global_epoch, minted, reserved, burn_amount, blank_emission)
    return global_epoch == last_epoch
    
@internal
def _update_gauge_emission(_gauge: address) -> (uint256, uint256, uint256):
    """
    @notice 
        Update gauge emission. Must be called before:
            - Gauge receives votes
            - Gauge claim
            - Gauge reserved points changes
        Assumes global emission is up to date
    """

    last_epoch: uint256 = self._epoch() - 1

    gauge_epoch: uint256 = 0
    cumulative: uint256 = 0
    current: uint256 = 0
    gauge_epoch, cumulative, current = self._unpack(self.packed_gauge_emission[_gauge])

    if gauge_epoch == last_epoch:
        return gauge_epoch, cumulative, current

    # emission from last updated epoch
    last_updated_epoch: uint256 = gauge_epoch + 1
    current = self.gauge_votes[last_updated_epoch][_gauge]
    if current > 0:
        epoch_emission: uint256 = 0
        epoch_reserved: uint256 = 0
        epoch_emission, epoch_reserved = self._unpack_two(self.packed_epoch_emission[last_updated_epoch])
        current = (epoch_emission - epoch_reserved) * current / self.votes[last_updated_epoch]
        cumulative += current
        if last_updated_epoch != last_epoch:
            # last update was more than 1 epoch ago. the full amount is immediately available.
            # we know the other missing epochs did not have any votes for this gauge because
            # the gauge emissions would have been updated
            current = 0

    # fast-forward reserved emission
    points: uint256 = 0
    last: uint256 = 0
    points, last = self._unpack_two(self.packed_gauge_reserved[_gauge])
    if points > 0:
        # we know that reserved points for this gauge has remained unchanged since the last 
        # gauge update, so we can safely get reserved rewards from potentially multiple epochs
        # by applying the points to the change in global cumulative emission
        global_cumulative: uint256 = 0
        global_current: uint256 = 0
        global_cumulative, global_current = self._unpack_two(self.packed_emission)
        
        current += global_current * points / POINTS_SCALE
        cumulative += (global_cumulative - last) * points / POINTS_SCALE
        self.packed_gauge_reserved[_gauge] = self._pack(0, points, global_cumulative)

    self.packed_gauge_emission[_gauge] = self._pack(last_epoch, cumulative, current)
    return last_epoch, cumulative, current

@internal
@pure
def _pack(_epoch: uint256, _a: uint256, _b: uint256) -> uint256:
    """
    @notice Pack a 32 bit number with two 112 bit numbers
    """
    assert _epoch <= EPOCH_MASK and _a <= MASK and _b <= MASK
    return (_epoch << 224) | (_a << 112) | _b

@internal
@pure
def _unpack(_packed: uint256) -> (uint256, uint256, uint256):
    """
    @notice Unpack a 32 bit number followed by two 112 bit numbers
    """
    return _packed >> 224, (_packed >> 112) & MASK, _packed & MASK

@internal
@pure
def _unpack_two(_packed: uint256) -> (uint256, uint256):
    """
    @notice Unpack last two 112 bit numbers
    """
    return (_packed >> 112) & MASK, _packed & MASK

Contract Security Audit

Contract ABI

[{"name":"NewEpoch","inputs":[{"name":"epoch","type":"uint256","indexed":false},{"name":"emission","type":"uint256","indexed":false},{"name":"reserved","type":"uint256","indexed":false},{"name":"burned","type":"uint256","indexed":false},{"name":"blank","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claim","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Vote","inputs":[{"name":"epoch","type":"uint256","indexed":false},{"name":"account","type":"address","indexed":true},{"name":"gauge","type":"address","indexed":true},{"name":"votes","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Whitelist","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"whitelisted","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetReservedPoints","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"points","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetBlankBurnPoints","inputs":[{"name":"points","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetLegacyGauge","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"legacy","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetWhitelister","inputs":[{"name":"whitelister","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetLegacyOperator","inputs":[{"name":"operator","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetMeasure","inputs":[{"name":"measure","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetMinter","inputs":[{"name":"minter","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetBurner","inputs":[{"name":"burner","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"PendingManagement","inputs":[{"name":"management","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetManagement","inputs":[{"name":"management","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_genesis","type":"uint256"},{"name":"_token","type":"address"},{"name":"_measure","type":"address"},{"name":"_minter","type":"address"},{"name":"_burner","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"epoch","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"vote_open","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"votes_available","inputs":[{"name":"_account","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"emission","inputs":[],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"epoch_emission","inputs":[{"name":"_epoch","type":"uint256"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_emission","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_reserved_points","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_reserved_last_cumulative","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"vote","inputs":[{"name":"_gauges","type":"address[]"},{"name":"_votes","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"claim","inputs":[{"name":"_gauge","type":"address"},{"name":"_recipient","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"update_emission","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"whitelist","inputs":[{"name":"_gauge","type":"address"},{"name":"_whitelisted","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_reserved_points","inputs":[{"name":"_gauge","type":"address"},{"name":"_points","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_blank_burn_points","inputs":[{"name":"_points","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_legacy_gauge","inputs":[{"name":"_gauge","type":"address"},{"name":"_legacy","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_whitelister","inputs":[{"name":"_whitelister","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_legacy_operator","inputs":[{"name":"_operator","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_measure","inputs":[{"name":"_measure","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_minter","inputs":[{"name":"_minter","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_burner","inputs":[{"name":"_burner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_management","inputs":[{"name":"_management","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_management","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"genesis","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"management","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pending_management","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"whitelister","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"legacy_operator","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"measure","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"minter","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"burner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"blank_emission","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_claimed","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"blank_burn_points","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"reserved_points","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_whitelisted","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"legacy_gauge","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"votes","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"votes_user","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_votes","inputs":[{"name":"arg0","type":"uint256"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_votes_user","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"},{"name":"arg2","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]

611a0f51503461015f576020611b885f395f518060a01c61015f5760a0526020611ba85f395f518060a01c61015f5760c0526020611bc85f395f518060a01c61015f5760e0526020611be85f395f518060a01c61015f57610100526020611b685f395f516119ef5260a051611a0f52335f55336002553360035560c05160045560e051600555610100516006556100976101406100dd565b6101405161012052610120516001810381811161015f5790506040526040366060376100c46101406100fd565b610140516007556119ef61016361000039611a2f610000f35b426119ef5180820382811161015f57905090506212750081049050815250565b63ffffffff6040511115610111575f610144565b6dffffffffffffffffffffffffffff606051111561012f575f610144565b6dffffffffffffffffffffffffffff60805111155b1561015f5760805160605160701b60405160e01b1717815250565b5f80fd5f3560e01c60026025820660011b6119a501601e395f51565b63a7f0b3de811861003657346119a15760206119ef60403960206040f35b6327810b6e811861005257346119a15760065460405260206040f35b632941f808811861121f57346119a1575f6020905b80610280526100776102a0611345565b6102a05115610087575050610094565b6001018181186100675750505b0061121f565b63fc0c546a811861121f57346119a1576020611a0f60403960206040f361121f565b6388a8d60281186100d757346119a1575f5460405260206040f35b63efa9a1ad811861121f57346119a15760045460405260206040f361121f565b63770817ec811861121f57346119a15760015460405260206040f361121f565b6322758a4a811861013357346119a15760025460405260206040f35b63786370ba811861121f57346119a157602061014f60406112aa565b6040f361121f565b634a3cfeff811861017357346119a15760035460405260206040f35b637152d5f781186101bd576044361034176119a1576024358060a01c6119a15760405260136004356020525f5260405f20806040516020525f5260405f2090505460605260206060f35b6321c0b342811861121f576044361034176119a1576004358060a01c6119a157610280526024358060a01c6119a1576102a0525b610280516102c0526102805161020757336102c0525b6102c0516102e05260106102c0516020525f5260405f20541561023f5760035433186119a1576102a051156119a1576102a0516102e0525b61024a610300611345565b61030051156119a157606036610300376102c05160a05261026c6103606116be565b61036080516103005260208101516103205260408101516103405250600b6102c0516020525f5260405f20546103605261032051610360518082038281116119a1579050905061038052610380511561037e5761032051600b6102c0516020525f5260405f20556020611a0f5f395f5163a9059cbb6103a0526102e0516103c052610380516103e05260206103a060446103bc5f855af161030f573d5f5f3e3d5ffd5b3d61032657803b156119a15760016104005261033f565b60203d106119a1576103a0518060011c6119a157610400525b610400905051156119a157610280517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4610380516103a05260206103a0a25b60206119ef5f395f516103926103c0611223565b6103c05162127500810281621275008204186119a15790508082018281106119a157905090506103a052610320516103c052610340516103e0526103a0516104005260606103c0f361121f565b6307546172811861121f57346119a15760055460405260206040f361121f565b63a834caa4811861041b57346119a15760085460405260206040f35b631dea4f418118610456576024361034176119a1576004358060a01c6119a157604052600b6040516020525f5260405f205460605260206060f35b63866b8d9f811861121f576024361034176119a157604060096004356020525f5260405f20546040526104896060611312565b6060f361121f565b63123ac9ae81186104ad57346119a157600c5460405260206040f35b63014edde0811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516002557f0ca44eaf19ec8e07aaa42c7f82892b8ff7de9faf7b420a750585730a0b0b387860405160605260206060a10061121f565b6352b89898811861121f57346119a157600d5460405260206040f361121f565b6379d26215811861056b576024361034176119a1576004358060a01c6119a157604052600f6040516020525f5260405f205460605260206060f35b63759be10c811861121f57346119a15760015433186119a1575f600155335f55337fafe23f9e1f603b288748a507d5a993957e9f14313a5889d5a070851299939d595f6040a20061121f565b63ed73855981186105f2576024361034176119a1576004358060a01c6119a15760405260106040516020525f5260405f205460605260206060f35b636f816a20811861121f576084361034176119a15760043560040160208135116119a15780355f81602081116119a157801561065057905b8060051b6020850101358060a01c6119a1578160051b6102a0015260010181811861062a575b50508061028052505060243560040160208135116119a157803560208160051b0180836106a0375050506106a05161028051186119a157610692610ac06112aa565b610ac051156119a1576106a6610ac0611345565b610ac051156119a15760045463f49ec310610ae05233610b00526020610ae06024610afc845afa6106d9573d5f5f3e3d5ffd5b60203d106119a157610ae0905051610ac0526106f6610b00611223565b610b0051610ae0525f610b00525f6020905b80610b205261028051610b20511861071f57610883565b610b2051610280518110156119a15760051b6102a00151610b4052610ac051610b20516106a0518110156119a15760051b6106c001518082028115838383041417156119a1579050905061271081049050610b6052610b4051156107a957600f610b40516020525f5260405f2054156119a157610b405160a0526107a4610b806116be565b610b80505b6013610ae0516020525f5260405f2080610b40516020525f5260405f2090508054610b60518082018281106119a157905090508155506014336020525f5260405f2080610ae0516020525f5260405f20905080610b40516020525f5260405f2090508054610b60518082018281106119a15790509050815550610b0051610b60518082018281106119a15790509050610b0052610b4051337fd3e566fa4d4d8b17c007ba24b9dbb382c9185a03c9ef59477ee3c6132ca0a306610ae051610b8052610b6051610ba0526040610b80a3600101818118610708575b5050610b0051156119a1576011610ae0516020525f5260405f208054610b00518082018281106119a15790509050815550610b00516012336020525f5260405f2080610ae0516020525f5260405f209050548082018281106119a15790509050610b0052610ac051610b0051116119a157610b00516012336020525f5260405f2080610ae0516020525f5260405f209050550061121f565b635df81330811861121f576024361034176119a15760116004356020525f5260405f205460405260206040f361121f565b63b3b17fa5811861121f576044361034176119a1576004358060a01c6119a15760405260126040516020525f5260405f20806024356020525f5260405f2090505460605260206060f361121f565b63b5a4cfdc8118610a01576064361034176119a1576004358060a01c6119a1576040526044358060a01c6119a15760605260146040516020525f5260405f20806024356020525f5260405f209050806060516020525f5260405f2090505460805260206080f35b63900cf0cf811861121f57346119a1576020610a1d6040611223565b6040f361121f565b63fab5a02c8118610ac8576024361034176119a1576004358060a01c6119a15760405260045463f49ec31060805260405160a052602060806024609c845afa610a70573d5f5f3e3d5ffd5b60203d106119a1576080905051606052610a8a60a0611223565b60a05160805260605160126040516020525f5260405f20806080516020525f5260405f209050548082038281116119a1579050905060a052602060a0f35b631652e9fc811861121f576024361034176119a1576004358060a01c6119a157610280525f5433186119a15761028051156119a157610b086102a0611345565b6102a051156119a157610280516005557fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c610280516102a05260206102a0a10061121f565b63827c049e811861121f57346119a1576060600754604052610b6f60606112d4565b6060f361121f565b63b3a37c2c811861121f576024361034176119a1576004358060a01c6119a1576060526060600a6060516020525f5260405f2054604052610bb860806112d4565b6080f361121f565b6332571387811861121f576024361034176119a1576004358060a01c6119a1576060526020600e6060516020525f5260405f2054604052610c016080611312565b6080f361121f565b634314a225811861121f576024361034176119a1576004358060a01c6119a1576060526020600e6060516020525f5260405f2054604052610c4a6080611312565b6080602081019050f361121f565b634e71d92d8118610c7457346119a157604036610280376101f1565b63f0a89f32811861121f576044361034176119a1576004358060a01c6119a1576040526024358060011c6119a1576060525f5433186119a157600f6040516020525f5260405f2054156119a15760605160106040516020525f5260405f20556040517f47d1b7289f3c0e512b700ae0edb12c25eef30d145270caa1a79f2f36eab9cb0c60605160805260206080a20061121f565b631e83409a811861121f576024361034176119a1576004358060a01c6119a157610280525f6102a0526101f15661121f565b63f59c37088118610e84576044361034176119a1576004358060a01c6119a157610280526024358060011c6119a1576102a05260025433186119a15761028051156119a157610d8a6102c0611345565b6102c051156119a157600f610280516020525f5260405f20546102a05118610db157610e82565b6102a051610e3a576102805160a052610dcb6102c06116be565b6102c0506040366102c037600e610280516020525f5260405f2054604052610df4610300611312565b61030080516102c05260208101516102e052506102c05115610e3a57600d546102c0518082038281116119a15790509050600d555f600e610280516020525f5260405f20555b6102a051600f610280516020525f5260405f2055610280517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d6102a0516102c05260206102c0a25b005b633fc1efc5811861121f576044361034176119a1576004358060a01c6119a157610280525f5433186119a157600f610280516020525f5260405f2054156119a157610ed06102a0611345565b6102a051156119a1576102805160a052610eeb6102a06116be565b6102a0506040366102a037600e610280516020525f5260405f2054604052610f146102e0611312565b6102e080516102a05260208101516102c052506102a051610f4957600754604052610f406102e0611312565b6102e0516102c0525b600d546102a0518082038281116119a157905090506024358082018281106119a157905090506102e0526127106102e051116119a1576102e051600d555f6040526024356060526102c051608052610fa2610300611248565b61030051600e610280516020525f5260405f2055610280517f1740a8c019d07e73482183a637eac534c2702c6f202bc983f1ab4ec8561a4408602435610300526020610300a20061121f565b63ab31eca1811861121f576024361034176119a1575f5433186119a157612710600435116119a157611021610280611345565b61028051156119a157600435600c557fb2fda0078e02acae6669719034c78985ff77c5c6d87d357900ec18dcddb73067600435610280526020610280a10061121f565b63d10a4d97811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516003557f5b840b7adf82f47c86f6fac63972c7058423bcbdfcdfca8349a556b67c33986960405160605260206060a10061121f565b63c764c59f811861113f576024361034176119a1576004358060a01c6119a1576040525f5433186119a157604051156119a15761110460606112aa565b6060516119a1576040516004557f602e8126584dd3551a170697ca62a8225945d42068a7ac49f200b7a60110aca960405160605260206060a1005b63fd066ecc811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516001556040517fe7b5cc087e6e47e33e86bdfe4720b7e849891938b18ff6e0c3f92299de79e60c5f6060a20061121f565b63e0774862811861121f576024361034176119a1576004358060a01c6119a157610280525f5433186119a15761028051156119a1576111de6102a0611345565b6102a051156119a157610280516006557f5d02513563a6890385b0d6684a867cbf8032b19adbd10bca1f78f430db041e37610280516102a05260206102a0a1005b5f5ffd5b4260206119ef5f395f518082038281116119a157905090506212750081049050815250565b63ffffffff604051111561125c575f61128f565b6dffffffffffffffffffffffffffff606051111561127a575f61128f565b6dffffffffffffffffffffffffffff60805111155b156119a15760805160605160701b60405160e01b1717815250565b62093a7f4260206119ef5f395f518082038281116119a15790509050621275008106905011815250565b60405160e01c81526dffffffffffffffffffffffffffff60405160701c1660208201526dffffffffffffffffffffffffffff60405116604082015250565b6dffffffffffffffffffffffffffff60405160701c1681526dffffffffffffffffffffffffffff60405116602082015250565b61134f60c0611223565b60c051600181038181116119a157905060a05260603660c0376007546040526113796101206112d4565b610120805160c052602081015160e0526040810151610100525060a05160c051186113a85760018152506116bc565b60c051600181018181106119a157905060c05260055463a0712d686101405260c051610160526020610140602461015c5f855af16113e8573d5f5f3e3d5ffd5b60203d106119a1576101409050516008548082018281106119a157905090506101205261012051600d548082028115838383041417156119a157905090506127108104905061014052601360c0516020525f5260405f20805f6020525f5260405f2090505461016052601160c0516020525f5260405f2054610180525f6101a05261016051156114ba5761012051610140518082038281116119a15790509050610160518082028115838383041417156119a157905090506101805180156119a157808204905090506101a0526114dd565b610180516114dd5761012051610140518082038281116119a157905090506101a0525b5f6101c0526101a051156115e7576101a051600c548082028115838383041417156119a15790509050612710810490506101c0526101c051156115e7576101a0516101c0518082038281116119a157905090506101a0526020611a0f5f395f5163095ea7b36101e052600654610200526101c0516102205260206101e060446101fc5f855af161156f573d5f5f3e3d5ffd5b3d61158657803b156119a15760016102405261159f565b60203d106119a1576101e0518060011c6119a157610240525b610240905051156119a15760065463b390c0ab6101e05260c051610200526101c05161022052803b156119a1575f6101e060446101fc5f855af16115e5573d5f5f3e3d5ffd5b505b60e051610120518082018281106119a1579050905060e052610120516101005260c05160405260e051606052610100516080526116256101e0611248565b6101e0516007556101a0516008555f60405261012051606052610140516080526116506101e0611248565b6101e051600960c0516020525f5260405f20557f94a78dd0a56cb5963bffd05b40ba5cf0aaf7c65c74005e7ca2c1dcb7f69ea44060c0516101e052610120516102005261014051610220526101c051610240526101a0516102605260a06101e0a160a05160c051148152505b565b6116c860e0611223565b60e051600181038181116119a157905060c05260603660e037600a60a0516020525f5260405f20546040526116fe6101406112d4565b610140805160e0526020810151610100526040810151610120525060c05160e051186117415760e05181526101005160208201526101205160408201525061199f565b60e051600181018181106119a1579050610140526013610140516020525f5260405f208060a0516020525f5260405f2090505461012052610120511561183457604036610160376009610140516020525f5260405f20546040526117a66101a0611312565b6101a08051610160526020810151610180525061016051610180518082038281116119a15790509050610120518082028115838383041417156119a157905090506011610140516020525f5260405f205480156119a157808204905090506101205261010051610120518082018281106119a157905090506101005260c0516101405114611834575f610120525b60403661016037600e60a0516020525f5260405f20546040526118586101a0611312565b6101a0805161016052602081015161018052506101605115611954576040366101a03760075460405261188c6101e0611312565b6101e080516101a05260208101516101c05250610120516101c051610160518082028115838383041417156119a15790509050612710810490508082018281106119a1579050905061012052610100516101a051610180518082038281116119a15790509050610160518082028115838383041417156119a15790509050612710810490508082018281106119a15790509050610100525f604052610160516060526101a0516080526119406101e0611248565b6101e051600e60a0516020525f5260405f20555b60c05160405261010051606052610120516080526119736101a0611248565b6101a051600a60a0516020525f5260405f205560c0518152610100516020820152610120516040820152505b565b5f80fd0018121f121f009a03ff121f0b770c58091b0b4d121f119e00bc0fee0491053010c70117121f121f03df121f094c00f705b7121f0510121f10640bc00a250c09121f01570d3a0d08099a841919ef81184a1840a16576797065728300030a001600000000000000000000000000000000000000000000000000000000650b878000000000000000000000000041252e8691e964f7de35156b68493bab6797a275000000000000000000000000992122bc6f7fed14edc4a564d57039452c63cc88000000000000000000000000c65ac814056fd097ca28850c8466ece7bb3a8bf5000000000000000000000000cac873e93cfe5c79325e73c22975b665c6177f40

Deployed Bytecode

0x5f3560e01c60026025820660011b6119a501601e395f51565b63a7f0b3de811861003657346119a15760206119ef60403960206040f35b6327810b6e811861005257346119a15760065460405260206040f35b632941f808811861121f57346119a1575f6020905b80610280526100776102a0611345565b6102a05115610087575050610094565b6001018181186100675750505b0061121f565b63fc0c546a811861121f57346119a1576020611a0f60403960206040f361121f565b6388a8d60281186100d757346119a1575f5460405260206040f35b63efa9a1ad811861121f57346119a15760045460405260206040f361121f565b63770817ec811861121f57346119a15760015460405260206040f361121f565b6322758a4a811861013357346119a15760025460405260206040f35b63786370ba811861121f57346119a157602061014f60406112aa565b6040f361121f565b634a3cfeff811861017357346119a15760035460405260206040f35b637152d5f781186101bd576044361034176119a1576024358060a01c6119a15760405260136004356020525f5260405f20806040516020525f5260405f2090505460605260206060f35b6321c0b342811861121f576044361034176119a1576004358060a01c6119a157610280526024358060a01c6119a1576102a0525b610280516102c0526102805161020757336102c0525b6102c0516102e05260106102c0516020525f5260405f20541561023f5760035433186119a1576102a051156119a1576102a0516102e0525b61024a610300611345565b61030051156119a157606036610300376102c05160a05261026c6103606116be565b61036080516103005260208101516103205260408101516103405250600b6102c0516020525f5260405f20546103605261032051610360518082038281116119a1579050905061038052610380511561037e5761032051600b6102c0516020525f5260405f20556020611a0f5f395f5163a9059cbb6103a0526102e0516103c052610380516103e05260206103a060446103bc5f855af161030f573d5f5f3e3d5ffd5b3d61032657803b156119a15760016104005261033f565b60203d106119a1576103a0518060011c6119a157610400525b610400905051156119a157610280517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4610380516103a05260206103a0a25b60206119ef5f395f516103926103c0611223565b6103c05162127500810281621275008204186119a15790508082018281106119a157905090506103a052610320516103c052610340516103e0526103a0516104005260606103c0f361121f565b6307546172811861121f57346119a15760055460405260206040f361121f565b63a834caa4811861041b57346119a15760085460405260206040f35b631dea4f418118610456576024361034176119a1576004358060a01c6119a157604052600b6040516020525f5260405f205460605260206060f35b63866b8d9f811861121f576024361034176119a157604060096004356020525f5260405f20546040526104896060611312565b6060f361121f565b63123ac9ae81186104ad57346119a157600c5460405260206040f35b63014edde0811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516002557f0ca44eaf19ec8e07aaa42c7f82892b8ff7de9faf7b420a750585730a0b0b387860405160605260206060a10061121f565b6352b89898811861121f57346119a157600d5460405260206040f361121f565b6379d26215811861056b576024361034176119a1576004358060a01c6119a157604052600f6040516020525f5260405f205460605260206060f35b63759be10c811861121f57346119a15760015433186119a1575f600155335f55337fafe23f9e1f603b288748a507d5a993957e9f14313a5889d5a070851299939d595f6040a20061121f565b63ed73855981186105f2576024361034176119a1576004358060a01c6119a15760405260106040516020525f5260405f205460605260206060f35b636f816a20811861121f576084361034176119a15760043560040160208135116119a15780355f81602081116119a157801561065057905b8060051b6020850101358060a01c6119a1578160051b6102a0015260010181811861062a575b50508061028052505060243560040160208135116119a157803560208160051b0180836106a0375050506106a05161028051186119a157610692610ac06112aa565b610ac051156119a1576106a6610ac0611345565b610ac051156119a15760045463f49ec310610ae05233610b00526020610ae06024610afc845afa6106d9573d5f5f3e3d5ffd5b60203d106119a157610ae0905051610ac0526106f6610b00611223565b610b0051610ae0525f610b00525f6020905b80610b205261028051610b20511861071f57610883565b610b2051610280518110156119a15760051b6102a00151610b4052610ac051610b20516106a0518110156119a15760051b6106c001518082028115838383041417156119a1579050905061271081049050610b6052610b4051156107a957600f610b40516020525f5260405f2054156119a157610b405160a0526107a4610b806116be565b610b80505b6013610ae0516020525f5260405f2080610b40516020525f5260405f2090508054610b60518082018281106119a157905090508155506014336020525f5260405f2080610ae0516020525f5260405f20905080610b40516020525f5260405f2090508054610b60518082018281106119a15790509050815550610b0051610b60518082018281106119a15790509050610b0052610b4051337fd3e566fa4d4d8b17c007ba24b9dbb382c9185a03c9ef59477ee3c6132ca0a306610ae051610b8052610b6051610ba0526040610b80a3600101818118610708575b5050610b0051156119a1576011610ae0516020525f5260405f208054610b00518082018281106119a15790509050815550610b00516012336020525f5260405f2080610ae0516020525f5260405f209050548082018281106119a15790509050610b0052610ac051610b0051116119a157610b00516012336020525f5260405f2080610ae0516020525f5260405f209050550061121f565b635df81330811861121f576024361034176119a15760116004356020525f5260405f205460405260206040f361121f565b63b3b17fa5811861121f576044361034176119a1576004358060a01c6119a15760405260126040516020525f5260405f20806024356020525f5260405f2090505460605260206060f361121f565b63b5a4cfdc8118610a01576064361034176119a1576004358060a01c6119a1576040526044358060a01c6119a15760605260146040516020525f5260405f20806024356020525f5260405f209050806060516020525f5260405f2090505460805260206080f35b63900cf0cf811861121f57346119a1576020610a1d6040611223565b6040f361121f565b63fab5a02c8118610ac8576024361034176119a1576004358060a01c6119a15760405260045463f49ec31060805260405160a052602060806024609c845afa610a70573d5f5f3e3d5ffd5b60203d106119a1576080905051606052610a8a60a0611223565b60a05160805260605160126040516020525f5260405f20806080516020525f5260405f209050548082038281116119a1579050905060a052602060a0f35b631652e9fc811861121f576024361034176119a1576004358060a01c6119a157610280525f5433186119a15761028051156119a157610b086102a0611345565b6102a051156119a157610280516005557fcec52196e972044edde8689a1b608e459c5946b7f3e5c8cd3d6d8e126d422e1c610280516102a05260206102a0a10061121f565b63827c049e811861121f57346119a1576060600754604052610b6f60606112d4565b6060f361121f565b63b3a37c2c811861121f576024361034176119a1576004358060a01c6119a1576060526060600a6060516020525f5260405f2054604052610bb860806112d4565b6080f361121f565b6332571387811861121f576024361034176119a1576004358060a01c6119a1576060526020600e6060516020525f5260405f2054604052610c016080611312565b6080f361121f565b634314a225811861121f576024361034176119a1576004358060a01c6119a1576060526020600e6060516020525f5260405f2054604052610c4a6080611312565b6080602081019050f361121f565b634e71d92d8118610c7457346119a157604036610280376101f1565b63f0a89f32811861121f576044361034176119a1576004358060a01c6119a1576040526024358060011c6119a1576060525f5433186119a157600f6040516020525f5260405f2054156119a15760605160106040516020525f5260405f20556040517f47d1b7289f3c0e512b700ae0edb12c25eef30d145270caa1a79f2f36eab9cb0c60605160805260206080a20061121f565b631e83409a811861121f576024361034176119a1576004358060a01c6119a157610280525f6102a0526101f15661121f565b63f59c37088118610e84576044361034176119a1576004358060a01c6119a157610280526024358060011c6119a1576102a05260025433186119a15761028051156119a157610d8a6102c0611345565b6102c051156119a157600f610280516020525f5260405f20546102a05118610db157610e82565b6102a051610e3a576102805160a052610dcb6102c06116be565b6102c0506040366102c037600e610280516020525f5260405f2054604052610df4610300611312565b61030080516102c05260208101516102e052506102c05115610e3a57600d546102c0518082038281116119a15790509050600d555f600e610280516020525f5260405f20555b6102a051600f610280516020525f5260405f2055610280517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d6102a0516102c05260206102c0a25b005b633fc1efc5811861121f576044361034176119a1576004358060a01c6119a157610280525f5433186119a157600f610280516020525f5260405f2054156119a157610ed06102a0611345565b6102a051156119a1576102805160a052610eeb6102a06116be565b6102a0506040366102a037600e610280516020525f5260405f2054604052610f146102e0611312565b6102e080516102a05260208101516102c052506102a051610f4957600754604052610f406102e0611312565b6102e0516102c0525b600d546102a0518082038281116119a157905090506024358082018281106119a157905090506102e0526127106102e051116119a1576102e051600d555f6040526024356060526102c051608052610fa2610300611248565b61030051600e610280516020525f5260405f2055610280517f1740a8c019d07e73482183a637eac534c2702c6f202bc983f1ab4ec8561a4408602435610300526020610300a20061121f565b63ab31eca1811861121f576024361034176119a1575f5433186119a157612710600435116119a157611021610280611345565b61028051156119a157600435600c557fb2fda0078e02acae6669719034c78985ff77c5c6d87d357900ec18dcddb73067600435610280526020610280a10061121f565b63d10a4d97811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516003557f5b840b7adf82f47c86f6fac63972c7058423bcbdfcdfca8349a556b67c33986960405160605260206060a10061121f565b63c764c59f811861113f576024361034176119a1576004358060a01c6119a1576040525f5433186119a157604051156119a15761110460606112aa565b6060516119a1576040516004557f602e8126584dd3551a170697ca62a8225945d42068a7ac49f200b7a60110aca960405160605260206060a1005b63fd066ecc811861121f576024361034176119a1576004358060a01c6119a1576040525f5433186119a1576040516001556040517fe7b5cc087e6e47e33e86bdfe4720b7e849891938b18ff6e0c3f92299de79e60c5f6060a20061121f565b63e0774862811861121f576024361034176119a1576004358060a01c6119a157610280525f5433186119a15761028051156119a1576111de6102a0611345565b6102a051156119a157610280516006557f5d02513563a6890385b0d6684a867cbf8032b19adbd10bca1f78f430db041e37610280516102a05260206102a0a1005b5f5ffd5b4260206119ef5f395f518082038281116119a157905090506212750081049050815250565b63ffffffff604051111561125c575f61128f565b6dffffffffffffffffffffffffffff606051111561127a575f61128f565b6dffffffffffffffffffffffffffff60805111155b156119a15760805160605160701b60405160e01b1717815250565b62093a7f4260206119ef5f395f518082038281116119a15790509050621275008106905011815250565b60405160e01c81526dffffffffffffffffffffffffffff60405160701c1660208201526dffffffffffffffffffffffffffff60405116604082015250565b6dffffffffffffffffffffffffffff60405160701c1681526dffffffffffffffffffffffffffff60405116602082015250565b61134f60c0611223565b60c051600181038181116119a157905060a05260603660c0376007546040526113796101206112d4565b610120805160c052602081015160e0526040810151610100525060a05160c051186113a85760018152506116bc565b60c051600181018181106119a157905060c05260055463a0712d686101405260c051610160526020610140602461015c5f855af16113e8573d5f5f3e3d5ffd5b60203d106119a1576101409050516008548082018281106119a157905090506101205261012051600d548082028115838383041417156119a157905090506127108104905061014052601360c0516020525f5260405f20805f6020525f5260405f2090505461016052601160c0516020525f5260405f2054610180525f6101a05261016051156114ba5761012051610140518082038281116119a15790509050610160518082028115838383041417156119a157905090506101805180156119a157808204905090506101a0526114dd565b610180516114dd5761012051610140518082038281116119a157905090506101a0525b5f6101c0526101a051156115e7576101a051600c548082028115838383041417156119a15790509050612710810490506101c0526101c051156115e7576101a0516101c0518082038281116119a157905090506101a0526020611a0f5f395f5163095ea7b36101e052600654610200526101c0516102205260206101e060446101fc5f855af161156f573d5f5f3e3d5ffd5b3d61158657803b156119a15760016102405261159f565b60203d106119a1576101e0518060011c6119a157610240525b610240905051156119a15760065463b390c0ab6101e05260c051610200526101c05161022052803b156119a1575f6101e060446101fc5f855af16115e5573d5f5f3e3d5ffd5b505b60e051610120518082018281106119a1579050905060e052610120516101005260c05160405260e051606052610100516080526116256101e0611248565b6101e0516007556101a0516008555f60405261012051606052610140516080526116506101e0611248565b6101e051600960c0516020525f5260405f20557f94a78dd0a56cb5963bffd05b40ba5cf0aaf7c65c74005e7ca2c1dcb7f69ea44060c0516101e052610120516102005261014051610220526101c051610240526101a0516102605260a06101e0a160a05160c051148152505b565b6116c860e0611223565b60e051600181038181116119a157905060c05260603660e037600a60a0516020525f5260405f20546040526116fe6101406112d4565b610140805160e0526020810151610100526040810151610120525060c05160e051186117415760e05181526101005160208201526101205160408201525061199f565b60e051600181018181106119a1579050610140526013610140516020525f5260405f208060a0516020525f5260405f2090505461012052610120511561183457604036610160376009610140516020525f5260405f20546040526117a66101a0611312565b6101a08051610160526020810151610180525061016051610180518082038281116119a15790509050610120518082028115838383041417156119a157905090506011610140516020525f5260405f205480156119a157808204905090506101205261010051610120518082018281106119a157905090506101005260c0516101405114611834575f610120525b60403661016037600e60a0516020525f5260405f20546040526118586101a0611312565b6101a0805161016052602081015161018052506101605115611954576040366101a03760075460405261188c6101e0611312565b6101e080516101a05260208101516101c05250610120516101c051610160518082028115838383041417156119a15790509050612710810490508082018281106119a1579050905061012052610100516101a051610180518082038281116119a15790509050610160518082028115838383041417156119a15790509050612710810490508082018281106119a15790509050610100525f604052610160516060526101a0516080526119406101e0611248565b6101e051600e60a0516020525f5260405f20555b60c05160405261010051606052610120516080526119736101a0611248565b6101a051600a60a0516020525f5260405f205560c0518152610100516020820152610120516040820152505b565b5f80fd0018121f121f009a03ff121f0b770c58091b0b4d121f119e00bc0fee0491053010c70117121f121f03df121f094c00f705b7121f0510121f10640bc00a250c09121f01570d3a0d08099a00000000000000000000000000000000000000000000000000000000650b878000000000000000000000000041252e8691e964f7de35156b68493bab6797a275

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000650b878000000000000000000000000041252e8691e964f7de35156b68493bab6797a275000000000000000000000000992122bc6f7fed14edc4a564d57039452c63cc88000000000000000000000000c65ac814056fd097ca28850c8466ece7bb3a8bf5000000000000000000000000cac873e93cfe5c79325e73c22975b665c6177f40

-----Decoded View---------------
Arg [0] : _genesis (uint256): 1695254400
Arg [1] : _token (address): 0x41252E8691e964f7DE35156B68493bAb6797a275
Arg [2] : _measure (address): 0x992122bC6f7fed14EDC4a564D57039452C63CC88
Arg [3] : _minter (address): 0xC65ac814056fd097ca28850c8466EcE7BB3A8bF5
Arg [4] : _burner (address): 0xCac873E93cFe5c79325e73c22975b665C6177f40

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000650b8780
Arg [1] : 00000000000000000000000041252e8691e964f7de35156b68493bab6797a275
Arg [2] : 000000000000000000000000992122bc6f7fed14edc4a564d57039452c63cc88
Arg [3] : 000000000000000000000000c65ac814056fd097ca28850c8466ece7bb3a8bf5
Arg [4] : 000000000000000000000000cac873e93cfe5c79325e73c22975b665c6177f40


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.