Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 18 from a total of 18 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24086184 | 65 days ago | IN | 0.002 ETH | 0.00004806 | ||||
| Transfer | 24036053 | 72 days ago | IN | 0.005 ETH | 0.00004834 | ||||
| Transfer | 23836507 | 100 days ago | IN | 0.005 ETH | 0.00005002 | ||||
| Transfer | 23736450 | 114 days ago | IN | 0.005 ETH | 0.00005284 | ||||
| Transfer | 23636071 | 128 days ago | IN | 0.005 ETH | 0.00004975 | ||||
| Transfer | 23471173 | 152 days ago | IN | 0.005 ETH | 0.00004061 | ||||
| Transfer | 23332438 | 171 days ago | IN | 0.005 ETH | 0.00002886 | ||||
| Transfer | 23285327 | 177 days ago | IN | 0.005 ETH | 0.00003223 | ||||
| Transfer | 23056212 | 209 days ago | IN | 0.005 ETH | 0.00005398 | ||||
| Transfer | 22983686 | 220 days ago | IN | 0.005 ETH | 0.00006597 | ||||
| Transfer | 22835032 | 240 days ago | IN | 0.005 ETH | 0.00006394 | ||||
| Transfer | 22734283 | 254 days ago | IN | 0.005 ETH | 0.00003288 | ||||
| Transfer | 22583095 | 276 days ago | IN | 0.005 ETH | 0.00007431 | ||||
| Transfer | 22435301 | 296 days ago | IN | 0.005 ETH | 0.00002192 | ||||
| Transfer | 22333155 | 311 days ago | IN | 0.005 ETH | 0.00004933 | ||||
| Transfer | 22234877 | 324 days ago | IN | 0.005 ETH | 0.00002235 | ||||
| Transfer | 22034458 | 352 days ago | IN | 0.005 ETH | 0.00002504 | ||||
| Transfer | 19062431 | 768 days ago | IN | 0.015 ETH | 0.00033732 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Bridge | 24537402 | 2 days ago | 0.00200235 ETH | ||||
| Transfer | 24537402 | 2 days ago | 0.00200235 ETH | ||||
| Bridge | 24487209 | 9 days ago | 0.00200036 ETH | ||||
| Transfer | 24487209 | 9 days ago | 0.00200036 ETH | ||||
| Bridge | 24437023 | 16 days ago | 0.00200036 ETH | ||||
| Transfer | 24437023 | 16 days ago | 0.00200036 ETH | ||||
| Bridge | 24386983 | 23 days ago | 0.00200104 ETH | ||||
| Transfer | 24386983 | 23 days ago | 0.00200104 ETH | ||||
| Bridge | 24336829 | 30 days ago | 0.00200077 ETH | ||||
| Transfer | 24336829 | 30 days ago | 0.00200077 ETH | ||||
| Bridge | 24286642 | 37 days ago | 0.0020003 ETH | ||||
| Transfer | 24286642 | 37 days ago | 0.0020003 ETH | ||||
| Bridge | 24236425 | 44 days ago | 0.00200042 ETH | ||||
| Transfer | 24236425 | 44 days ago | 0.00100133 ETH | ||||
| Bridge | 24186302 | 51 days ago | 0.00200026 ETH | ||||
| Bridge | 24136092 | 58 days ago | 0.00200042 ETH | ||||
| Bridge | 24085967 | 65 days ago | 0.00200022 ETH | ||||
| Bridge | 24036052 | 72 days ago | 0.00200031 ETH | ||||
| Transfer | 24036052 | 72 days ago | 0.00022456 ETH | ||||
| Bridge | 23985759 | 79 days ago | 0.00200102 ETH | ||||
| Bridge | 23936444 | 86 days ago | 0.00200018 ETH | ||||
| Bridge | 23886421 | 93 days ago | 0.00200046 ETH | ||||
| Bridge | 23836574 | 100 days ago | 0.00200156 ETH | ||||
| Bridge | 23786609 | 107 days ago | 0.00200055 ETH | ||||
| Bridge | 23736565 | 114 days ago | 0.00200327 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Minimal Proxy Contract for 0x9336da074c4f585a8b59a8c2b77a32b630cde5a1
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.1
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
API[{"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"}]}]Loading...
Loading
Loading...
Loading
Net Worth in USD
$6,642.56
Net Worth in ETH
3.402652
Token Allocations
AIRENA
82.51%
ARB
17.30%
CRVUSD
0.19%
Multichain Portfolio | 33 Chains
Loading...
Loading
Loading...
Loading
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.