AVAX Price: $22.88 (+12.17%)
Gas: 1.2 nAVAX
 

Multichain Info

Transaction Hash
Method
Block
From
To
Claim_rewards566522332025-02-01 7:29:0181 days ago1738394941IN
0x445FE580...f338db351
0 AVAX0.00023151.01711158
Withdraw560584332025-01-19 22:45:0593 days ago1737326705IN
0x445FE580...f338db351
0 AVAX0.0035546727.19096495
Claim_rewards560580092025-01-19 22:34:0593 days ago1737326045IN
0x445FE580...f338db351
0 AVAX0.000348883.90456112
Claim_rewards560579592025-01-19 22:32:5493 days ago1737325974IN
0x445FE580...f338db351
0 AVAX0.000888723.90456112
Withdraw559686092025-01-18 4:45:3195 days ago1737175531IN
0x445FE580...f338db351
0 AVAX0.000087421
Withdraw559686072025-01-18 4:45:2895 days ago1737175528IN
0x445FE580...f338db351
0 AVAX0.000130731
Claim_rewards559682112025-01-18 4:33:1195 days ago1737174791IN
0x445FE580...f338db351
0 AVAX0.000142781
Increase Allowan...559672682025-01-18 4:06:0395 days ago1737173163IN
0x445FE580...f338db351
0 AVAX0.000116172.5
Withdraw549245182024-12-26 20:53:16117 days ago1735246396IN
0x445FE580...f338db351
0 AVAX0.00014381.1
Claim_rewards549234642024-12-26 20:19:59117 days ago1735244399IN
0x445FE580...f338db351
0 AVAX0.000193931.1
Withdraw544755802024-12-17 16:48:16126 days ago1734454096IN
0x445FE580...f338db351
0 AVAX0.000049331.04643438
Withdraw544708632024-12-17 14:44:18126 days ago1734446658IN
0x445FE580...f338db351
0 AVAX0.000165191.04643438
Claim_rewards543163532024-12-14 0:43:29130 days ago1734137009IN
0x445FE580...f338db351
0 AVAX0.0037837226.5
Withdraw543160852024-12-14 0:34:21130 days ago1734136461IN
0x445FE580...f338db351
0 AVAX0.0045223526.5
Claim_rewards541765202024-12-10 16:53:15133 days ago1733849595IN
0x445FE580...f338db351
0 AVAX0.0046751725
Withdraw541738402024-12-10 15:28:50133 days ago1733844530IN
0x445FE580...f338db351
0 AVAX0.0042660725
Claim_rewards540995262024-12-08 21:19:28135 days ago1733692768IN
0x445FE580...f338db351
0 AVAX0.0036066725.26
Withdraw540992092024-12-08 21:08:20135 days ago1733692100IN
0x445FE580...f338db351
0 AVAX0.004481426.26
Withdraw535627932024-11-26 6:11:44148 days ago1732601504IN
0x445FE580...f338db351
0 AVAX0.0032685525
Claim_rewards535627752024-11-26 6:11:04148 days ago1732601464IN
0x445FE580...f338db351
0 AVAX0.0044078225
Claim_rewards535190552024-11-25 5:44:58149 days ago1732513498IN
0x445FE580...f338db351
0 AVAX0.0038201725
Withdraw535127562024-11-25 2:10:15149 days ago1732500615IN
0x445FE580...f338db351
0 AVAX0.0032685525
Claim_rewards535122092024-11-25 1:51:14149 days ago1732499474IN
0x445FE580...f338db351
0 AVAX0.0045841326
Claim_rewards531646102024-11-16 21:16:46157 days ago1731791806IN
0x445FE580...f338db351
0 AVAX0.0042476725
Claim_rewards519878462024-10-19 18:55:33185 days ago1729364133IN
0x445FE580...f338db351
0 AVAX0.0042476725
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x5B5CFE99...73a003858
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.12

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.2.12
"""
@title Rewards-Only Gauge
@author Curve Finance
@license MIT
@notice Distribution of third-party rewards without CRV
"""

from vyper.interfaces import ERC20

implements: ERC20


interface ERC20Extended:
    def symbol() -> String[26]: view


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

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

event CommitOwnership:
    admin: address

event ApplyOwnership:
    admin: address

event Transfer:
    _from: indexed(address)
    _to: indexed(address)
    _value: uint256

event Approval:
    _owner: indexed(address)
    _spender: indexed(address)
    _value: uint256

MAX_REWARDS: constant(uint256) = 8
CLAIM_FREQUENCY: constant(uint256) = 3600

lp_token: public(address)

balanceOf: public(HashMap[address, uint256])
totalSupply: public(uint256)
allowance: public(HashMap[address, HashMap[address, uint256]])

name: public(String[64])
symbol: public(String[32])

# For tracking external rewards
reward_data: uint256
reward_tokens: public(address[MAX_REWARDS])
reward_balances: public(HashMap[address, uint256])
# claimant -> default reward receiver
rewards_receiver: public(HashMap[address, address])

claim_sig: public(Bytes[4])

# reward token -> integral
reward_integral: public(HashMap[address, uint256])

# reward token -> claiming address -> integral
reward_integral_for: public(HashMap[address, HashMap[address, uint256]])

# user -> [uint128 claimable amount][uint128 claimed amount]
claim_data: HashMap[address, HashMap[address, uint256]]

admin: public(address)
future_admin: public(address)  # Can and will be a smart contract


@external
def __init__( _admin: address, _lp_token: address):
    """
    @notice Contract constructor
    @param _admin Admin who can kill the gauge
    @param _lp_token Liquidity Pool contract address
    """

    symbol: String[26] = ERC20Extended(_lp_token).symbol()
    self.name = concat("Curve.fi ", symbol, " RewardGauge Deposit")
    self.symbol = concat(symbol, "-gauge")

    self.lp_token = _lp_token
    self.admin = _admin


@view
@external
def decimals() -> uint256:
    """
    @notice Get the number of decimals for this token
    @dev Implemented as a view method to reduce gas costs
    @return uint256 decimal places
    """
    return 18


@internal
def _checkpoint_rewards(_user: address, _total_supply: uint256, _claim: bool, _receiver: address):
    """
    @notice Claim pending rewards and checkpoint rewards for a user
    """
    # claim from reward contract

    reward_data: uint256 = self.reward_data
    if _total_supply != 0 and reward_data != 0 and block.timestamp > shift(reward_data, -160) + CLAIM_FREQUENCY:
        reward_contract: address = convert(reward_data % 2**160, address)
        raw_call(reward_contract, self.claim_sig)  # dev: bad claim sig
        self.reward_data = convert(reward_contract, uint256) + shift(block.timestamp, 160)

    receiver: address = _receiver
    if _claim and receiver == ZERO_ADDRESS:
        # if receiver is not explicitly declared, check for default receiver
        receiver = self.rewards_receiver[_user]
        if receiver == ZERO_ADDRESS:
            # direct claims to user if no default receiver is set
            receiver = _user

    # calculate new user reward integral and transfer any owed rewards
    user_balance: uint256 = self.balanceOf[_user]
    for i in range(MAX_REWARDS):
        token: address = self.reward_tokens[i]
        if token == ZERO_ADDRESS:
            break
        dI: uint256 = 0
        if _total_supply != 0:
            token_balance: uint256 = ERC20(token).balanceOf(self)
            dI = 10**18 * (token_balance - self.reward_balances[token]) / _total_supply
            self.reward_balances[token] = token_balance
            if _user == ZERO_ADDRESS:
                if dI != 0:
                    self.reward_integral[token] += dI
                continue

        integral: uint256 = self.reward_integral[token] + dI
        if dI != 0:
            self.reward_integral[token] = integral

        integral_for: uint256 = self.reward_integral_for[token][_user]
        new_claimable: uint256 = 0
        if integral_for < integral:
            self.reward_integral_for[token][_user] = integral
            new_claimable = user_balance * (integral - integral_for) / 10**18

        claim_data: uint256 = self.claim_data[_user][token]
        total_claimable: uint256 = shift(claim_data, -128) + new_claimable
        if total_claimable > 0:
            total_claimed: uint256 = claim_data % 2 ** 128
            if _claim:
                response: Bytes[32] = raw_call(
                    token,
                    concat(
                        method_id("transfer(address,uint256)"),
                        convert(receiver, bytes32),
                        convert(total_claimable, bytes32),
                    ),
                    max_outsize=32,
                )
                if len(response) != 0:
                    assert convert(response, bool)
                self.reward_balances[token] -= total_claimable
                # update amount claimed (lower order bytes)
                self.claim_data[_user][token] = total_claimed + total_claimable
            elif new_claimable > 0:
                # update total_claimable (higher order bytes)
                self.claim_data[_user][token] = total_claimed + shift(total_claimable, 128)


@view
@external
def reward_contract() -> address:
    """
    @notice Address of the reward contract providing non-CRV incentives for this gauge
    @dev Returns `ZERO_ADDRESS` if there is no reward contract active
    """
    return convert(self.reward_data % 2**160, address)


@view
@external
def last_claim() -> uint256:
    """
    @notice Epoch timestamp of the last call to claim from `reward_contract`
    @dev Rewards are claimed at most once per hour in order to reduce gas costs
    """
    return shift(self.reward_data, -160)


@view
@external
def claimed_reward(_addr: address, _token: address) -> uint256:
    """
    @notice Get the number of already-claimed reward tokens for a user
    @param _addr Account to get reward amount for
    @param _token Token to get reward amount for
    @return uint256 Total amount of `_token` already claimed by `_addr`
    """
    return self.claim_data[_addr][_token] % 2**128


@view
@external
def claimable_reward(_addr: address, _token: address) -> uint256:
    """
    @notice Get the number of claimable reward tokens for a user
    @dev This call does not consider pending claimable amount in `reward_contract`.
         Off-chain callers should instead use `claimable_rewards_write` as a
         view method.
    @param _addr Account to get reward amount for
    @param _token Token to get reward amount for
    @return uint256 Claimable reward token amount
    """
    return shift(self.claim_data[_addr][_token], -128)


@external
@nonreentrant('lock')
def claimable_reward_write(_addr: address, _token: address) -> uint256:
    """
    @notice Get the number of claimable reward tokens for a user
    @dev This function should be manually changed to "view" in the ABI
         Calling it via a transaction will claim available reward tokens
    @param _addr Account to get reward amount for
    @param _token Token to get reward amount for
    @return uint256 Claimable reward token amount
    """
    if self.reward_tokens[0] != ZERO_ADDRESS:
        self._checkpoint_rewards(_addr, self.totalSupply, False, ZERO_ADDRESS)
    return shift(self.claim_data[_addr][_token], -128)


@external
def set_rewards_receiver(_receiver: address):
    """
    @notice Set the default reward receiver for the caller.
    @dev When set to ZERO_ADDRESS, rewards are sent to the caller
    @param _receiver Receiver address for any rewards claimed via `claim_rewards`
    """
    self.rewards_receiver[msg.sender] = _receiver


@external
@nonreentrant('lock')
def claim_rewards(_addr: address = msg.sender, _receiver: address = ZERO_ADDRESS):
    """
    @notice Claim available reward tokens for `_addr`
    @param _addr Address to claim for
    @param _receiver Address to transfer rewards to - if set to
                     ZERO_ADDRESS, uses the default reward receiver
                     for the caller
    """
    if _receiver != ZERO_ADDRESS:
        assert _addr == msg.sender  # dev: cannot redirect when claiming for another user
    self._checkpoint_rewards(_addr, self.totalSupply, True, _receiver)


@external
@nonreentrant('lock')
def deposit(_value: uint256, _addr: address = msg.sender, _claim_rewards: bool = False):
    """
    @notice Deposit `_value` LP tokens
    @dev Depositting also claims pending reward tokens
    @param _value Number of tokens to deposit
    @param _addr Address to deposit for
    """
    if _value != 0:
        reward_contract: address = convert(self.reward_data % 2**160, address)
        total_supply: uint256 = self.totalSupply

        self._checkpoint_rewards(_addr, total_supply, _claim_rewards, ZERO_ADDRESS)

        total_supply += _value
        new_balance: uint256 = self.balanceOf[_addr] + _value
        self.balanceOf[_addr] = new_balance
        self.totalSupply = total_supply

        ERC20(self.lp_token).transferFrom(msg.sender, self, _value)

    log Deposit(_addr, _value)
    log Transfer(ZERO_ADDRESS, _addr, _value)


@external
@nonreentrant('lock')
def withdraw(_value: uint256, _claim_rewards: bool = False):
    """
    @notice Withdraw `_value` LP tokens
    @dev Withdrawing also claims pending reward tokens
    @param _value Number of tokens to withdraw
    """
    if _value != 0:
        reward_contract: address = convert(self.reward_data % 2**160, address)
        total_supply: uint256 = self.totalSupply

        self._checkpoint_rewards(msg.sender, total_supply, _claim_rewards, ZERO_ADDRESS)

        total_supply -= _value
        new_balance: uint256 = self.balanceOf[msg.sender] - _value
        self.balanceOf[msg.sender] = new_balance
        self.totalSupply = total_supply

        ERC20(self.lp_token).transfer(msg.sender, _value)

    log Withdraw(msg.sender, _value)
    log Transfer(msg.sender, ZERO_ADDRESS, _value)


@internal
def _transfer(_from: address, _to: address, _value: uint256):
    reward_contract: address = convert(self.reward_data % 2**160, address)

    if _value != 0:
        total_supply: uint256 = self.totalSupply
        self._checkpoint_rewards(_from, total_supply, False, ZERO_ADDRESS)
        new_balance: uint256 = self.balanceOf[_from] - _value
        self.balanceOf[_from] = new_balance

        self._checkpoint_rewards(_to, total_supply, False, ZERO_ADDRESS)
        new_balance = self.balanceOf[_to] + _value
        self.balanceOf[_to] = new_balance

    log Transfer(_from, _to, _value)


@external
@nonreentrant('lock')
def transfer(_to : address, _value : uint256) -> bool:
    """
    @notice Transfer token for a specified address
    @dev Transferring claims pending reward tokens for the sender and receiver
    @param _to The address to transfer to.
    @param _value The amount to be transferred.
    """
    self._transfer(msg.sender, _to, _value)

    return True


@external
@nonreentrant('lock')
def transferFrom(_from : address, _to : address, _value : uint256) -> bool:
    """
    @notice Transfer tokens from one address to another.
    @dev Transferring claims pending reward tokens for the sender and receiver
    @param _from address The address which you want to send tokens from
    @param _to address The address which you want to transfer to
    @param _value uint256 the amount of tokens to be transferred
    """
    _allowance: uint256 = self.allowance[_from][msg.sender]
    if _allowance != MAX_UINT256:
        self.allowance[_from][msg.sender] = _allowance - _value

    self._transfer(_from, _to, _value)

    return True


@external
def approve(_spender : address, _value : uint256) -> bool:
    """
    @notice Approve the passed address to transfer the specified amount of
            tokens on behalf of msg.sender
    @dev Beware that changing an allowance via this method brings the risk
         that someone may use both the old and new allowance by unfortunate
         transaction ordering. This may be mitigated with the use of
         {incraseAllowance} and {decreaseAllowance}.
         https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    @param _spender The address which will transfer the funds
    @param _value The amount of tokens that may be transferred
    @return bool success
    """
    self.allowance[msg.sender][_spender] = _value
    log Approval(msg.sender, _spender, _value)

    return True


@external
def increaseAllowance(_spender: address, _added_value: uint256) -> bool:
    """
    @notice Increase the allowance granted to `_spender` by the caller
    @dev This is alternative to {approve} that can be used as a mitigation for
         the potential race condition
    @param _spender The address which will transfer the funds
    @param _added_value The amount of to increase the allowance
    @return bool success
    """
    allowance: uint256 = self.allowance[msg.sender][_spender] + _added_value
    self.allowance[msg.sender][_spender] = allowance

    log Approval(msg.sender, _spender, allowance)

    return True


@external
def decreaseAllowance(_spender: address, _subtracted_value: uint256) -> bool:
    """
    @notice Decrease the allowance granted to `_spender` by the caller
    @dev This is alternative to {approve} that can be used as a mitigation for
         the potential race condition
    @param _spender The address which will transfer the funds
    @param _subtracted_value The amount of to decrease the allowance
    @return bool success
    """
    allowance: uint256 = self.allowance[msg.sender][_spender] - _subtracted_value
    self.allowance[msg.sender][_spender] = allowance

    log Approval(msg.sender, _spender, allowance)

    return True


@external
@nonreentrant('lock')
def set_rewards(_reward_contract: address, _claim_sig: bytes32, _reward_tokens: address[MAX_REWARDS]):
    """
    @notice Set the active reward contract
    @dev A reward contract cannot be set while this contract has no deposits
    @param _reward_contract Reward contract address. Set to ZERO_ADDRESS to
                            disable staking.
    @param _claim_sig Four byte selectors for staking, withdrawing and claiming,
                 left padded with zero bytes. If the reward contract can
                 be claimed from but does not require staking, the staking
                 and withdraw selectors should be set to 0x00
    @param _reward_tokens List of claimable reward tokens. New reward tokens
                          may be added but they cannot be removed. When calling
                          this function to unset or modify a reward contract,
                          this array must begin with the already-set reward
                          token addresses.
    """
    assert msg.sender == self.admin

    lp_token: address = self.lp_token
    current_reward_contract: address = convert(self.reward_data % 2**160, address)
    total_supply: uint256 = self.totalSupply
    self._checkpoint_rewards(ZERO_ADDRESS, total_supply, False, ZERO_ADDRESS)

    if _reward_contract != ZERO_ADDRESS:
        assert _reward_tokens[0] != ZERO_ADDRESS  # dev: no reward token
        assert _reward_contract.is_contract  # dev: not a contract

    self.reward_data = convert(_reward_contract, uint256)
    self.claim_sig = slice(_claim_sig, 28, 4)
    for i in range(MAX_REWARDS):
        current_token: address = self.reward_tokens[i]
        new_token: address = _reward_tokens[i]
        if current_token != ZERO_ADDRESS:
            assert current_token == new_token  # dev: cannot modify existing reward token
        elif new_token != ZERO_ADDRESS:
            self.reward_tokens[i] = new_token
        else:
            break

    if _reward_contract != ZERO_ADDRESS:
        # do an initial checkpoint to verify that claims are working
        self._checkpoint_rewards(ZERO_ADDRESS, total_supply, False, ZERO_ADDRESS)


@external
def commit_transfer_ownership(addr: address):
    """
    @notice Transfer ownership of GaugeController to `addr`
    @param addr Address to have ownership transferred to
    """
    assert msg.sender == self.admin  # dev: admin only

    self.future_admin = addr
    log CommitOwnership(addr)


@external
def accept_transfer_ownership():
    """
    @notice Accept a pending ownership transfer
    """
    _admin: address = self.future_admin
    assert msg.sender == _admin  # dev: future admin only

    self.admin = _admin
    log ApplyOwnership(_admin)

Contract Security Audit

Contract ABI

API
[{"name":"Deposit","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Transfer","inputs":[{"name":"_from","type":"address","indexed":true},{"name":"_to","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"name":"_owner","type":"address","indexed":true},{"name":"_spender","type":"address","indexed":true},{"name":"_value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_admin","type":"address"},{"name":"_lp_token","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":288},{"stateMutability":"view","type":"function","name":"reward_contract","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2628},{"stateMutability":"view","type":"function","name":"last_claim","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2454},{"stateMutability":"view","type":"function","name":"claimed_reward","inputs":[{"name":"_addr","type":"address"},{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2976},{"stateMutability":"view","type":"function","name":"claimable_reward","inputs":[{"name":"_addr","type":"address"},{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2944},{"stateMutability":"nonpayable","type":"function","name":"claimable_reward_write","inputs":[{"name":"_addr","type":"address"},{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2067577},{"stateMutability":"nonpayable","type":"function","name":"set_rewards_receiver","inputs":[{"name":"_receiver","type":"address"}],"outputs":[],"gas":35643},{"stateMutability":"nonpayable","type":"function","name":"claim_rewards","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim_rewards","inputs":[{"name":"_addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claim_rewards","inputs":[{"name":"_addr","type":"address"},{"name":"_receiver","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit","inputs":[{"name":"_value","type":"uint256"},{"name":"_addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit","inputs":[{"name":"_value","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_claim_rewards","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"_value","type":"uint256"},{"name":"_claim_rewards","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":8092437},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":8130387},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":38091},{"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_added_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40635},{"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_subtracted_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40659},{"stateMutability":"nonpayable","type":"function","name":"set_rewards","inputs":[{"name":"_reward_contract","type":"address"},{"name":"_claim_sig","type":"bytes32"},{"name":"_reward_tokens","type":"address[8]"}],"outputs":[],"gas":4442580},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":39375},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[],"gas":39320},{"stateMutability":"view","type":"function","name":"lp_token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2928},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3173},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2988},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3448},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":13350},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":11103},{"stateMutability":"view","type":"function","name":"reward_tokens","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3217},{"stateMutability":"view","type":"function","name":"reward_balances","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3353},{"stateMutability":"view","type":"function","name":"rewards_receiver","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3383},{"stateMutability":"view","type":"function","name":"claim_sig","inputs":[],"outputs":[{"name":"","type":"bytes"}],"gas":11223},{"stateMutability":"view","type":"function","name":"reward_integral","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3443},{"stateMutability":"view","type":"function","name":"reward_integral_for","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3688},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3288},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3318}]

Deployed Bytecode

0x600436101561000d576112ed565b600035601c52600051341561002157600080fd5b63313ce56781141561003857601260005260206000f35b63bf88a6ff81141561007e5760065474010000000000000000000000000000000000000000808206905090508060a01c1561007257600080fd5b80905060005260206000f35b633488bd198114156100995760065460a01c60005260206000f35b63e77e74378114156101065760043560a01c156100b557600080fd5b60243560a01c156100c557600080fd5b600d60043560e05260c052604060c02060243560e05260c052604060c020547001000000000000000000000000000000008082069050905060005260206000f35b6333fd6f7481141561015d5760043560a01c1561012257600080fd5b60243560a01c1561013257600080fd5b600d60043560e05260c052604060c02060243560e05260c052604060c0205460801c60005260206000f35b6359b7e409811415610215576010541561017657600080fd5b600160105560043560a01c1561018b57600080fd5b60243560a01c1561019b57600080fd5b6000600760c052602060c0205418156101e557600435610140526002546101605260006101805260006101a0526101a051610180516101605161014051600658016112f3565b6000505b600d60043560e05260c052604060c02060243560e05260c052604060c0205460801c600052600060105560206000f35b63bdf981168114156102455760043560a01c1561023157600080fd5b60043560093360e05260c052604060c02055005b63e6f1daf28114156102615733610140526000610160526102dc565b6384e9bd7e8114156102935760006101605260043560a01c1561028357600080fd5b60206004610140376000506102dc565b639faceb1b8114156102d75760043560a01c156102af57600080fd5b602060046101403760243560a01c156102c757600080fd5b60206024610160376000506102dc565b610359565b601054156102e957600080fd5b600160105560006101605118156103095733610140511461030957600080fd5b610140516101605161014051610180526002546101a05260016101c052610160516101e0526101e0516101c0516101a05161018051600658016112f3565b61016052610140526000506000601055005b63b6b55f258114156103755733610140526000610160526103f0565b636e553f658114156103a75760006101605260243560a01c1561039757600080fd5b60206024610140376000506103f0565b6383df67478114156103eb5760243560a01c156103c357600080fd5b602060246101403760443560011c156103db57600080fd5b60206044610160376000506103f0565b6105c6565b601054156103fd57600080fd5b6001601055600060043518156105595760065474010000000000000000000000000000000000000000808206905090508060a01c1561043b57600080fd5b809050610180526002546101a0526101405161016051610180516101a051610140516101c0526101a0516101e052610160516102005260006102205261022051610200516101e0516101c051600658016112f3565b6101a0526101805261016052610140526000506101a080516004358181830110156104ba57600080fd5b8082019050905081525060016101405160e05260c052604060c020546004358181830110156104e857600080fd5b808201905090506101c0526101c05160016101405160e05260c052604060c020556101a05160025560206102a060646323b872dd6101e05233610200523061022052600435610240526101fc60006000545af161054457600080fd5b601f3d1161055157600080fd5b6000506102a0505b60043561018052610140517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c6020610180a2600435610180526101405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610180a36000601055005b632e1a7d4d8114156105dd5760006101405261060e565b6338d074368114156106095760243560011c156105f957600080fd5b602060246101403760005061060e565b6107c4565b6010541561061b57600080fd5b60016010556000600435181561075d5760065474010000000000000000000000000000000000000000808206905090508060a01c1561065957600080fd5b8090506101605260025461018052610140516101605161018051336101a052610180516101c052610140516101e052600061020052610200516101e0516101c0516101a051600658016112f3565b6101805261016052610140526000506101808051600435808210156106cb57600080fd5b8082039050905081525060013360e05260c052604060c02054600435808210156106f457600080fd5b808203905090506101a0526101a05160013360e05260c052604060c02055610180516002556020610260604463a9059cbb6101c052336101e052600435610200526101dc60006000545af161074857600080fd5b601f3d1161075557600080fd5b600050610260505b60043561016052337f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243646020610160a2600435610160526000337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610160a36000601055005b63a9059cbb81141561082d57601054156107dd57600080fd5b600160105560043560a01c156107f257600080fd5b336101405260043561016052602435610180526101805161016051610140516006580161197f565b6000506001600052600060105560206000f35b6323b872dd811415610935576010541561084657600080fd5b600160105560043560a01c1561085b57600080fd5b60243560a01c1561086b57600080fd5b600360043560e05260c052604060c0203360e05260c052604060c02054610140527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101405118156108f05761014051604435808210156108cb57600080fd5b80820390509050600360043560e05260c052604060c0203360e05260c052604060c020555b6101405160043561016052602435610180526044356101a0526101a05161018051610160516006580161197f565b610140526000506001600052600060105560206000f35b63095ea7b38114156109ae5760043560a01c1561095157600080fd5b60243560033360e05260c052604060c02060043560e05260c052604060c0205560243561014052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610140a3600160005260206000f35b6339509351811415610a635760043560a01c156109ca57600080fd5b60033360e05260c052604060c02060043560e05260c052604060c020546024358181830110156109f957600080fd5b80820190509050610140526101405160033360e05260c052604060c02060043560e05260c052604060c020556101405161016052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610160a3600160005260206000f35b63a457c2d7811415610b165760043560a01c15610a7f57600080fd5b60033360e05260c052604060c02060043560e05260c052604060c0205460243580821015610aac57600080fd5b80820390509050610140526101405160033360e05260c052604060c02060043560e05260c052604060c020556101405161016052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610160a3600160005260206000f35b6347d2d5d3811415610e315760105415610b2f57600080fd5b600160105560043560a01c15610b4457600080fd5b6000610120525b610120516044013560a01c15610b6057600080fd5b6020610120510161012052610100610120511015610b7d57610b4b565b600e543314610b8b57600080fd5b6000546101405260065474010000000000000000000000000000000000000000808206905090508060a01c15610bc057600080fd5b809050610160526002546101805261014051610160516101805160006101a052610180516101c05260006101e052600061020052610200516101e0516101c0516101a051600658016112f3565b61018052610160526101405260005060006004351815610c4657600060443518610c3657600080fd5b60006004353b11610c4657600080fd5b600435600655601c6004602082066101a00160208284011115610c6857600080fd5b60246101c06020840161012060006001818352015b82610120516020021115610c9057610cb5565b61012051602002850135610120516020028501525b8151600101808352811415610c7d575b50505050508181528090509050905080600a60c052602060c020602082510161012060006002818352015b82610120516020021115610cf357610d15565b61012051602002850151610120518501555b8151600101808352811415610ce0575b5050505050506101a060006008818352015b6101a05160088110610d3857600080fd5b600760c052602060c02001546101c05260446101a05160088110610d5b57600080fd5b60200201356101e05260006101c0511815610d87576101e0516101c05114610d8257600080fd5b610dbe565b60006101e0511815610db9576101e0516101a05160088110610da857600080fd5b600760c052602060c0200155610dbe565b610dce565b8151600101808352811415610d27575b505060006004351815610e2a5761014051610160516101805160006101a052610180516101c05260006101e052600061020052610200516101e0516101c0516101a051600658016112f3565b6101805261016052610140526000505b6000601055005b636b441a40811415610e915760043560a01c15610e4d57600080fd5b600e543314610e5b57600080fd5b600435600f55600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b63e5ea47b8811415610eeb57600f5461014052610140513314610eb357600080fd5b61014051600e5561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6382c63066811415610f035760005460005260206000f35b6370a08231811415610f395760043560a01c15610f1f57600080fd5b600160043560e05260c052604060c0205460005260206000f35b6318160ddd811415610f515760025460005260206000f35b63dd62ed3e811415610fa55760043560a01c15610f6d57600080fd5b60243560a01c15610f7d57600080fd5b600360043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b6306fdde0381141561104a5760048060c052602060c020610180602082540161012060006003818352015b82610120516020021115610fe357611005565b61012051850154610120516020028501525b8151600101808352811415610fd0575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6395d89b418114156110ef5760058060c052602060c020610180602082540161012060006002818352015b82610120516020021115611088576110aa565b61012051850154610120516020028501525b8151600101808352811415611075575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6354c49fe9811415611120576004356008811061110b57600080fd5b600760c052602060c020015460005260206000f35b63fe9e21788114156111565760043560a01c1561113c57600080fd5b600860043560e05260c052604060c0205460005260206000f35b6301ddabf181141561118c5760043560a01c1561117257600080fd5b600960043560e05260c052604060c0205460005260206000f35b63b7aca56881141561123157600a8060c052602060c020610180602082540161012060006002818352015b826101205160200211156111ca576111ec565b61012051850154610120516020028501525b81516001018083528114156111b7575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6373861fb38114156112675760043560a01c1561124d57600080fd5b600b60043560e05260c052604060c0205460005260206000f35b63f05cc0588114156112bb5760043560a01c1561128357600080fd5b60243560a01c1561129357600080fd5b600c60043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b63f851a4408114156112d357600e5460005260206000f35b6317f7182a8114156112eb57600f5460005260206000f35b505b60006000fd5b6101c0526101405261016052610180526101a0526006546101e05260006101605118156113555760006101e051181561134d576101e05160a01c610e1081818301101561133f57600080fd5b808201905090504211611350565b60005b611358565b60005b1561142b576101e05174010000000000000000000000000000000000000000808206905090508060a01c1561138c57600080fd5b80905061020052600a8060c052602060c020610220602082540161012060006002818352015b826101205160200211156113c5576113e7565b61012051850154610120516020028501525b81516001018083528114156113b2575b50505050505060006000610220516102406000610200515af161140957600080fd5b610200514260a01b81818301101561142057600080fd5b808201905090506006555b6101a051610200526101805115611446576102005115611449565b60005b156114775760096101405160e05260c052604060c02054610200526102005115156114775761014051610200525b60016101405160e05260c052604060c020546102205261024060006008818352015b61024051600881106114aa57600080fd5b600760c052602060c0200154610260526102605115156114c957611977565b60006102805260006101605118156115e357602061034060246370a082316102c052306102e0526102dc610260515afa61150257600080fd5b601f3d1161150f57600080fd5b600050610340516102a052670de0b6b3a76400006102a05160086102605160e05260c052604060c020548082101561154657600080fd5b80820390509050808202821582848304141761156157600080fd5b8090509050905061016051808061157757600080fd5b820490509050610280526102a05160086102605160e05260c052604060c020556101405115156115e35760006102805118156115de57600b6102605160e05260c052604060c0208054610280518181830110156115d357600080fd5b808201905090508155505b611967565b600b6102605160e05260c052604060c020546102805181818301101561160857600080fd5b808201905090506102a0526000610280511815611636576102a051600b6102605160e05260c052604060c020555b600c6102605160e05260c052604060c0206101405160e05260c052604060c020546102c05260006102e0526102a0516102c05110156116e4576102a051600c6102605160e05260c052604060c0206101405160e05260c052604060c02055610220516102a0516102c051808210156116ad57600080fd5b8082039050905080820282158284830414176116c857600080fd5b80905090509050670de0b6b3a7640000808204905090506102e0525b600d6101405160e05260c052604060c0206102605160e05260c052604060c02054610300526103005160801c6102e05181818301101561172357600080fd5b8082019050905061032052600061032051111561196757610300517001000000000000000000000000000000008082069050905061034052610180511561191857600060046103c0527fa9059cbb000000000000000000000000000000000000000000000000000000006103e0526103c060048060208461042001018260208501600060045af15050805182019150506102005160208261042001015260208101905061032051602082610420010152602081019050806104205261042090508051602001806104c08284600060045af16117fd57600080fd5b505060206105806104c0516104e06000610260515af161181c57600080fd5b60203d8082111561182d578061182f565b815b90509050610560526105608051602001806103608284600060045af161185457600080fd5b505060006103605118156118a65761036080602001516000825180602090131561187d57600080fd5b809190121561188b57600080fd5b806020036101000a820490509050905015156118a657600080fd5b60086102605160e05260c052604060c020805461032051808210156118ca57600080fd5b8082039050905081555061034051610320518181830110156118eb57600080fd5b80820190509050600d6101405160e05260c052604060c0206102605160e05260c052604060c02055611967565b60006102e051111561196757610340516103205160801b81818301101561193e57600080fd5b80820190509050600d6101405160e05260c052604060c0206102605160e05260c052604060c020555b8151600101808352811415611499575b50506101c051565b6101a05261014052610160526101805260065474010000000000000000000000000000000000000000808206905090508060a01c156119bd57600080fd5b8090506101c0526000610180511815611b3a576002546101e0526101405161016051610180516101a0516101c0516101e05161014051610200526101e0516102205260006102405260006102605261026051610240516102205161020051600658016112f3565b6101e0526101c0526101a05261018052610160526101405260005060016101405160e05260c052604060c020546101805180821015611a6257600080fd5b80820390509050610200526102005160016101405160e05260c052604060c020556101405161016051610180516101a0516101c0516101e0516102005161016051610220526101e0516102405260006102605260006102805261028051610260516102405161022051600658016112f3565b610200526101e0526101c0526101a05261018052610160526101405260005060016101605160e05260c052604060c0205461018051818183011015611b1857600080fd5b80820190509050610200526102005160016101605160e05260c052604060c020555b610180516101e05261016051610140517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206101e0a36101a05156

Block Transaction 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
[ 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.