ETH Price: $3,090.36 (+1.21%)
Gas: 3 Gwei

Contract

0xA90996896660DEcC6E997655E065b23788857849
 
Transaction Hash
Method
Block
From
To
Value
0x08273d7a1e254e015d35e150cb9fa0c610088ca91209ec80a80b174af5adf2cb Claim_rewards(pending)2024-07-07 2:50:562 days ago1720320656IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH(Pending)(Pending)
Withdraw202430462024-07-05 21:38:593 days ago1720215539IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.001244272.24027448
Withdraw202123152024-07-01 14:38:357 days ago1719844715IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.004539049.10840819
Withdraw201802912024-06-27 3:19:1112 days ago1719458351IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.003492926.28887628
Withdraw201528092024-06-23 7:08:2316 days ago1719126503IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.001009222.20097776
Claim_rewards201452542024-06-22 5:47:3517 days ago1719035255IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.000396162
Withdraw201370092024-06-21 2:07:2318 days ago1718935643IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.00155322.92857185
Withdraw200459982024-06-08 8:44:3531 days ago1717836275IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.002787586.23570709
Withdraw200296482024-06-06 1:56:3533 days ago1717638995IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0076829913.83291268
Withdraw200231762024-06-05 4:16:1134 days ago1717560971IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.003393677
Withdraw200005472024-06-02 0:26:2337 days ago1717287983IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.002314124.1
Withdraw199069012024-05-19 22:15:4750 days ago1716156947IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.00167823.54584869
Withdraw198958512024-05-18 9:10:5952 days ago1716023459IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.001514943.04
Claim_rewards197812482024-05-02 8:28:5968 days ago1714638539IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.001501449.1624018
Withdraw197642092024-04-29 23:21:2370 days ago1714432883IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.003186916.39511599
Withdraw197251312024-04-24 12:06:4775 days ago1713960407IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0179188337.23688481
Withdraw197097052024-04-22 8:20:2378 days ago1713774023IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.003327437.25665435
Withdraw196296012024-04-11 3:07:2389 days ago1712804843IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0070698612.52242445
Withdraw196021772024-04-07 6:57:5993 days ago1712473079IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0051846911.30705366
Claim_rewards194185852024-03-12 11:05:23119 days ago1710241523IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0098568450.47494662
Withdraw194175462024-03-12 7:35:59119 days ago1710228959IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0254698555.5445744
Withdraw192751302024-02-21 9:25:47139 days ago1708507547IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.015409830.922527
Withdraw192549592024-02-18 13:23:23141 days ago1708262603IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0105119221.09404903
Withdraw192457352024-02-17 6:15:23143 days ago1708150523IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.0078931116.40174865
Withdraw192230112024-02-14 1:42:23146 days ago1707874943IN
Curve.fi: sUSDv2 Liquidity Gauge
0 ETH0.007818217.7113184
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
107406002020-08-27 5:06:111412 days ago1598504771
Curve.fi: sUSDv2 Liquidity Gauge
0.90923265 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x705350c4...d7a55410F
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.4

Optimization Enabled:
N/A

Other Settings:
MIT license
# @version 0.2.4
"""
@title Staking Liquidity Gauge
@author Curve Finance
@license MIT
@notice Simultaneously stakes using Synthetix (== YFI) rewards contract
"""

from vyper.interfaces import ERC20

interface CRV20:
    def future_epoch_time_write() -> uint256: nonpayable
    def rate() -> uint256: view

interface Controller:
    def period() -> int128: view
    def period_write() -> int128: nonpayable
    def period_timestamp(p: int128) -> uint256: view
    def gauge_relative_weight(addr: address, time: uint256) -> uint256: view
    def voting_escrow() -> address: view
    def checkpoint(): nonpayable
    def checkpoint_gauge(addr: address): nonpayable

interface Minter:
    def token() -> address: view
    def controller() -> address: view
    def minted(user: address, gauge: address) -> uint256: view

interface VotingEscrow:
    def user_point_epoch(addr: address) -> uint256: view
    def user_point_history__ts(addr: address, epoch: uint256) -> uint256: view

interface CurveRewards:
    def stake(amount: uint256): nonpayable
    def withdraw(amount: uint256): nonpayable
    def getReward(): nonpayable
    def earned(addr: address) -> uint256: view


event Deposit:
    provider: indexed(address)
    value: uint256

event Withdraw:
    provider: indexed(address)
    value: uint256

event UpdateLiquidityLimit:
    user: address
    original_balance: uint256
    original_supply: uint256
    working_balance: uint256
    working_supply: uint256


TOKENLESS_PRODUCTION: constant(uint256) = 40
BOOST_WARMUP: constant(uint256) = 2 * 7 * 86400
WEEK: constant(uint256) = 604800

minter: public(address)
crv_token: public(address)
lp_token: public(address)
controller: public(address)
voting_escrow: public(address)
balanceOf: public(HashMap[address, uint256])
totalSupply: public(uint256)
future_epoch_time: public(uint256)

# caller -> recipient -> can deposit?
approved_to_deposit: public(HashMap[address, HashMap[address, bool]])

working_balances: public(HashMap[address, uint256])
working_supply: public(uint256)

# The goal is to be able to calculate ∫(rate * balance / totalSupply dt) from 0 till checkpoint
# All values are kept in units of being multiplied by 1e18
period: public(int128)
period_timestamp: public(uint256[100000000000000000000000000000])

# 1e18 * ∫(rate(t) / totalSupply(t) dt) from 0 till checkpoint
integrate_inv_supply: public(uint256[100000000000000000000000000000])  # bump epoch when rate() changes

# 1e18 * ∫(rate(t) / totalSupply(t) dt) from (last_action) till checkpoint
integrate_inv_supply_of: public(HashMap[address, uint256])
integrate_checkpoint_of: public(HashMap[address, uint256])

# ∫(balance * rate(t) / totalSupply(t) dt) from 0 till checkpoint
# Units: rate * t = already number of coins per address to issue
integrate_fraction: public(HashMap[address, uint256])

inflation_rate: public(uint256)

# For tracking external rewards
reward_contract: public(address)
rewarded_token: public(address)

reward_integral: public(uint256)
reward_integral_for: public(HashMap[address, uint256])
rewards_for: public(HashMap[address, uint256])
claimed_rewards_for: public(HashMap[address, uint256])


@external
def __init__(lp_addr: address, _minter: address, _reward_contract: address, _rewarded_token: address):
    """
    @notice Contract constructor
    @param lp_addr Liquidity Pool contract address
    @param _minter Minter contract address
    @param _reward_contract Synthetix reward contract address
    @param _rewarded_token Received synthetix token contract address
    """
    assert lp_addr != ZERO_ADDRESS
    assert _minter != ZERO_ADDRESS
    assert _reward_contract != ZERO_ADDRESS

    self.lp_token = lp_addr
    self.minter = _minter
    crv_addr: address = Minter(_minter).token()
    self.crv_token = crv_addr
    controller_addr: address = Minter(_minter).controller()
    self.controller = controller_addr
    self.voting_escrow = Controller(controller_addr).voting_escrow()
    self.period_timestamp[0] = block.timestamp
    self.inflation_rate = CRV20(crv_addr).rate()
    self.future_epoch_time = CRV20(crv_addr).future_epoch_time_write()
    self.reward_contract = _reward_contract
    assert ERC20(lp_addr).approve(_reward_contract, MAX_UINT256)
    self.rewarded_token = _rewarded_token


@internal
def _update_liquidity_limit(addr: address, l: uint256, L: uint256):
    """
    @notice Calculate limits which depend on the amount of CRV token per-user.
            Effectively it calculates working balances to apply amplification
            of CRV production by CRV
    @param addr User address
    @param l User's amount of liquidity (LP tokens)
    @param L Total amount of liquidity (LP tokens)
    """
    # To be called after totalSupply is updated
    _voting_escrow: address = self.voting_escrow
    voting_balance: uint256 = ERC20(_voting_escrow).balanceOf(addr)
    voting_total: uint256 = ERC20(_voting_escrow).totalSupply()

    lim: uint256 = l * TOKENLESS_PRODUCTION / 100
    if (voting_total > 0) and (block.timestamp > self.period_timestamp[0] + BOOST_WARMUP):
        lim += L * voting_balance / voting_total * (100 - TOKENLESS_PRODUCTION) / 100

    lim = min(l, lim)
    old_bal: uint256 = self.working_balances[addr]
    self.working_balances[addr] = lim
    _working_supply: uint256 = self.working_supply + lim - old_bal
    self.working_supply = _working_supply

    log UpdateLiquidityLimit(addr, l, L, lim, _working_supply)


@internal
def _checkpoint_rewards(addr: address, claim_rewards: bool):
    # Update reward integrals (no gauge weights involved: easy)
    _rewarded_token: address = self.rewarded_token

    d_reward: uint256 = 0
    if claim_rewards:
        d_reward = ERC20(_rewarded_token).balanceOf(self)
        CurveRewards(self.reward_contract).getReward()
        d_reward = ERC20(_rewarded_token).balanceOf(self) - d_reward

    user_balance: uint256 = self.balanceOf[addr]
    total_balance: uint256 = self.totalSupply
    dI: uint256 = 0
    if total_balance > 0:
        dI = 10 ** 18 * d_reward / total_balance
    I: uint256 = self.reward_integral + dI
    self.reward_integral = I
    self.rewards_for[addr] += user_balance * (I - self.reward_integral_for[addr]) / 10 ** 18
    self.reward_integral_for[addr] = I


@internal
def _checkpoint(addr: address, claim_rewards: bool):
    """
    @notice Checkpoint for a user
    @param addr User address
    """
    _token: address = self.crv_token
    _controller: address = self.controller
    _period: int128 = self.period
    _period_time: uint256 = self.period_timestamp[_period]
    _integrate_inv_supply: uint256 = self.integrate_inv_supply[_period]
    rate: uint256 = self.inflation_rate
    new_rate: uint256 = rate
    prev_future_epoch: uint256 = self.future_epoch_time
    if prev_future_epoch >= _period_time:
        self.future_epoch_time = CRV20(_token).future_epoch_time_write()
        new_rate = CRV20(_token).rate()
        self.inflation_rate = new_rate
    Controller(_controller).checkpoint_gauge(self)

    _working_balance: uint256 = self.working_balances[addr]
    _working_supply: uint256 = self.working_supply

    # Update integral of 1/supply
    if block.timestamp > _period_time:
        prev_week_time: uint256 = _period_time
        week_time: uint256 = min((_period_time + WEEK) / WEEK * WEEK, block.timestamp)

        for i in range(500):
            dt: uint256 = week_time - prev_week_time
            w: uint256 = Controller(_controller).gauge_relative_weight(self, prev_week_time / WEEK * WEEK)

            if _working_supply > 0:
                if prev_future_epoch >= prev_week_time and prev_future_epoch < week_time:
                    # If we went across one or multiple epochs, apply the rate
                    # of the first epoch until it ends, and then the rate of
                    # the last epoch.
                    # If more than one epoch is crossed - the gauge gets less,
                    # but that'd meen it wasn't called for more than 1 year
                    _integrate_inv_supply += rate * w * (prev_future_epoch - prev_week_time) / _working_supply
                    rate = new_rate
                    _integrate_inv_supply += rate * w * (week_time - prev_future_epoch) / _working_supply
                else:
                    _integrate_inv_supply += rate * w * dt / _working_supply
                # On precisions of the calculation
                # rate ~= 10e18
                # last_weight > 0.01 * 1e18 = 1e16 (if pool weight is 1%)
                # _working_supply ~= TVL * 1e18 ~= 1e26 ($100M for example)
                # The largest loss is at dt = 1
                # Loss is 1e-9 - acceptable

            if week_time == block.timestamp:
                break
            prev_week_time = week_time
            week_time = min(week_time + WEEK, block.timestamp)

    _period += 1
    self.period = _period
    self.period_timestamp[_period] = block.timestamp
    self.integrate_inv_supply[_period] = _integrate_inv_supply

    # Update user-specific integrals
    self.integrate_fraction[addr] += _working_balance * (_integrate_inv_supply - self.integrate_inv_supply_of[addr]) / 10 ** 18
    self.integrate_inv_supply_of[addr] = _integrate_inv_supply
    self.integrate_checkpoint_of[addr] = block.timestamp

    self._checkpoint_rewards(addr, claim_rewards)


@external
def user_checkpoint(addr: address) -> bool:
    """
    @notice Record a checkpoint for `addr`
    @param addr User address
    @return bool success
    """
    assert (msg.sender == addr) or (msg.sender == self.minter)  # dev: unauthorized
    self._checkpoint(addr, True)
    self._update_liquidity_limit(addr, self.balanceOf[addr], self.totalSupply)
    return True


@external
def claimable_tokens(addr: address) -> uint256:
    """
    @notice Get the number of claimable tokens per user
    @dev This function should be manually changed to "view" in the ABI
    @return uint256 number of claimable tokens per user
    """
    self._checkpoint(addr, True)
    return self.integrate_fraction[addr] - Minter(self.minter).minted(addr, self)


@external
@view
def claimable_reward(addr: address) -> uint256:
    """
    @notice Get the number of claimable reward tokens for a user
    @param addr Account to get reward amount for
    @return uint256 Claimable reward token amount
    """
    d_reward: uint256 = CurveRewards(self.reward_contract).earned(self)

    user_balance: uint256 = self.balanceOf[addr]
    total_balance: uint256 = self.totalSupply
    dI: uint256 = 0
    if total_balance > 0:
        dI = 10 ** 18 * d_reward / total_balance
    I: uint256 = self.reward_integral + dI

    return self.rewards_for[addr] + user_balance * (I - self.reward_integral_for[addr]) / 10 ** 18


@external
def kick(addr: address):
    """
    @notice Kick `addr` for abusing their boost
    @dev Only if either they had another voting event, or their voting escrow lock expired
    @param addr Address to kick
    """
    _voting_escrow: address = self.voting_escrow
    t_last: uint256 = self.integrate_checkpoint_of[addr]
    t_ve: uint256 = VotingEscrow(_voting_escrow).user_point_history__ts(
        addr, VotingEscrow(_voting_escrow).user_point_epoch(addr)
    )
    _balance: uint256 = self.balanceOf[addr]

    assert ERC20(self.voting_escrow).balanceOf(addr) == 0 or t_ve > t_last # dev: kick not allowed
    assert self.working_balances[addr] > _balance * TOKENLESS_PRODUCTION / 100  # dev: kick not needed

    self._checkpoint(addr, True)
    self._update_liquidity_limit(addr, self.balanceOf[addr], self.totalSupply)


@external
def set_approve_deposit(addr: address, can_deposit: bool):
    """
    @notice Set whether `addr` can deposit tokens for `msg.sender`
    @param addr Address to set approval on
    @param can_deposit bool - can this account deposit for `msg.sender`?
    """
    self.approved_to_deposit[addr][msg.sender] = can_deposit


@external
@nonreentrant('lock')
def deposit(_value: uint256, addr: address = msg.sender):
    """
    @notice Deposit `_value` LP tokens
    @param _value Number of tokens to deposit
    @param addr Address to deposit for
    """
    if addr != msg.sender:
        assert self.approved_to_deposit[msg.sender][addr], "Not approved"

    self._checkpoint(addr, True)

    if _value != 0:
        _balance: uint256 = self.balanceOf[addr] + _value
        _supply: uint256 = self.totalSupply + _value
        self.balanceOf[addr] = _balance
        self.totalSupply = _supply

        self._update_liquidity_limit(addr, _balance, _supply)

        assert ERC20(self.lp_token).transferFrom(msg.sender, self, _value)
        CurveRewards(self.reward_contract).stake(_value)

    log Deposit(addr, _value)


@external
@nonreentrant('lock')
def withdraw(_value: uint256, claim_rewards: bool = True):
    """
    @notice Withdraw `_value` LP tokens
    @param _value Number of tokens to withdraw
    """
    self._checkpoint(msg.sender, claim_rewards)

    _balance: uint256 = self.balanceOf[msg.sender] - _value
    _supply: uint256 = self.totalSupply - _value
    self.balanceOf[msg.sender] = _balance
    self.totalSupply = _supply

    self._update_liquidity_limit(msg.sender, _balance, _supply)

    if _value > 0:
        CurveRewards(self.reward_contract).withdraw(_value)
        assert ERC20(self.lp_token).transfer(msg.sender, _value)

    log Withdraw(msg.sender, _value)


@external
@nonreentrant('lock')
def claim_rewards(addr: address = msg.sender):
    self._checkpoint_rewards(addr, True)
    _rewards_for: uint256 = self.rewards_for[addr]
    assert ERC20(self.rewarded_token).transfer(
        addr, _rewards_for - self.claimed_rewards_for[addr])
    self.claimed_rewards_for[addr] = _rewards_for


@external
@view
def integrate_checkpoint() -> uint256:
    return self.period_timestamp[self.period]

Contract Security Audit

Contract ABI

[{"name":"Deposit","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateLiquidityLimit","inputs":[{"type":"address","name":"user","indexed":false},{"type":"uint256","name":"original_balance","indexed":false},{"type":"uint256","name":"original_supply","indexed":false},{"type":"uint256","name":"working_balance","indexed":false},{"type":"uint256","name":"working_supply","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"lp_addr"},{"type":"address","name":"_minter"},{"type":"address","name":"_reward_contract"},{"type":"address","name":"_rewarded_token"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"user_checkpoint","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2311984},{"name":"claimable_tokens","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2231138},{"name":"claimable_reward","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function","gas":7300},{"name":"kick","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":2317383},{"name":"set_approve_deposit","outputs":[],"inputs":[{"type":"address","name":"addr"},{"type":"bool","name":"can_deposit"}],"stateMutability":"nonpayable","type":"function","gas":35826},{"name":"deposit","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function"},{"name":"deposit","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"withdraw","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function"},{"name":"withdraw","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"bool","name":"claim_rewards"}],"stateMutability":"nonpayable","type":"function"},{"name":"claim_rewards","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function"},{"name":"claim_rewards","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"integrate_checkpoint","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2387},{"name":"minter","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1511},{"name":"crv_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1541},{"name":"lp_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1571},{"name":"controller","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1601},{"name":"voting_escrow","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1631},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1815},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1691},{"name":"future_epoch_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1721},{"name":"approved_to_deposit","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"arg0"},{"type":"address","name":"arg1"}],"stateMutability":"view","type":"function","gas":2059},{"name":"working_balances","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1935},{"name":"working_supply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1811},{"name":"period","outputs":[{"type":"int128","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1841},{"name":"period_timestamp","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1980},{"name":"integrate_inv_supply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2010},{"name":"integrate_inv_supply_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2085},{"name":"integrate_checkpoint_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2115},{"name":"integrate_fraction","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2145},{"name":"inflation_rate","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2021},{"name":"reward_contract","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2051},{"name":"rewarded_token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2081},{"name":"reward_integral","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2111},{"name":"reward_integral_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2295},{"name":"rewards_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2325},{"name":"claimed_rewards_for","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2355}]

Deployed Bytecode

0x600436101561000d57611db4565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05260001561031c575b6101a0526101405261016052610180526004546101c052602061028060246370a0823161020052610140516102205261021c6101c0515afa6100ea57600080fd5b601f3d116100f757600080fd5b600050610280516101e052602061032060046318160ddd6102c0526102dc6101c0515afa61012457600080fd5b601f3d1161013157600080fd5b600050610320516102a052610160516028808202821582848304141761015657600080fd5b809050905090506064808061016a57600080fd5b8204905090506103405260006102a05111156101ac57600c60c052602060c020546212750081818301101561019e57600080fd5b8082019050905042116101af565b60005b1561023b576103408051610180516101e05180820282158284830414176101d557600080fd5b809050905090506102a05180806101eb57600080fd5b820490509050603c808202821582848304141761020757600080fd5b809050905090506064808061021b57600080fd5b82049050905081818301101561023057600080fd5b808201905090508152505b6101605161034051808211156102515780610253565b815b905090506103405260096101405160e05260c052604060c02054610360526103405160096101405160e05260c052604060c02055600a546103405181818301101561029d57600080fd5b8082019050905061036051808210156102b557600080fd5b808203905090506103805261038051600a55610140516103a052610160516103c052610180516103e052610340516104005261038051610420527f7ecd84343f76a23d2227290e0288da3251b045541698e575a5515af4f04197a360a06103a0a16101a051565b600015610550575b6101805261014052610160526013546101a05260006101c052610160511561040c57602061026060246370a082316101e05230610200526101fc6101a0515afa61036d57600080fd5b601f3d1161037a57600080fd5b600050610260516101c0526012543b61039257600080fd5b600060006004633d18b9126102805261029c60006012545af16103b457600080fd5b602061036060246370a082316102e05230610300526102fc6101a0515afa6103db57600080fd5b601f3d116103e857600080fd5b600050610360516101c0518082101561040057600080fd5b808203905090506101c0525b60056101405160e05260c052604060c02054610380526006546103a05260006103c05260006103a051111561047d57670de0b6b3a76400006101c051808202821582848304141761045c57600080fd5b809050905090506103a051808061047257600080fd5b8204905090506103c0525b6014546103c05181818301101561049357600080fd5b808201905090506103e0526103e05160145560166101405160e05260c052604060c0208054610380516103e05160156101405160e05260c052604060c02054808210156104df57600080fd5b8082039050905080820282158284830414176104fa57600080fd5b80905090509050670de0b6b3a7640000808061051557600080fd5b82049050905081818301101561052a57600080fd5b808201905090508155506103e05160156101405160e05260c052604060c0205561018051565b600015610be7575b6101805261014052610160526001546101a0526003546101c052600b546101e0526101e0516c01431e0fae6d7217caa0000000811061059657600080fd5b600c60c052602060c0200154610200526101e0516c01431e0fae6d7217caa000000081106105c357600080fd5b600d60c052602060c020015461022052601154610240526102405161026052600754610280526102005161028051101515610675576020610300600463b26b238e6102a0526102bc60006101a0515af161061c57600080fd5b601f3d1161062957600080fd5b6000506103005160075560206103806004632c4e722e6103205261033c6101a0515afa61065557600080fd5b601f3d1161066257600080fd5b6000506103805161026052610260516011555b6101c0513b61068357600080fd5b60006000602463615e52376103a052306103c0526103bc60006101c0515af16106ab57600080fd5b60096101405160e05260c052604060c0205461042052600a546104405261020051421115610a205761020051610460526102005162093a808181830110156106f257600080fd5b8082019050905062093a80808061070857600080fd5b82049050905062093a80808202821582848304141761072657600080fd5b80905090509050428082111561073c578061073e565b815b90509050610480526104a060006101f4818352015b61048051610460518082101561076857600080fd5b808203905090506104c05260206105a0604463d3078c946105005230610520526104605162093a80808061079b57600080fd5b82049050905062093a8080820282158284830414176107b957600080fd5b809050905090506105405261051c6101c0515afa6107d657600080fd5b601f3d116107e357600080fd5b6000506105a0516104e05260006104405111156109bd5761046051610280511015156108175761048051610280511061081a565b60005b15610946576102208051610240516104e051808202821582848304141761084057600080fd5b8090509050905061028051610460518082101561085c57600080fd5b80820390509050808202821582848304141761087757600080fd5b8090509050905061044051808061088d57600080fd5b8204905090508181830110156108a257600080fd5b8082019050905081525061026051610240526102208051610240516104e05180820282158284830414176108d557600080fd5b809050905090506104805161028051808210156108f157600080fd5b80820390509050808202821582848304141761090c57600080fd5b8090509050905061044051808061092257600080fd5b82049050905081818301101561093757600080fd5b808201905090508152506109bc565b6102208051610240516104e051808202821582848304141761096757600080fd5b809050905090506104c051808202821582848304141761098657600080fd5b8090509050905061044051808061099c57600080fd5b8204905090508181830110156109b157600080fd5b808201905090508152505b5b426104805114156109cd57610a1d565b61048051610460526104805162093a808181830110156109ec57600080fd5b808201905090504280821115610a025780610a04565b815b90509050610480525b8151600101808352811415610753575b50505b6101e08051600160605181830180604051901315610a3d57600080fd5b8091901215610a4b57600080fd5b905090508152506101e051600b55426101e0516c01431e0fae6d7217caa00000008110610a7757600080fd5b600c60c052602060c0200155610220516101e0516c01431e0fae6d7217caa00000008110610aa457600080fd5b600d60c052602060c020015560106101405160e05260c052604060c02080546104205161022051600e6101405160e05260c052604060c0205480821015610aea57600080fd5b808203905090508082028215828483041417610b0557600080fd5b80905090509050670de0b6b3a76400008080610b2057600080fd5b820490509050818183011015610b3557600080fd5b8082019050905081555061022051600e6101405160e05260c052604060c0205542600f6101405160e05260c052604060c020556101406105c0525b6105c0515160206105c051016105c0526104606105c0511015610b9257610b70565b610140516105e0526101605161060052610600516105e05160065801610324565b6104406105c0525b6105c0515260206105c051036105c0526101406105c051101515610bde57610bbb565b60005061018051565b634b8200936000511415610cbc573415610c0057600080fd5b6004356020518110610c1157600080fd5b50600435331415610c23576001610c29565b60005433145b5b610c3357600080fd5b60043561014052600161016052610160516101405160065801610558565b6000506101405161016051610180516101a0516004356101e052600560043560e05260c052604060c02054610200526006546102205261022051610200516101e051600658016100a9565b6101a052610180526101605261014052600050600160005260206000f350005b63331345836000511415610d79573415610cd557600080fd5b6004356020518110610ce657600080fd5b5060043561014052600161016052610160516101405160065801610558565b600050601060043560e05260c052604060c0205460206102606044638b752bb06101c0526004356101e05230610200526101dc6000545afa610d4657600080fd5b601f3d11610d5357600080fd5b6000506102605180821015610d6757600080fd5b8082039050905060005260206000f350005b63d2797b596000511415610f06573415610d9257600080fd5b6004356020518110610da357600080fd5b5060206101e06024628cc26261016052306101805261017c6012545afa610dc957600080fd5b601f3d11610dd657600080fd5b6000506101e05161014052600560043560e05260c052604060c0205461020052600654610220526000610240526000610220511115610e5157670de0b6b3a7640000610140518082028215828483041417610e3057600080fd5b80905090509050610220518080610e4657600080fd5b820490509050610240525b60145461024051818183011015610e6757600080fd5b8082019050905061026052601660043560e05260c052604060c020546102005161026051601560043560e05260c052604060c0205480821015610ea957600080fd5b808203905090508082028215828483041417610ec457600080fd5b80905090509050670de0b6b3a76400008080610edf57600080fd5b820490509050818183011015610ef457600080fd5b8082019050905060005260206000f350005b6396c551756000511415611198573415610f1f57600080fd5b6004356020518110610f3057600080fd5b5060045461014052600f60043560e05260c052604060c020546101605260206102e0604463da020a1861024052600435610260526020610220602463010ae7576101a0526004356101c0526101bc610140515afa610f8d57600080fd5b601f3d11610f9a57600080fd5b600050610220516102805261025c610140515afa610fb757600080fd5b601f3d11610fc457600080fd5b6000506102e05161018052600560043560e05260c052604060c0205461030052602061044060246370a082316103c0526004356103e0526103dc6004545afa61100c57600080fd5b601f3d1161101957600080fd5b60005061044051151561102d576001611037565b6101605161018051115b5b61104157600080fd5b610300516028808202821582848304141761105b57600080fd5b809050905090506064808061106f57600080fd5b820490509050600960043560e05260c052604060c020541161109057600080fd5b610140610460525b610460515160206104605101610460526104606104605110156110ba57611098565b6004356104805260016104a0526104a0516104805160065801610558565b610440610460525b6104605152602061046051036104605261014061046051101515611103576110e0565b600050610140610500525b610500515160206105005101610500526105006105005110156111305761110e565b60043561052052600560043560e05260c052604060c020546105405260065461056052610560516105405161052051600658016100a9565b6104e0610500525b610500515260206105005103610500526101406105005110151561119357611170565b600050005b631d2747d460005114156111f65734156111b157600080fd5b60043560205181106111c257600080fd5b50602435600281106111d357600080fd5b50602435600860043560e05260c052604060c0203360e05260c052604060c02055005b63b6b55f25600051141561120e573361014052611245565b636e553f65600051141561123d57602435602051811061122d57600080fd5b6020602461014037600050611245565b6000156114c2575b62ffffff541561125457600080fd5b600162ffffff55341561126657600080fd5b336101405118156112d9576308c379a061016052602061018052600c6101a0527f4e6f7420617070726f76656400000000000000000000000000000000000000006101c0526101a05060083360e05260c052604060c0206101405160e05260c052604060c020546112d857606461017cfd5b5b610140516101405161022052600161024052610240516102205160065801610558565b61014052600050600060043518156114875760056101405160e05260c052604060c0205460043581818301101561133257600080fd5b808201905090506102a05260065460043581818301101561135257600080fd5b808201905090506102c0526102a05160056101405160e05260c052604060c020556102c0516006556101406102e0525b6102e0515160206102e051016102e0526102e06102e05110156113a457611382565b61014051610300526102a051610320526102c05161034052610340516103205161030051600658016100a9565b6102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156113fc576113d9565b600050602061046060646323b872dd6103a052336103c052306103e052600435610400526103bc60006002545af161143357600080fd5b601f3d1161144057600080fd5b6000506104605161145057600080fd5b6012543b61145d57600080fd5b60006000602463a694fc3a610480526004356104a05261049c60006012545af161148657600080fd5b5b60043561050052610140517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c6020610500a2600062ffffff55005b632e1a7d4d60005114156114db57600161014052611511565b6338d07436600051141561150957602435600281106114f957600080fd5b6020602461014037600050611511565b6000156116f0575b62ffffff541561152057600080fd5b600162ffffff55341561153257600080fd5b610140513361018052610140516101a0526101a0516101805160065801610558565b6101405260005060053360e05260c052604060c020546004358082101561157a57600080fd5b80820390509050610200526006546004358082101561159857600080fd5b80820390509050610220526102005160053360e05260c052604060c02055610220516006556101405161016051610180516101a0516101c0516101e051610200516102205133610260526102005161028052610220516102a0526102a0516102805161026051600658016100a9565b61022052610200526101e0526101c0526101a052610180526101605261014052600050600060043511156116b8576012543b61164257600080fd5b600060006024632e1a7d4d610300526004356103205261031c60006012545af161166b57600080fd5b6020610420604463a9059cbb61038052336103a0526004356103c05261039c60006002545af161169a57600080fd5b601f3d116116a757600080fd5b600050610420516116b757600080fd5b5b60043561044052337f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243646020610440a2600062ffffff55005b63e6f1daf2600051141561170857336101405261173f565b6384e9bd7e600051141561173757600435602051811061172757600080fd5b602060046101403760005061173f565b600015611835575b62ffffff541561174e57600080fd5b600162ffffff55341561176057600080fd5b61014051610140516101805260016101a0526101a0516101805160065801610324565b6101405260005060166101405160e05260c052604060c020546102005260206102c0604463a9059cbb6102205261014051610240526102005160176101405160e05260c052604060c02054808210156117db57600080fd5b808203905090506102605261023c60006013545af16117f957600080fd5b601f3d1161180657600080fd5b6000506102c05161181657600080fd5b6102005160176101405160e05260c052604060c02055600062ffffff55005b63d31f3f6d600051141561188157341561184e57600080fd5b600b546c01431e0fae6d7217caa0000000811061186a57600080fd5b600c60c052602060c020015460005260206000f350005b630754617260005114156118a857341561189a57600080fd5b60005460005260206000f350005b6376d8b11760005114156118cf5734156118c157600080fd5b60015460005260206000f350005b6382c6306660005114156118f65734156118e857600080fd5b60025460005260206000f350005b63f77c4791600051141561191d57341561190f57600080fd5b60035460005260206000f350005b63dfe05031600051141561194457341561193657600080fd5b60045460005260206000f350005b6370a08231600051141561198b57341561195d57600080fd5b600435602051811061196e57600080fd5b50600560043560e05260c052604060c0205460005260206000f350005b6318160ddd60005114156119b25734156119a457600080fd5b60065460005260206000f350005b63be5d1be960005114156119d95734156119cb57600080fd5b60075460005260206000f350005b63e15225366000511415611a405734156119f257600080fd5b6004356020518110611a0357600080fd5b506024356020518110611a1557600080fd5b50600860043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f350005b6313ecb1ca6000511415611a87573415611a5957600080fd5b6004356020518110611a6a57600080fd5b50600960043560e05260c052604060c0205460005260206000f350005b6317e280896000511415611aae573415611aa057600080fd5b600a5460005260206000f350005b63ef78d4fd6000511415611ad5573415611ac757600080fd5b600b5460005260206000f350005b637598108c6000511415611b21573415611aee57600080fd5b6004356c01431e0fae6d7217caa00000008110611b0a57600080fd5b600c60c052602060c020015460005260206000f350005b63fec8ee0c6000511415611b6d573415611b3a57600080fd5b6004356c01431e0fae6d7217caa00000008110611b5657600080fd5b600d60c052602060c020015460005260206000f350005b63de263bfa6000511415611bb4573415611b8657600080fd5b6004356020518110611b9757600080fd5b50600e60043560e05260c052604060c0205460005260206000f350005b639bd324f26000511415611bfb573415611bcd57600080fd5b6004356020518110611bde57600080fd5b50600f60043560e05260c052604060c0205460005260206000f350005b63094007076000511415611c42573415611c1457600080fd5b6004356020518110611c2557600080fd5b50601060043560e05260c052604060c0205460005260206000f350005b63180692d06000511415611c69573415611c5b57600080fd5b60115460005260206000f350005b63bf88a6ff6000511415611c90573415611c8257600080fd5b60125460005260206000f350005b6316fa50b16000511415611cb7573415611ca957600080fd5b60135460005260206000f350005b63aaa626b66000511415611cde573415611cd057600080fd5b60145460005260206000f350005b6313fa13686000511415611d25573415611cf757600080fd5b6004356020518110611d0857600080fd5b50601560043560e05260c052604060c0205460005260206000f350005b639df4ed566000511415611d6c573415611d3e57600080fd5b6004356020518110611d4f57600080fd5b50601660043560e05260c052604060c0205460005260206000f350005b63fd96044b6000511415611db3573415611d8557600080fd5b6004356020518110611d9657600080fd5b50601760043560e05260c052604060c0205460005260206000f350005b5b60006000fd

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  ]
[ 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.