Contract 0x0728e3D57115604Ce604e35C2fa14215aecA881c 9

 

Contract Overview

Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xd14001883933bba8e57d3553ef157a98ade525a33a3dc44e99d55d6d95c15dacClaimable_tokens1082351802023-08-15 3:12:17115 days 15 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000480376620.101684636
0xbd92ac9cf08e7f47117c3bfe61df9d9a548ebca8c08384f87bc17d98fa2bc1f5User_checkpoint1082351532023-08-15 3:11:23115 days 16 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.000102537080.107209166
0xe2a744ab64f5256f075ef3180ffc73fc0f3b7e80e1423739085c920c9018dea7Emergency_withdr...1082343832023-08-15 2:45:43115 days 16 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000560926920.109447015
0xcddf176aa33784c6a6917943fc730c7b0853ebbca80ff8a29812ed7a7c368adcWithdraw1082343662023-08-15 2:45:09115 days 16 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001073076330.102227208
0x8b87192e917e640a2dc3147edeb31f4b1441dacf02644141733a7696acb0e74bWithdraw1082342632023-08-15 2:41:43115 days 16 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001161717580.109889015
0x32a6772a5faa48926f8c28f70ecc719b4ce94a84c1a94ff47f7f588451f17485Approve1066015632023-07-08 7:38:23153 days 11 hrs ago0xcabe02e51448e03a55a1da5540e8b07ca0835d97 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000225592810.000000081
0x24c2cd3763bebc8a2426fb8f3493bea354038c320bd68d8a4f165a4519876ef8Approve1041127632023-06-03 8:53:37188 days 10 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001035514110.001
0x61ac2cd583ada6626f45b13f85b4197427f824070e523cee546dab7f441af307Approve908098522023-04-15 16:31:17237 days 2 hrs ago0xbd7ea7c975cc23049ac31968c764af012ce45f58 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001249222070.001
0xdae12fd5e7f762ab6e5a4f78ce43d90bd2353e771b93d259f51eb83adc6596bdApprove907905902023-04-15 15:32:15237 days 3 hrs ago0xcac59f91e4536bc0e79ab816a5cd54e89f10433c IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001277127120.001
0x0be53ae8b40420d41291921d2b27fe022744191147f834073d381096b95e7f25Approve907825822023-04-15 15:08:15237 days 4 hrs ago0xb4c2e70f7b0e6175512aa5482d684a05a3935291 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001440723690.0012
0xa20781d4e849e05248b8b9e32fb5521ea1db270fcc516aeb6291673b62b05e5aApprove907807992023-04-15 15:02:45237 days 4 hrs ago0xe2557d2ff83726f92bc2a033c6bc5f1657158ada IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0002133355040.001
0x5484c13c1191c0ec4380218ab8d1b2b7b083db2f636ebe00a9d72192ca91ffe1Approve907764152023-04-15 14:51:00237 days 4 hrs ago0x9874f9b05b073771c7b98e192543fa2684e61246 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.000112037040.0011
0x8ec676640a512200a6ba26fa7afd6fa431f22b6f7a11a298843f354bf9116c42Approve904654522023-04-14 21:39:30237 days 21 hrs ago0xe2557d2ff83726f92bc2a033c6bc5f1657158ada IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001138671260.001
0xa16a1148b16b22cb002fbb447fda4ec11758a366f696fff84e214ce6aa057fc3Approve903491252023-04-14 14:41:18238 days 4 hrs ago0x9874f9b05b073771c7b98e192543fa2684e61246 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001197681370.001
0x546e1d265f92812519497f27e0a0fbc666a2169dbf42ba6c4114ed6a8181245bUser_checkpoint903362062023-04-14 14:05:47238 days 5 hrs ago0xcfd727653c3d5a1b943f675781d3245b884f1d34 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001294872510.001
0xbbda880991765b86f01f6b05b714a9bfd1e411b408c7cfb92994f48209f84758Approve873861322023-04-07 19:13:26244 days 23 hrs ago0xb4c2e70f7b0e6175512aa5482d684a05a3935291 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001241194550.0011
0x61fd5e722499cb08f750734b270d14143b31b77672a3d780237e0b6e086db4bdApprove866546682023-04-06 2:54:55246 days 16 hrs ago0x5388a7f24e86c9c9d855a98c2f5a339afa6a3acc IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001450398850.001
0x75c8c8398a9630c4b9fc96db6fc0f916d301a0cb2cf582ec0ece74a4f4f76eb4User_checkpoint853719092023-04-01 11:21:08251 days 7 hrs ago 0xdcfa2df4d2f469f4c204b703391378731d16bc88 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000745707250.001
0x9c4e2ec4cfca5f8a7d881f9e4e852b14a71054b65965715869110f609c99db9eApprove844536552023-03-29 1:37:05254 days 17 hrs ago0xbe9e8ec25866b21ba34e97b9393bcabbcb4a5c86 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000979150520.001
0xe24274d53cf35a59521b16186f406c74ebfde0c8be1a0ae51b3fdca37df7e848Approve836537962023-03-25 16:35:48258 days 2 hrs ago0x50b892173e93f7a98c299c0a5e1b6678593a2099 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000972626510.001
0xff56e66a475ecf8ebc2ea70316f6155cd6da3eae12e7a96023fdd58eaa898d3fApprove833707492023-03-24 11:13:06259 days 7 hrs ago0xaf1bff74708098db603e48aaebec1bbae03dcf11 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000656538280.001
0x281b58d76df33644e5b828761190864b56b28a7da9e00e16130f9b80ec7910e3Approve833183232023-03-24 7:00:17259 days 12 hrs ago0x44da7dcd75b9e628865ce607a7474f095e6a8d09 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0000674681130.001
0x4a6c2f1d3bcf2973281803878d53297baf84e485eb2d9cac0d256363c148201fUser_checkpoint809192682023-03-14 22:14:24268 days 20 hrs ago 0xdcfa2df4d2f469f4c204b703391378731d16bc88 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001103462450.001024961
0x040cada7f432c61f5051a8ccb9994c4ed8a0be904f172a8d1f50077fc584b6eaApprove809123052023-03-14 21:34:12268 days 21 hrs ago 0xdcfa2df4d2f469f4c204b703391378731d16bc88 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001379641820.001024961
0xbaae866dd6fb5a4ab7b427c2231d8ef01c0b8b87dbb67f2edb32633f09ab9976User_checkpoint809074762023-03-14 21:14:53268 days 21 hrs ago0xcfd727653c3d5a1b943f675781d3245b884f1d34 IN  0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH0.0001684240040.001024961
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b04 0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xac8204a9d79ca87d192ea98a9381600642a66a5f0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c0xb4bafc3d60662de362c0cb0f5e2de76603ea77d70 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b04 0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b04 0x0728e3d57115604ce604e35c2fa14215aeca881c0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xac8204a9d79ca87d192ea98a9381600642a66a5f0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c0xb4bafc3d60662de362c0cb0f5e2de76603ea77d70 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x0728e3d57115604ce604e35c2fa14215aeca881c 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
This contract matches the deployed ByteCode of the Source Code for Contract 0xa9f89108bb45c2805eea20021fe2205ce662fd02
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.15

Optimization Enabled:
N/A

Other Settings:
MIT license
# @version 0.2.15
"""
@title Liquidity Gauge v5
@author Hundred Finance (based on Curve Finance Liquidity Gauge v4)
@license MIT
"""

from vyper.interfaces import ERC20

implements: ERC20


interface RewardPolicyMaker:
    def future_epoch_time() -> uint256: nonpayable
    def rate_at(_timestamp: uint256, _token: address) -> uint256: view
    def epoch_at(_timestamp: uint256) -> uint256: view
    def epoch_start_time(_epoch: uint256) -> uint256: view

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

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

interface VotingEscrow:
    def user_last_checkpoint_ts(_user: address) -> uint256: view

interface VotingEscrowBoost:
    def adjusted_balance_of(_account: address) -> uint256: view

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


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

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

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

event UpdateLiquidityLimit:
    user: address
    original_balance: uint256
    original_supply: uint256
    working_balance: uint256
    working_supply: 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


TOKENLESS_PRODUCTION: constant(uint256) = 40
WEEK: constant(uint256) = 604800
MAX_TOKENS: constant(uint256) = 10

minter: public(address)
reward_policy_maker: public(address)
voting_escrow: public(address)
controller: public(address)
veboost_proxy: public(address)

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])
decimals: public(uint256)

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
# token -> inv supply value
integrate_inv_supply: public(HashMap[address, uint256[100000000000000000000000000000]])

# 1e18 * ∫(rate(t) / totalSupply(t) dt) from (last_action) till checkpoint
# token -> user -> inv supply value
integrate_inv_supply_of: public(HashMap[address, HashMap[address, uint256]])
# user -> checkpoint timestamp
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 and token to issue
# token -> user -> checkpoint value
integrate_fraction: public(HashMap[address, HashMap[address, uint256]])

admin: public(address)
future_admin: public(address)
is_killed: public(bool)


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

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

    controller: address = Minter(_minter).controller()

    self.lp_token = _lp_token
    self.minter = _minter
    self.admin = _admin
    self.reward_policy_maker = _reward_policy_maker
    self.controller = controller
    self.voting_escrow = Controller(controller).voting_escrow()

    self.period_timestamp[0] = block.timestamp
    self.veboost_proxy = _veboost_proxy


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


@internal
def _update_liquidity_limit(addr: address, l: uint256, L: uint256):
    """
    @notice Calculate limits which depend on the amount of HND token per-user.
            Effectively it calculates working balances to apply amplification
            of HND production by HND
    @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_balance: uint256 = VotingEscrowBoost(self.veboost_proxy).adjusted_balance_of(addr)
    voting_total: uint256 = ERC20(self.voting_escrow).totalSupply()

    lim: uint256 = l * TOKENLESS_PRODUCTION / 100
    if voting_total > 0:
        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_token(addr: address, token: address, period: int128, period_time: uint256):
    """
    @notice Checkpoint for a user
    @param addr User address
    @param token Reward token
    @param period Reward period id
    @param period_time Reward period timestamp
    """
    _integrate_inv_supply: uint256 = self.integrate_inv_supply[token][period]

    _epoch: uint256 = RewardPolicyMaker(self.reward_policy_maker).epoch_at(block.timestamp)

    # Update integral of 1/supply
    if block.timestamp > period_time and not self.is_killed:
        _working_supply: uint256 = self.working_supply
        _controller: address = self.controller

        prev_week_time: uint256 = period_time

        for i in range(500):
            _epoch = RewardPolicyMaker(self.reward_policy_maker).epoch_at(prev_week_time)
            week_time: uint256 = RewardPolicyMaker(self.reward_policy_maker).epoch_start_time(_epoch + 1)
            week_time = min(week_time, block.timestamp)

            dt: uint256 = week_time - prev_week_time
            w: uint256 = Controller(_controller).gauge_relative_weight(self, prev_week_time / WEEK * WEEK)

            if _working_supply > 0:
                _integrate_inv_supply += RewardPolicyMaker(self.reward_policy_maker).rate_at(prev_week_time, token) * 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

    self.integrate_inv_supply[token][period + 1] = _integrate_inv_supply

    # Update user-specific integrals
    _working_balance: uint256 = self.working_balances[addr]
    self.integrate_fraction[token][addr] += _working_balance * (_integrate_inv_supply - self.integrate_inv_supply_of[token][addr]) / 10 ** 18
    self.integrate_inv_supply_of[token][addr] = _integrate_inv_supply


@internal
def _checkpoint(addr: address):
    _token_count: uint256 = Minter(self.minter).token_count()
    _period: int128 = self.period
    _period_time: uint256 = self.period_timestamp[_period]

    if _period_time == 0:
        _epoch: uint256 = RewardPolicyMaker(self.reward_policy_maker).epoch_at(block.timestamp)
        _period_time = RewardPolicyMaker(self.reward_policy_maker).epoch_start_time(_epoch)

    if block.timestamp > _period_time and not self.is_killed:
        _controller: address = self.controller
        Controller(_controller).checkpoint_gauge(self)

    for i in range(MAX_TOKENS):
        if i == _token_count:
            break
        self._checkpoint_token(addr, Minter(self.minter).tokens(i), _period, _period_time)

    _period += 1
    self.period = _period
    self.period_timestamp[_period] = block.timestamp
    self.integrate_checkpoint_of[addr] = block.timestamp


@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)
    self._update_liquidity_limit(addr, self.balanceOf[addr], self.totalSupply)
    return True


@external
def claimable_tokens(addr: address, token: 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)
    return self.integrate_fraction[token][addr] - Minter(self.minter).minted(addr, self, token)


@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_last_checkpoint_ts(addr)
    _balance: uint256 = self.balanceOf[addr]

    assert ERC20(_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)
    self._update_liquidity_limit(addr, _balance, self.totalSupply)


@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
    """

    self._checkpoint(_addr)

    if _value != 0:
        total_supply: uint256 = self.totalSupply

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

        self._update_liquidity_limit(_addr, new_balance, total_supply)

        assert 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):
    """
    @notice Withdraw `_value` LP tokens
    @param _value Number of tokens to withdraw
    """
    self._checkpoint(msg.sender)

    if _value != 0:
        total_supply: uint256 = self.totalSupply

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

        self._update_liquidity_limit(msg.sender, new_balance, total_supply)

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

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


@external
@nonreentrant('lock')
def emergency_withdraw():
    """
    @notice Withdraw all user LP tokens
    """
    total_supply: uint256 = self.totalSupply
    user_balance: uint256 = self.balanceOf[msg.sender]

    assert user_balance > 0  # nothing to withdraw

    total_supply -= user_balance
    self.balanceOf[msg.sender] = 0
    self.totalSupply = total_supply

    self._update_liquidity_limit(msg.sender, 0, total_supply)

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

    log EmergencyWithdraw(msg.sender, user_balance)
    log Transfer(msg.sender, ZERO_ADDRESS, user_balance)


@internal
def _transfer(_from: address, _to: address, _value: uint256):
    self._checkpoint(_from)
    self._checkpoint(_to)

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

        new_balance = self.balanceOf[_to] + _value
        self.balanceOf[_to] = new_balance
        self._update_liquidity_limit(_to, new_balance, total_supply)

    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
def set_killed(_is_killed: bool):
    """
    @notice Set the killed status for this contract
    @dev When killed, the gauge always yields a rate of 0 and so cannot mint CRV
    @param _is_killed Killed status to set
    """
    assert msg.sender == self.admin

    self.is_killed = _is_killed


@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

[{"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":"EmergencyWithdraw","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"value","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateLiquidityLimit","inputs":[{"name":"user","type":"address","indexed":false},{"name":"original_balance","type":"uint256","indexed":false},{"name":"original_supply","type":"uint256","indexed":false},{"name":"working_balance","type":"uint256","indexed":false},{"name":"working_supply","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":"_lp_token","type":"address"},{"name":"_minter","type":"address"},{"name":"_admin","type":"address"},{"name":"_reward_policy_maker","type":"address"},{"name":"_veboost_proxy","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"integrate_checkpoint","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4530},{"stateMutability":"nonpayable","type":"function","name":"user_checkpoint","inputs":[{"name":"addr","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":179364616},{"stateMutability":"nonpayable","type":"function","name":"claimable_tokens","inputs":[{"name":"addr","type":"address"},{"name":"token","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":179275861},{"stateMutability":"nonpayable","type":"function","name":"kick","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":179374389},{"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":"withdraw","inputs":[{"name":"_value","type":"uint256"}],"outputs":[],"gas":179498446},{"stateMutability":"nonpayable","type":"function","name":"emergency_withdraw","inputs":[],"outputs":[],"gas":215049},{"stateMutability":"nonpayable","type":"function","name":"transfer","inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":717588157},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":717626107},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":38001},{"stateMutability":"nonpayable","type":"function","name":"increaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_added_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40545},{"stateMutability":"nonpayable","type":"function","name":"decreaseAllowance","inputs":[{"name":"_spender","type":"address"},{"name":"_subtracted_value","type":"uint256"}],"outputs":[{"name":"","type":"bool"}],"gas":40569},{"stateMutability":"nonpayable","type":"function","name":"set_killed","inputs":[{"name":"_is_killed","type":"bool"}],"outputs":[],"gas":37905},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"addr","type":"address"}],"outputs":[],"gas":39285},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[],"gas":39230},{"stateMutability":"view","type":"function","name":"minter","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2838},{"stateMutability":"view","type":"function","name":"reward_policy_maker","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2868},{"stateMutability":"view","type":"function","name":"voting_escrow","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2898},{"stateMutability":"view","type":"function","name":"controller","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2928},{"stateMutability":"view","type":"function","name":"veboost_proxy","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2958},{"stateMutability":"view","type":"function","name":"lp_token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":2988},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3233},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3048},{"stateMutability":"view","type":"function","name":"allowance","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3508},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":13338},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}],"gas":11091},{"stateMutability":"view","type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3168},{"stateMutability":"view","type":"function","name":"working_balances","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3413},{"stateMutability":"view","type":"function","name":"working_supply","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3228},{"stateMutability":"view","type":"function","name":"period","inputs":[],"outputs":[{"name":"","type":"int128"}],"gas":3258},{"stateMutability":"view","type":"function","name":"period_timestamp","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3333},{"stateMutability":"view","type":"function","name":"integrate_inv_supply","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3578},{"stateMutability":"view","type":"function","name":"integrate_inv_supply_of","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3778},{"stateMutability":"view","type":"function","name":"integrate_checkpoint_of","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3593},{"stateMutability":"view","type":"function","name":"integrate_fraction","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3838},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3438},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3468},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":3498}]

60a0611edb610140396020611edb60c03960c05160a01c611ed65760206020611edb0160c03960c05160a01c611ed65760206040611edb0160c03960c05160a01c611ed65760206060611edb0160c03960c05160a01c611ed65760206080611edb0160c03960c05160a01c611ed65760606102a060046395d89b416102405261025c610140515afa15611ed657603f3d1115611ed657601b6102a06102a05101511015611ed6576000506102c08051602001806101e08284600060045af115611ed657505060006101e0601a806020846102a001018260208501600060045af1505080518201915050600e610240527f204761756765204465706f73697400000000000000000000000000000000000061026052610240600e806020846102a001018260208501600060045af1505080518201915050806102a0526102a0905080600e602082510161012060006003818352015b8261012051602002111561016657610188565b61012051602002850151610120518501555b8151600101808352811415610153575b50505050505060006101e0601a806020846102a001018260208501600060045af15050805182019150506006610240527f2d67617567650000000000000000000000000000000000000000000000000000610260526102406006806020846102a001018260208501600060045af1505080518201915050806102a0526102a09050806012602082510161012060006002818352015b8261012051602002111561023057610252565b61012051602002850151610120518501555b815160010180835281141561021d575b50505050505060206102a0600463313ce5676102405261025c610140515afa15611ed657601f3d1115611ed6576000506102a05160155560206102c0600463f77c47916102605261027c610160515afa15611ed657601f3d1115611ed6576000506102c0516102405261014051600a5561016051600555610180516c01431e0fae6d7210000000001d556101a0516006556102405160085560206102c0600463dfe050316102605261027c610240515afa15611ed657601f3d1115611ed6576000506102c051600755426019556101c051600955611ebe56600436101561000d576110b5565b600035601c5260005134611b8e5763d31f3f6d81141561004f5760016018546c01431e0fae6d7217caa0000000811015611b8e57026019015460005260206000f35b634b8200938114156100df5760043560a01c611b8e5760043533141561007657600161007c565b60055433145b5b15611b8e576004356101405261014051600658016116ca565b60005060043561014052600b60043560e05260c052604060c0205461016052600c5461018052610180516101605161014051600658016110bb565b600050600160005260206000f35b63ebd542a28114156101985760043560a01c611b8e5760243560a01c611b8e576004356101405261014051600658016116ca565b6000506c01431e0fae6d7210000000001c60243560e05260c052604060c02060043560e05260c052604060c02054602061020060646311dd5f98610140526004356101605230610180526024356101a05261015c6005545afa15611b8e57601f3d1115611b8e5760005061020051808210611b8e578082039050905060005260206000f35b6396c551758114156103385760043560a01c611b8e57600754610140526c01431e0fae6d7210000000001b60043560e05260c052604060c0205461016052602061022060246380c0e83e6101a0526004356101c0526101bc610140515afa15611b8e57601f3d1115611b8e576000506102205161018052600b60043560e05260c052604060c020546101a05260206102e060246370a08231610260526004356102805261027c610140515afa15611b8e57601f3d1115611b8e576000506102e05161026457600161026e565b6101605161018051115b5b15611b8e576101a0516028808202821582848304141715611b8e5780905090509050606480820490509050601660043560e05260c052604060c020541115611b8e576101405161016051610180516101a0516004356101c0526101c051600658016116ca565b6101a0526101805261016052610140526000506101405161016051610180516101a0516004356101c0526101a0516101e052600c5461020052610200516101e0516101c051600658016110bb565b6101a052610180526101605261014052600050005b63b6b55f2581141561034e573361014052610379565b636e553f658114156103745760243560a01c611b8e576020602461014037600050610379565b610513565b600054611b8e57600160005561014051610140516101605261016051600658016116ca565b61014052600050600060043518156104a657600c546101605261016080516004358181830110611b8e5780820190509050815250600b6101405160e05260c052604060c020546004358181830110611b8e57808201905090506101805261018051600b6101405160e05260c052604060c0205561016051600c55610140516101605161018051610140516101a052610180516101c052610160516101e0526101e0516101c0516101a051600658016110bb565b610180526101605261014052600050602061026060646323b872dd6101a052336101c052306101e052600435610200526101bc6000600a545af115611b8e57601f3d1115611b8e576000506102605115611b8e575b60043561016052610140517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c6020610160a2600435610160526101405160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610160a36000600055005b632e1a7d4d81141561068957600154611b8e576001600155336101405261014051600658016116ca565b6000506000600435181561062257600c54610140526101408051600435808210611b8e5780820390509050815250600b3360e05260c052604060c02054600435808210611b8e57808203905090506101605261016051600b3360e05260c052604060c0205561014051600c5561014051610160513361018052610160516101a052610140516101c0526101c0516101a05161018051600658016110bb565b61016052610140526000506020610220604463a9059cbb61018052336101a0526004356101c05261019c6000600a545af115611b8e57601f3d1115611b8e57600050610220505b60043561014052337f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243646020610140a2600435610140526000337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610140a36000600155005b63cbc1cfd28114156107d957600254611b8e576001600255600c5461014052600b3360e05260c052604060c02054610160526000610160511115611b8e57610140805161016051808210611b8e57808203905090508152506000600b3360e05260c052604060c0205561014051600c556101405161016051336101805260006101a052610140516101c0526101c0516101a05161018051600658016110bb565b61016052610140526000506020610220604463a9059cbb61018052336101a052610160516101c05261019c6000600a545af115611b8e57601f3d1115611b8e57600050610220506101605161018052337f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96956020610180a261016051610180526000337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020610180a36000600255005b63a9059cbb81141561083657600354611b8e57600160035560043560a01c611b8e57336101405260043561016052602435610180526101805161016051610140516006580161197f565b6000506001600052600060035560206000f35b6323b872dd81141561092657600454611b8e57600160045560043560a01c611b8e5760243560a01c611b8e57600d60043560e05260c052604060c0203360e05260c052604060c02054610140527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101405118156108e15761014051604435808210611b8e5780820390509050600d60043560e05260c052604060c0203360e05260c052604060c020555b6101405160043561016052602435610180526044356101a0526101a05161018051610160516006580161197f565b610140526000506001600052600060045560206000f35b63095ea7b38114156109995760043560a01c611b8e57602435600d3360e05260c052604060c02060043560e05260c052604060c0205560243561014052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610140a3600160005260206000f35b6339509351811415610a425760043560a01c611b8e57600d3360e05260c052604060c02060043560e05260c052604060c020546024358181830110611b8e57808201905090506101405261014051600d3360e05260c052604060c02060043560e05260c052604060c020556101405161016052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610160a3600160005260206000f35b63a457c2d7811415610ae95760043560a01c611b8e57600d3360e05260c052604060c02060043560e05260c052604060c02054602435808210611b8e57808203905090506101405261014051600d3360e05260c052604060c02060043560e05260c052604060c020556101405161016052600435337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020610160a3600160005260206000f35b6390b22997811415610b295760043560011c611b8e576c01431e0fae6d7210000000001d54331415611b8e576004356c01431e0fae6d7210000000001f55005b636b441a40811415610b975760043560a01c611b8e576c01431e0fae6d7210000000001d54331415611b8e576004356c01431e0fae6d7210000000001e55600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b63e5ea47b8811415610c05576c01431e0fae6d7210000000001e546101405261014051331415611b8e57610140516c01431e0fae6d7210000000001d5561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6307546172811415610c1d5760055460005260206000f35b63a36b3133811415610c355760065460005260206000f35b63dfe05031811415610c4d5760075460005260206000f35b63f77c4791811415610c655760085460005260206000f35b6349ec3b3f811415610c7d5760095460005260206000f35b6382c63066811415610c9557600a5460005260206000f35b6370a08231811415610cc55760043560a01c611b8e57600b60043560e05260c052604060c0205460005260206000f35b6318160ddd811415610cdd57600c5460005260206000f35b63dd62ed3e811415610d255760043560a01c611b8e5760243560a01c611b8e57600d60043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b6306fdde03811415610dc257600e80610180602082540161012060006003818352015b82610120516020021115610d5b57610d7d565b61012051850154610120516020028501525b8151600101808352811415610d48575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b6395d89b41811415610e5f57601280610180602082540161012060006002818352015b82610120516020021115610df857610e1a565b61012051850154610120516020028501525b8151600101808352811415610de5575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f35b63313ce567811415610e775760155460005260206000f35b6313ecb1ca811415610ea75760043560a01c611b8e57601660043560e05260c052604060c0205460005260206000f35b6317e28089811415610ebf5760175460005260206000f35b63ef78d4fd811415610ed75760185460005260206000f35b637598108c811415610f0b5760016004356c01431e0fae6d7217caa0000000811015611b8e57026019015460005260206000f35b6346ceff1f811415610f635760043560a01c611b8e5760016024356c01431e0fae6d7217caa0000000811015611b8e57026c01431e0fae6d7210000000001960043560e05260c052604060c020015460005260206000f35b63b3852bb8811415610fb75760043560a01c611b8e5760243560a01c611b8e576c01431e0fae6d7210000000001a60043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b639bd324f2811415610ff35760043560a01c611b8e576c01431e0fae6d7210000000001b60043560e05260c052604060c0205460005260206000f35b630291c34a8114156110475760043560a01c611b8e5760243560a01c611b8e576c01431e0fae6d7210000000001c60043560e05260c052604060c02060243560e05260c052604060c0205460005260206000f35b63f851a44081141561106b576c01431e0fae6d7210000000001d5460005260206000f35b6317f7182a81141561108f576c01431e0fae6d7210000000001e5460005260206000f35b639c868ac08114156110b3576c01431e0fae6d7210000000001f5460005260206000f35b505b60006000fd5b6101a0526101405261016052610180526020610260602463bbf7408a6101e05261014051610200526101fc6009545afa15611b8e57601f3d1115611b8e57600050610260516101c052602061026060046318160ddd6102005261021c6007545afa15611b8e57601f3d1115611b8e57600050610260516101e052610160516028808202821582848304141715611b8e57809050905090506064808204905090506102005260006101e05111156111d6576102008051610180516101c051808202821582848304141715611b8e57809050905090506101e051808015611b8e57820490509050603c808202821582848304141715611b8e57809050905090506064808204905090508181830110611b8e57808201905090508152505b6101605161020051808211156111ec57806111ee565b815b905090506102005260166101405160e05260c052604060c02054610220526102005160166101405160e05260c052604060c02055601754610200518181830110611b8e578082019050905061022051808210611b8e5780820390509050610240526102405160175561014051610260526101605161028052610180516102a052610200516102c052610240516102e0527f7ecd84343f76a23d2227290e0288da3251b045541698e575a5515af4f04197a360a0610260a16101a051565b6101c0526101405261016052610180526101a0526001610180516c01431e0fae6d7217caa0000000811015611b8e57026c01431e0fae6d721000000000196101605160e05260c052604060c02001546101e05260206102a06024639a1586ef61022052426102405261023c6006545afa15611b8e57601f3d1115611b8e576000506102a051610200526101a051421115611354576c01431e0fae6d7210000000001f5415611357565b60005b156115745760175461022052600854610240526101a0516102605261028060006101f4818352015b60206103206024639a1586ef6102a052610260516102c0526102bc6006545afa15611b8e57601f3d1115611b8e576000506103205161020052602061034060246322026ada6102c0526102005160018181830110611b8e57808201905090506102e0526102dc6006545afa15611b8e57601f3d1115611b8e57600050610340516102a0526102a05142808211156114165780611418565b815b905090506102a0526102a05161026051808210611b8e57808203905090506102c05260206103a0604463d3078c946103005230610320526102605162093a808082049050905062093a80808202821582848304141715611b8e57809050905090506103405261031c610240515afa15611b8e57601f3d1115611b8e576000506103a0516102e0526000610220511115611548576101e0805160206103a060446337e5a51d610300526102605161032052610160516103405261031c6006545afa15611b8e57601f3d1115611b8e576000506103a0516102e051808202821582848304141715611b8e57809050905090506102c051808202821582848304141715611b8e578090509050905061022051808015611b8e578204905090508181830110611b8e57808201905090508152505b426102a051141561155857611571565b6102a051610260525b815160010180835281141561137f575b50505b6101e05160016101805160018082018080600081121561159057195b607f1c611b8e579050905090506c01431e0fae6d7217caa0000000811015611b8e57026c01431e0fae6d721000000000196101605160e05260c052604060c020015560166101405160e05260c052604060c02054610220526c01431e0fae6d7210000000001c6101605160e05260c052604060c0206101405160e05260c052604060c0208054610220516101e0516c01431e0fae6d7210000000001a6101605160e05260c052604060c0206101405160e05260c052604060c02054808210611b8e5780820390509050808202821582848304141715611b8e5780905090509050670de0b6b3a7640000808204905090508181830110611b8e57808201905090508155506101e0516c01431e0fae6d7210000000001a6101605160e05260c052604060c0206101405160e05260c052604060c020556101c051565b6101605261014052602061020060046323b161ab6101a0526101bc6005545afa15611b8e57601f3d1115611b8e5760005061020051610180526018546101a05260016101a0516c01431e0fae6d7217caa0000000811015611b8e5702601901546101c0526101c0516117a65760206102806024639a1586ef61020052426102205261021c6006545afa15611b8e57601f3d1115611b8e57600050610280516101e052602061028060246322026ada610200526101e0516102205261021c6006545afa15611b8e57601f3d1115611b8e57600050610280516101c0525b6101c0514211156117c6576c01431e0fae6d7210000000001f54156117c9565b60005b15611804576008546101e0526101e0513b15611b8e5760006000602463615e523761020052306102205261021c60006101e0515af115611b8e575b6101e06000600a818352015b610180516101e051141561182357611909565b60206102806024634f64b2be610200526101e0516102205261021c6005545afa15611b8e57601f3d1115611b8e57600050610280516102a0526101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a051610140516102c0526102a0516102e0526101a051610300526101c0516103205261032051610300516102e0516102c051600658016112ab565b6102a05261028052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526000505b8151600101808352811415611810575b50506101a0805160018082018080600081121561192257195b607f1c611b8e579050905090508152506101a0516018554260016101a0516c01431e0fae6d7217caa0000000811015611b8e570260190155426c01431e0fae6d7210000000001b6101405160e05260c052604060c0205561016051565b6101a0526101405261016052610180526101405161016051610180516101a051610140516101c0526101c051600658016116ca565b6101a0526101805261016052610140526000506101405161016051610180516101a051610160516101c0526101c051600658016116ca565b6101a0526101805261016052610140526000506000610180511815611b5157600c546101c052600b6101405160e05260c052604060c0205461018051808210611b8e57808203905090506101e0526101e051600b6101405160e05260c052604060c020556101405161016051610180516101a0516101c0516101e05161014051610200526101e051610220526101c05161024052610240516102205161020051600658016110bb565b6101e0526101c0526101a052610180526101605261014052600050600b6101605160e05260c052604060c02054610180518181830110611b8e57808201905090506101e0526101e051600b6101605160e05260c052604060c020556101405161016051610180516101a0516101c0516101e05161016051610200526101e051610220526101c05161024052610240516102205161020051600658016110bb565b6101e0526101c0526101a0526101805261016052610140526000505b610180516101c05261016051610140517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206101c0a36101a051565b600080fd5b61032b611ebe0361032b60003961032b611ebe036000f35b600080fd000000000000000000000000b994b84bd13f7c8dd3af5bee9dfac68436dcf5bd000000000000000000000000be7ca18470b4ab61741bc2dcad50b1d4052b6b04000000000000000000000000641f26c67a5d0829ae61019131093b6a7c7d18a3000000000000000000000000274e94f03ac51779d14bd45af77c0e0e9d97cef9000000000000000000000000b4bafc3d60662de362c0cb0f5e2de76603ea77d7

Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.