Contract 0x988174f4AB5ad41E1313F1b07877dFe4A78CE5F2 6

 

Contract Overview

Balance:
0 ETH

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xc1742d35b3cf9d83d543a007c3035487785ae81b8803657d3e9a97024f7baf19Approve1080297672023-08-10 9:05:11120 days 9 hrs ago0x3e3672b23eb22946a31263d2d178bf0fb1f4bbfd IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000273245020.0000006
0x545cdf2f4c788d961379a29563430a9d06c19d5667b704bb5b6fed5699a27d66Approve1020724652023-05-27 15:32:21195 days 3 hrs ago0xac14ab742dfc62cc353aab1892b54a0c9fdc3ba0 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001128196650.001
0x738432f5da7fd5cd653ca0b3fc6ae026989f2d6f45fc37dc90de5da6662d7003Approve907919542023-04-15 15:36:00237 days 3 hrs ago0x1091fb53079f123e823859919e9f7be919b754e9 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001143091570.001
0x6b528b6b8f4d3622cd149beb8b8d79b59a50333e93a3d8eea7e83480c522a608Approve907794652023-04-15 14:59:15237 days 3 hrs ago0x15fe8337a6e23629fa09dc6e0f8b041d681ec995 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001585000260.001
0x19fd6fdcadd49046fc8f3fac224acc54dced174b4d19e90ffe0463d2f64465e8Approve868452162023-04-06 10:59:51246 days 7 hrs ago0x6c97be81e861fa10fe217de87b7514173f4b6640 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001022029080.001
0x4267bdb4f25eaa2adddebbd3cc2bd823ec5eb3a26113b07a619d97a5135c220cUser_checkpoint865998962023-04-05 22:58:09246 days 19 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001216348390.0011
0x2e6de446ef31ccc69e5fd59aeb8785a266821b3489e642c04d7267d3fc6a79fdUser_checkpoint859220302023-04-03 18:47:30249 days 9 mins ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0002290655610.001035029
0x1e5a872f9790567484b61248ee29dc1d5fbfdbbed429e19f9e93fc70307ab9e9User_checkpoint857924582023-04-03 8:24:54249 days 10 hrs ago0xcac59f91e4536bc0e79ab816a5cd54e89f10433c IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000741411890.001
0x956e3bf734f5d4495b19c7fb091b995a2c169e6e574a28db1fc9efc04e995c55User_checkpoint847880612023-03-30 7:56:22253 days 11 hrs ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001094500020.001
0x55b57a794c26b477df87e302a557e4548bbb86492b94263eb70a1c452641dfe0Approve834726382023-03-24 20:24:21258 days 22 hrs ago0xcaa74debeae8b73de8a894e16ceef7625c69c7ff IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000988060510.001
0x078ac1cef938df069c7ae912520174dcfe88bd66a73f60cf3c73b13271cc1a09Approve834712042023-03-24 20:09:21258 days 22 hrs ago0x4753a05c87cf9e51c7f9f9917c9181bb7ebd0e5b IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.000111128810.001
0x76a9673cea2bd58e4c58f9927ac14b73840ab925197a79038de2b3819e989b59Approve833894132023-03-24 12:28:28259 days 6 hrs ago0x4334703b0b74e2045926f82f4158a103fce1df4f IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001394229470.001
0xfc322c2606ac2b701644d0d9dab0416736c63d8877a3bfab2575a1ae73cdb253Approve831150922023-03-23 8:33:22260 days 10 hrs ago 0xdcfa2df4d2f469f4c204b703391378731d16bc88 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000561490530.001
0x08fec4f6e8372a40c60e8e64514731b18a1a8d3affb8ce17c08aaa703dadd450Approve830641012023-03-23 3:21:44260 days 15 hrs ago0x6c97be81e861fa10fe217de87b7514173f4b6640 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000596969610.001
0x4d9cfbaa6991e245a5726aa5db3160cb90a75d8254b6f1f4d95d0506595c7aa4Approve830454792023-03-23 1:04:38260 days 17 hrs ago0xbdb21e816e455e1642dbe8cef6668a62e180657b IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000727115830.001
0x0d0ee627cec9322fcc0df03ec6aaca5ec0d3334be135033c8bf8e15652550662Approve827262642023-03-21 18:29:45262 days 27 mins ago0x72f8a4486fecae174da6d98c3c288587391b3fc3 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.000141441980.001
0x17f18e71e8aa2c875de1c81dc12d710b747832dbbb5663559057af2e3b7795eeUser_checkpoint822296362023-03-19 21:23:10263 days 21 hrs ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0000927276030.001
0x698f509b445da4980f57b8e19a85ac72ecf7ba74924b137667f41153040c60cbUser_checkpoint817381162023-03-17 21:52:28265 days 21 hrs ago0x6fe797a05359c9d91b1f85d418e2ed4ea6c65a8f IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0002355522650.0011
0x4ccaf76c9f0c67511eb6d5918c1f47d09c8d20cbf6f10f49b85f02d5591ca486User_checkpoint814225842023-03-16 14:50:20267 days 4 hrs ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001221450150.001
0x4507357653fdbbf207dc800814441a19044396a0b8e7c78be759b9b9a01857eaUser_checkpoint810746622023-03-15 11:43:16268 days 7 hrs ago0x1091fb53079f123e823859919e9f7be919b754e9 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001053168860.001024961
0x14c7918947b29e4fad2473668caf451131d3202fee29a7fcf2163c005d75daa3User_checkpoint809194542023-03-14 22:15:09268 days 20 hrs ago 0xdcfa2df4d2f469f4c204b703391378731d16bc88 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001103462450.001024961
0x7194f4be03a0a552c72d28e5032e3eee99c35154a6abb724bcac2f02673cfd5bUser_checkpoint808401882023-03-14 15:58:26269 days 2 hrs ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.000151757120.001
0xd222b973dce07d87d15a624eeee91f40fad7dc18546cf719e37067053c882232User_checkpoint808382592023-03-14 15:48:56269 days 3 hrs ago0x5275817b74021e97c980e95ede6bbac0d0d6f3a2 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001673540860.001
0xd0419c987c317635ead30a1f152f9fe9e66afb6a080e0a5c10b316864b0def4aUser_checkpoint808182092023-03-14 14:29:07269 days 4 hrs ago0xa4a146f706820e29c00f63f541193aae0399cfd6 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0001751976560.001
0x94db89bad6a714219c1e2012a799fee66145a5e02974dc03a948c14c55b72b8fApprove807957182023-03-14 12:58:40269 days 5 hrs ago0x827a931f423b1969afbb4cd86e5fbfe85ee78b15 IN  0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH0.0003111409840.001
[ 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 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xac8204a9d79ca87d192ea98a9381600642a66a5f0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20xb4bafc3d60662de362c0cb0f5e2de76603ea77d70 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b04 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b04 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xac8204a9d79ca87d192ea98a9381600642a66a5f0 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f20xb4bafc3d60662de362c0cb0f5e2de76603ea77d70 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0xbe7ca18470b4ab61741bc2dcad50b1d4052b6b040 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x274e94f03ac51779d14bd45af77c0e0e9d97cef90 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 0x55bba7755b77420d3d3c966440164f15a74f86960 ETH
0xe740109d6436878069e1f1f647a662b57299b3cacfd8f3bcf7d335845390cf821074614982023-07-28 5:22:53133 days 13 hrs ago 0x988174f4ab5ad41e1313f1b07877dfe4a78ce5f2 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.