ETH Price: $2,412.73 (-0.08%)

Contract

0x5C5480A5C90EAcb8f31028f0f0eA9a716d04028D
 

Overview

ETH Balance

0.005026575298194544 ETH

Eth Value

$12.13 (@ $2,412.73/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer208272292024-09-25 11:08:5910 days ago1727262539IN
0x5C5480A5...16d04028D
0.005 ETH0.0004766620.11827559
Transfer205816482024-08-22 4:05:3544 days ago1724299535IN
0x5C5480A5...16d04028D
0.01 ETH0.000035581.50187851
Transfer203484472024-07-20 14:49:4777 days ago1721486987IN
0x5C5480A5...16d04028D
0.01 ETH0.000129555.46789874
Transfer201775242024-06-26 18:02:35101 days ago1719424955IN
0x5C5480A5...16d04028D
0.01 ETH0.0002750511.60899901
Transfer195788162024-04-04 0:26:47184 days ago1712190407IN
0x5C5480A5...16d04028D
0.015 ETH0.0005399722.79057736

Latest 23 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
208813642024-10-03 0:20:472 days ago1727914847
0x5C5480A5...16d04028D
0.00203757 ETH
208311382024-09-26 0:15:359 days ago1727309735
0x5C5480A5...16d04028D
0.00212055 ETH
207810022024-09-19 0:17:1116 days ago1726705031
0x5C5480A5...16d04028D
0.00206663 ETH
207308902024-09-12 0:15:4723 days ago1726100147
0x5C5480A5...16d04028D
0.00201108 ETH
206807342024-09-05 0:14:2330 days ago1725495263
0x5C5480A5...16d04028D
0.00202155 ETH
206305882024-08-29 0:12:2337 days ago1724890343
0x5C5480A5...16d04028D
0.00200604 ETH
205807122024-08-22 0:56:5944 days ago1724288219
0x5C5480A5...16d04028D
0.00200636 ETH
205304502024-08-15 0:28:2351 days ago1723681703
0x5C5480A5...16d04028D
0.00201215 ETH
204802572024-08-08 0:23:2358 days ago1723076603
0x5C5480A5...16d04028D
0.00201138 ETH
204300032024-08-01 0:06:1165 days ago1722470771
0x5C5480A5...16d04028D
0.00203685 ETH
203799032024-07-25 0:12:5972 days ago1721866379
0x5C5480A5...16d04028D
0.00202154 ETH
203297802024-07-18 0:18:2379 days ago1721261903
0x5C5480A5...16d04028D
0.00203255 ETH
202796162024-07-11 0:15:3586 days ago1720656935
0x5C5480A5...16d04028D
0.00201971 ETH
202294952024-07-04 0:13:4793 days ago1720052027
0x5C5480A5...16d04028D
0.00202305 ETH
201793352024-06-27 0:07:11100 days ago1719446831
0x5C5480A5...16d04028D
0.00202573 ETH
201293522024-06-20 0:25:35107 days ago1718843135
0x5C5480A5...16d04028D
0.00203646 ETH
200792842024-06-13 0:20:11114 days ago1718238011
0x5C5480A5...16d04028D
0.00205785 ETH
200291962024-06-06 0:25:35121 days ago1717633535
0x5C5480A5...16d04028D
0.00213345 ETH
199790812024-05-30 0:27:23128 days ago1717028843
0x5C5480A5...16d04028D
0.00211577 ETH
199289162024-05-23 0:10:59135 days ago1716423059
0x5C5480A5...16d04028D
0.00206295 ETH
197787902024-05-02 0:12:59156 days ago1714608779
0x5C5480A5...16d04028D
0.00204227 ETH
197287432024-04-25 0:15:59163 days ago1714004159
0x5C5480A5...16d04028D
0.00207182 ETH
194787892024-03-20 22:08:59199 days ago1710972539  Contract Creation0 ETH
Loading...
Loading

Minimal Proxy Contract for 0x9336da074c4f585a8b59a8c2b77a32b630cde5a1

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.1

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.1
"""
@title Root Liquidity Gauge Implementation
@license MIT
@author Curve Finance
"""


interface Bridger:
    def cost() -> uint256: view
    def bridge(_token: address, _destination: address, _amount: uint256): payable

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

interface ERC20:
    def balanceOf(_account: address) -> uint256: view
    def approve(_account: address, _value: uint256): nonpayable
    def transfer(_to: address, _amount: uint256): nonpayable

interface GaugeController:
    def checkpoint_gauge(addr: address): nonpayable
    def gauge_relative_weight(addr: address, time: uint256) -> uint256: view

interface Factory:
    def get_bridger(_chain_id: uint256) -> address: view
    def owner() -> address: view

interface Minter:
    def mint(_gauge: address): nonpayable


struct InflationParams:
    rate: uint256
    finish_time: uint256


WEEK: constant(uint256) = 604800
YEAR: constant(uint256) = 86400 * 365
RATE_DENOMINATOR: constant(uint256) = 10 ** 18
RATE_REDUCTION_COEFFICIENT: constant(uint256) = 1189207115002721024  # 2 ** (1/4) * 1e18
RATE_REDUCTION_TIME: constant(uint256) = YEAR

CRV: immutable(address)
GAUGE_CONTROLLER: immutable(address)
MINTER: immutable(address)


chain_id: public(uint256)
bridger: public(address)
factory: public(address)
inflation_params: public(InflationParams)

last_period: public(uint256)
total_emissions: public(uint256)

is_killed: public(bool)


@external
def __init__(_crv_token: address, _gauge_controller: address, _minter: address):
    self.factory = 0x000000000000000000000000000000000000dEaD

    # assign immutable variables
    CRV = _crv_token
    GAUGE_CONTROLLER = _gauge_controller
    MINTER = _minter


@payable
@external
def __default__():
    pass


@external
def transmit_emissions():
    """
    @notice Mint any new emissions and transmit across to child gauge
    """
    assert msg.sender == self.factory  # dev: call via factory

    Minter(MINTER).mint(self)
    minted: uint256 = ERC20(CRV).balanceOf(self)

    assert minted != 0  # dev: nothing minted
    bridger: address = self.bridger

    Bridger(bridger).bridge(CRV, self, minted, value=Bridger(bridger).cost())


@view
@external
def integrate_fraction(_user: address) -> uint256:
    """
    @notice Query the total emissions `_user` is entitled to
    @dev Any value of `_user` other than the gauge address will return 0
    """
    if _user == self:
        return self.total_emissions
    return 0


@external
def user_checkpoint(_user: address) -> bool:
    """
    @notice Checkpoint the gauge updating total emissions
    @param _user Vestigal parameter with no impact on the function
    """
    # the last period we calculated emissions up to (but not including)
    last_period: uint256 = self.last_period
    # our current period (which we will calculate emissions up to)
    current_period: uint256 = block.timestamp / WEEK

    # only checkpoint if the current period is greater than the last period
    # last period is always less than or equal to current period and we only calculate
    # emissions up to current period (not including it)
    if last_period != current_period:
        # checkpoint the gauge filling in any missing weight data
        GaugeController(GAUGE_CONTROLLER).checkpoint_gauge(self)

        params: InflationParams = self.inflation_params
        emissions: uint256 = 0

        # only calculate emissions for at most 256 periods since the last checkpoint
        for i in range(last_period, last_period + 256):
            if i == current_period:
                # don't calculate emissions for the current period
                break
            period_time: uint256 = i * WEEK
            weight: uint256 = GaugeController(GAUGE_CONTROLLER).gauge_relative_weight(self, period_time)

            if period_time <= params.finish_time and params.finish_time < period_time + WEEK:
                # calculate with old rate
                emissions += weight * params.rate * (params.finish_time - period_time) / 10 ** 18
                # update rate
                params.rate = params.rate * RATE_DENOMINATOR / RATE_REDUCTION_COEFFICIENT
                # calculate with new rate
                emissions += weight * params.rate * (period_time + WEEK - params.finish_time) / 10 ** 18
                # update finish time
                params.finish_time += RATE_REDUCTION_TIME
                # update storage
                self.inflation_params = params
            else:
                emissions += weight * params.rate * WEEK / 10 ** 18

        self.last_period = current_period
        self.total_emissions += emissions

    return True


@external
def set_killed(_is_killed: bool):
    """
    @notice Set the gauge kill status
    @dev Inflation params are modified accordingly to disable/enable emissions
    """
    assert msg.sender == Factory(self.factory).owner()

    if _is_killed:
        self.inflation_params.rate = 0
    else:
        self.inflation_params = InflationParams({
            rate: CRV20(CRV).rate(),
            finish_time: CRV20(CRV).future_epoch_time_write()
        })
        self.last_period = block.timestamp / WEEK
    self.is_killed = _is_killed


@external
def update_bridger():
    """
    @notice Update the bridger used by this contract
    @dev Bridger contracts should prevent briding if ever updated
    """
    # reset approval
    bridger: address = Factory(self.factory).get_bridger(self.chain_id)
    ERC20(CRV).approve(self.bridger, 0)
    ERC20(CRV).approve(bridger, MAX_UINT256)
    self.bridger = bridger


@external
def initialize(_bridger: address, _chain_id: uint256):
    """
    @notice Proxy initialization method
    """
    assert self.factory == ZERO_ADDRESS  # dev: already initialized

    self.chain_id = _chain_id
    self.bridger = _bridger
    self.factory = msg.sender

    inflation_params: InflationParams = InflationParams({
        rate: CRV20(CRV).rate(),
        finish_time: CRV20(CRV).future_epoch_time_write()
    })
    assert inflation_params.rate != 0

    self.inflation_params = inflation_params
    self.last_period = block.timestamp / WEEK

    ERC20(CRV).approve(_bridger, MAX_UINT256)

Contract ABI

[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_crv_token","type":"address"},{"name":"_gauge_controller","type":"address"},{"name":"_minter","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"function","name":"transmit_emissions","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"integrate_fraction","inputs":[{"name":"_user","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"user_checkpoint","inputs":[{"name":"_user","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_killed","inputs":[{"name":"_is_killed","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_bridger","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initialize","inputs":[{"name":"_bridger","type":"address"},{"name":"_chain_id","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"chain_id","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"bridger","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"inflation_params","inputs":[],"outputs":[{"name":"","type":"tuple","components":[{"name":"rate","type":"uint256"},{"name":"finish_time","type":"uint256"}]}]},{"stateMutability":"view","type":"function","name":"last_period","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"total_emissions","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}]}]

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.