Contract 0x18cef75c2b032d7060e9cf96f29adf74a9a17ce6 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf75fbd3e71d399d074c147069f97460bb04de2ab1dc2d895b2ced6667bcc1d94Claim195695072021-10-20 7:26:231 hr 58 mins ago0xce6c0bd926a76d715c829be4965ad064447d754f IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.013584255974
0xd48c52d43af00e1d2ce5f7b2c063c972d2154a376a83fad2fef3737f7454eb1aClaim195659982021-10-20 6:26:482 hrs 58 mins ago0x7d54d807e9132fc34acde66de49b36d4f37e8e0c IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.026505887188
0x49df19c37ea2bc180323f745312b591430429bf296220b1991cb88094330123aClaim195656422021-10-20 6:20:403 hrs 4 mins ago0xf289ac45955f9c09256c2897805fa243d65d5501 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.025905963431
0x08379adcbdd940175ce109550c6bddcafaf9ab6e275039587d1cda1730618088Claim195649222021-10-20 6:07:353 hrs 17 mins ago0x6fcb9fc81521bfb2ea7fdc7ba23c3a8c685b59e2 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.015186215754
0x5842345eb67b6ac48d24b2e3ba7ac22b223a713b695e55794bfdf6d5112d68bdClaim195635082021-10-20 5:43:273 hrs 41 mins ago0x63a0d7e22b67b952f13836f2f48a037253bc9ee7 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.008486887033
0xf22b3f7c74d3c2f02896872232fd439557c864ff966e49fe9dcc3739ffe7b615Claim195634972021-10-20 5:43:143 hrs 41 mins ago0x63a0d7e22b67b952f13836f2f48a037253bc9ee7 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.018756026747
0x745fe9a5b3872875206d463b34597e9ef2c666c22810b89b667980bac37f8acdClaim195630032021-10-20 5:35:383 hrs 49 mins ago0x48f15be32e417ef481fe4e6826dd90914408a1be IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.058964329795
0xdffb2dcdcc9ec98d2e399eef035e9c02d21ed2fa0048b223e0014f9a475818aeClaim195623382021-10-20 5:23:184 hrs 1 min ago0x97a44db29c9046b7e286898a3bb06c54bc33bb37 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.015576853459
0x16a0ee8d0ab9e866700043e6e9cdf2b805e6d73db6cae58ae959ee6a0c39ae49Claim195623312021-10-20 5:23:024 hrs 1 min ago0x0801b9a849e12740f360a0826d7d1037d1fb0af3 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.012917567959
0xb16058486e467b323928acdd8d611ca78559e8580d13e6bba84465d629f5f1d5Claim195614192021-10-20 5:03:504 hrs 21 mins ago0x4d8829cf818375e87e1c1375c94cd28a7961a17e IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.028009856957
0xdf0d639cc5d234dcbe7931352cd062f798d9f49b15d866550009fd291b9e1b84Claim195606282021-10-20 4:48:534 hrs 36 mins ago0x23265a447778f0e7b0d2026321e2e4aa6133ee99 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.014411033583
0xb21edcf7e1d2badea46be26d4d03b45fb0691020d62d41afe3d090635d781b76Claim195600362021-10-20 4:35:514 hrs 49 mins ago0x5d10c3f7d368bc12116430a81bf8d8c504295c19 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.017838547537
0x51a5ae5c85b5cccb52783e2e81d88110ac65332b7e6acb8c3ef9227ee7e53b86Claim195583642021-10-20 4:06:215 hrs 18 mins ago0xe8d278121e9b1aa454fff66300e8627be790e89c IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.009197813755
0x4c0b951637a0e85cd69e5e9357881d2680400aa36a1d00af870fbd6140539fc6Claim195573532021-10-20 3:49:375 hrs 35 mins ago0x252e318ef7f8e7009cc9c47d26170d9a5b353e06 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.020566644488
0x9b46132acd80a2d0eb7d3f403117eee3c03eb0a9b10ecbdcbb93e9c8bbb9ec46Claim195527242021-10-20 2:30:276 hrs 54 mins ago0x2133dbc11d810c1cb52cf565349e08b8df277569 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.01483209774
0xdea3485c115fc75d2ebaec9c8a6c9a964620c8a64786a70c3ab0b1404c37246dClaim195524532021-10-20 2:25:496 hrs 59 mins ago0x137a48f028be804425428cdd1591675a583235e0 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.024879963459
0x5ae7a47d5c3bb25c46c4240ff6f5538122df717ac3b3d4aba1142db8cdfff3a8Claim195511432021-10-20 2:05:447 hrs 19 mins ago0x74878e309da0767f9f602e4256eb9bae33c373fe IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.027277654452
0xf037b72fa623001db46e9a5f6c846f914c11c02716bc7fda93cb779d1f6fb257Claim195494372021-10-20 1:38:027 hrs 46 mins ago0xc8212a8f7a397f4e363fe5554fdd0f542e4fde3f IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.012212694635
0xbf59816ed204e5069b096c6bcd5a273953f2d2d719268941adc3f0b5f147039cClaim195490342021-10-20 1:31:147 hrs 53 mins ago0x098f3969a802a9e40b53ca8a1e9eac5c45841e8e IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.028606169635
0xe2ef888957d26062aecc275abeea7c1a6e5c29b5f5922dce0933c67ebf7193c7Claim195489542021-10-20 1:29:547 hrs 55 mins ago0x2eaacaf1468f248483cec65254dff98ff95e3387 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.010283701662
0x3fbdd3c22c7431a340a53401c613a13771253d5aa1b719bd5b4487c64e6874e3Claim195488932021-10-20 1:28:447 hrs 56 mins ago0x02bee0a17903cc1f2f48b4514ec23aae547fe4a3 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.017443181353
0x752f35592a4a1f0c88a5dadea2ac2abc353da96c9e8ec5b63debe9dd9750cfa7Claim195475472021-10-20 1:07:388 hrs 17 mins ago0xfb5fcc25527491d3d3a55d1fab273d32af554bff IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.013206229226
0x3cf08c2a093bb9d68b5ed4d76c00a2dba5d0ddf1538d1700e801611851daf41dClaim195474522021-10-20 1:06:068 hrs 18 mins ago0x48e81c9ebf4f19b36c248d16b0ffddd284399ccb IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.011471521701
0x761c9b51e8852cadb2f052e564495670a85d7e5b8d2d26ef9e0b819005ecbbd8Claim195473232021-10-20 1:03:568 hrs 20 mins ago0x6d18a32e462ecf1283a17094a9e87dde01097d65 IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.015835826159
0x6dba012af2e4c3307e55d40ada3e4afe91cb91f7fb26d5a8c6fc27388db554c9Claim195409552021-10-19 23:09:5110 hrs 15 mins ago0x8d28f3e9fb456f046d5e66b82f8a618b0f65e68b IN  0x18cef75c2b032d7060e9cf96f29adf74a9a17ce60 FTM0.018187528977
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x32b9a7957914154a6c30ee01285e87ef9bd305514ccd2bb99db9f5fbb5f015cc155450882021-08-26 5:23:4955 days 4 hrs ago 0x89abcd47da1adcc90aa02b775c5d720cb3b88ca5  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x3fe68cb7dd625bc325c1bd62676e487d424ec3d8

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.8

Optimization Enabled:
N/A

Other Settings:
, None license

Contract Source Code (Vyper language format)

# @version 0.2.8
"""
@title Curve Fee Distribution
@author Curve Finance
@license MIT
"""

from vyper.interfaces import ERC20


interface VotingEscrow:
    def user_point_epoch(addr: address) -> uint256: view
    def epoch() -> uint256: view
    def user_point_history(addr: address, loc: uint256) -> Point: view
    def point_history(loc: uint256) -> Point: view
    def checkpoint(): nonpayable


event CommitAdmin:
    admin: address

event ApplyAdmin:
    admin: address

event ToggleAllowCheckpointToken:
    toggle_flag: bool

event CheckpointToken:
    time: uint256
    tokens: uint256

event Claimed:
    recipient: indexed(address)
    amount: uint256
    claim_epoch: uint256
    max_epoch: uint256


struct Point:
    bias: int128
    slope: int128  # - dweight / dt
    ts: uint256
    blk: uint256  # block


WEEK: constant(uint256) = 7 * 86400
TOKEN_CHECKPOINT_DEADLINE: constant(uint256) = 86400

start_time: public(uint256)
time_cursor: public(uint256)
time_cursor_of: public(HashMap[address, uint256])
user_epoch_of: public(HashMap[address, uint256])

last_token_time: public(uint256)
tokens_per_week: public(uint256[1000000000000000])

voting_escrow: public(address)
token: public(address)
total_received: public(uint256)
token_last_balance: public(uint256)

ve_supply: public(uint256[1000000000000000])  # VE total supply at week bounds

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


@external
def __init__(
    _voting_escrow: address,
    _start_time: uint256,
    _token: address,
    _admin: address,
    _emergency_return: address
):
    """
    @notice Contract constructor
    @param _voting_escrow VotingEscrow contract address
    @param _start_time Epoch time for fee distribution to start
    @param _token Fee token address (3CRV)
    @param _admin Admin address
    @param _emergency_return Address to transfer `_token` balance to
                             if this contract is killed
    """
    t: uint256 = _start_time / WEEK * WEEK
    self.start_time = t
    self.last_token_time = t
    self.time_cursor = t
    self.token = _token
    self.voting_escrow = _voting_escrow
    self.admin = _admin
    self.emergency_return = _emergency_return


@internal
def _checkpoint_token():
    token_balance: uint256 = ERC20(self.token).balanceOf(self)
    to_distribute: uint256 = token_balance - self.token_last_balance
    self.token_last_balance = token_balance

    t: uint256 = self.last_token_time
    since_last: uint256 = block.timestamp - t
    self.last_token_time = block.timestamp
    this_week: uint256 = t / WEEK * WEEK
    next_week: uint256 = 0

    for i in range(20):
        next_week = this_week + WEEK
        if block.timestamp < next_week:
            if since_last == 0 and block.timestamp == t:
                self.tokens_per_week[this_week] += to_distribute
            else:
                self.tokens_per_week[this_week] += to_distribute * (block.timestamp - t) / since_last
            break
        else:
            if since_last == 0 and next_week == t:
                self.tokens_per_week[this_week] += to_distribute
            else:
                self.tokens_per_week[this_week] += to_distribute * (next_week - t) / since_last
        t = next_week
        this_week = next_week

    log CheckpointToken(block.timestamp, to_distribute)


@external
def checkpoint_token():
    """
    @notice Update the token checkpoint
    @dev Calculates the total number of tokens to be distributed in a given week.
         During setup for the initial distribution this function is only callable
         by the contract owner. Beyond initial distro, it can be enabled for anyone
         to call.
    """
    assert (msg.sender == self.admin) or\
           (self.can_checkpoint_token and (block.timestamp > self.last_token_time + TOKEN_CHECKPOINT_DEADLINE))
    self._checkpoint_token()


@internal
def _find_timestamp_epoch(ve: address, _timestamp: uint256) -> uint256:
    _min: uint256 = 0
    _max: uint256 = VotingEscrow(ve).epoch()
    for i in range(128):
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 2) / 2
        pt: Point = VotingEscrow(ve).point_history(_mid)
        if pt.ts <= _timestamp:
            _min = _mid
        else:
            _max = _mid - 1
    return _min


@view
@internal
def _find_timestamp_user_epoch(ve: address, user: address, _timestamp: uint256, max_user_epoch: uint256) -> uint256:
    _min: uint256 = 0
    _max: uint256 = max_user_epoch
    for i in range(128):
        if _min >= _max:
            break
        _mid: uint256 = (_min + _max + 2) / 2
        pt: Point = VotingEscrow(ve).user_point_history(user, _mid)
        if pt.ts <= _timestamp:
            _min = _mid
        else:
            _max = _mid - 1
    return _min


@view
@external
def ve_for_at(_user: address, _timestamp: uint256) -> uint256:
    """
    @notice Get the veCRV balance for `_user` at `_timestamp`
    @param _user Address to query balance for
    @param _timestamp Epoch time
    @return uint256 veCRV balance
    """
    ve: address = self.voting_escrow
    max_user_epoch: uint256 = VotingEscrow(ve).user_point_epoch(_user)
    epoch: uint256 = self._find_timestamp_user_epoch(ve, _user, _timestamp, max_user_epoch)
    pt: Point = VotingEscrow(ve).user_point_history(_user, epoch)
    return convert(max(pt.bias - pt.slope * convert(_timestamp - pt.ts, int128), 0), uint256)


@internal
def _checkpoint_total_supply():
    ve: address = self.voting_escrow
    t: uint256 = self.time_cursor
    rounded_timestamp: uint256 = block.timestamp / WEEK * WEEK
    VotingEscrow(ve).checkpoint()

    for i in range(20):
        if t > rounded_timestamp:
            break
        else:
            epoch: uint256 = self._find_timestamp_epoch(ve, t)
            pt: Point = VotingEscrow(ve).point_history(epoch)
            dt: int128 = 0
            if t > pt.ts:
                # If the point is at 0 epoch, it can actually be earlier than the first deposit
                # Then make dt 0
                dt = convert(t - pt.ts, int128)
            self.ve_supply[t] = convert(max(pt.bias - pt.slope * dt, 0), uint256)
        t += WEEK

    self.time_cursor = t


@external
def checkpoint_total_supply():
    """
    @notice Update the veCRV total supply checkpoint
    @dev The checkpoint is also updated by the first claimant each
         new epoch week. This function may be called independently
         of a claim, to reduce claiming gas costs.
    """
    self._checkpoint_total_supply()


@internal
def _claim(addr: address, ve: address, _last_token_time: uint256) -> uint256:
    # Minimal user_epoch is 0 (if user had no point)
    user_epoch: uint256 = 0
    to_distribute: uint256 = 0

    max_user_epoch: uint256 = VotingEscrow(ve).user_point_epoch(addr)
    _start_time: uint256 = self.start_time

    if max_user_epoch == 0:
        # No lock = no fees
        return 0

    week_cursor: uint256 = self.time_cursor_of[addr]
    if week_cursor == 0:
        # Need to do the initial binary search
        user_epoch = self._find_timestamp_user_epoch(ve, addr, _start_time, max_user_epoch)
    else:
        user_epoch = self.user_epoch_of[addr]

    if user_epoch == 0:
        user_epoch = 1

    user_point: Point = VotingEscrow(ve).user_point_history(addr, user_epoch)

    if week_cursor == 0:
        week_cursor = (user_point.ts + WEEK - 1) / WEEK * WEEK

    if week_cursor >= _last_token_time:
        return 0

    if week_cursor < _start_time:
        week_cursor = _start_time
    old_user_point: Point = empty(Point)

    # Iterate over weeks
    for i in range(50):
        if week_cursor >= _last_token_time:
            break

        if week_cursor >= user_point.ts and user_epoch <= max_user_epoch:
            user_epoch += 1
            old_user_point = user_point
            if user_epoch > max_user_epoch:
                user_point = empty(Point)
            else:
                user_point = VotingEscrow(ve).user_point_history(addr, user_epoch)

        else:
            # Calc
            # + i * 2 is for rounding errors
            dt: int128 = convert(week_cursor - old_user_point.ts, int128)
            balance_of: uint256 = convert(max(old_user_point.bias - dt * old_user_point.slope, 0), uint256)
            if balance_of == 0 and user_epoch > max_user_epoch:
                break
            if balance_of > 0:
                to_distribute += balance_of * self.tokens_per_week[week_cursor] / self.ve_supply[week_cursor]

            week_cursor += WEEK

    user_epoch = min(max_user_epoch, user_epoch - 1)
    self.user_epoch_of[addr] = user_epoch
    self.time_cursor_of[addr] = week_cursor

    log Claimed(addr, to_distribute, user_epoch, max_user_epoch)

    return to_distribute


@external
@nonreentrant('lock')
def claim(_addr: address = msg.sender) -> uint256:
    """
    @notice Claim fees for `_addr`
    @dev Each call to claim look at a maximum of 50 user veCRV points.
         For accounts with many veCRV related actions, this function
         may need to be called more than once to claim all available
         fees. In the `Claimed` event that fires, if `claim_epoch` is
         less than `max_epoch`, the account may claim again.
    @param _addr Address to claim fees for
    @return uint256 Amount of fees claimed in the call
    """
    assert not self.is_killed

    if block.timestamp >= self.time_cursor:
        self._checkpoint_total_supply()

    last_token_time: uint256 = self.last_token_time

    if self.can_checkpoint_token and (block.timestamp > last_token_time + TOKEN_CHECKPOINT_DEADLINE):
        self._checkpoint_token()
        last_token_time = block.timestamp

    last_token_time = last_token_time / WEEK * WEEK

    amount: uint256 = self._claim(_addr, self.voting_escrow, last_token_time)
    if amount != 0:
        token: address = self.token
        assert ERC20(token).transfer(_addr, amount)
        self.token_last_balance -= amount

    return amount


@external
@nonreentrant('lock')
def claim_many(_receivers: address[20]) -> bool:
    """
    @notice Make multiple fee claims in a single call
    @dev Used to claim for many accounts at once, or to make
         multiple claims for the same address when that address
         has significant veCRV history
    @param _receivers List of addresses to claim for. Claiming
                      terminates at the first `ZERO_ADDRESS`.
    @return bool success
    """
    assert not self.is_killed

    if block.timestamp >= self.time_cursor:
        self._checkpoint_total_supply()

    last_token_time: uint256 = self.last_token_time

    if self.can_checkpoint_token and (block.timestamp > last_token_time + TOKEN_CHECKPOINT_DEADLINE):
        self._checkpoint_token()
        last_token_time = block.timestamp

    last_token_time = last_token_time / WEEK * WEEK
    voting_escrow: address = self.voting_escrow
    token: address = self.token
    total: uint256 = 0

    for addr in _receivers:
        if addr == ZERO_ADDRESS:
            break

        amount: uint256 = self._claim(addr, voting_escrow, last_token_time)
        if amount != 0:
            assert ERC20(token).transfer(addr, amount)
            total += amount

    if total != 0:
        self.token_last_balance -= total

    return True


@external
def burn(_coin: address) -> bool:
    """
    @notice Receive 3CRV into the contract and trigger a token checkpoint
    @param _coin Address of the coin being received (must be 3CRV)
    @return bool success
    """
    assert _coin == self.token
    assert not self.is_killed

    amount: uint256 = ERC20(_coin).balanceOf(msg.sender)
    if amount != 0:
        ERC20(_coin).transferFrom(msg.sender, self, amount)
        if self.can_checkpoint_token and (block.timestamp > self.last_token_time + TOKEN_CHECKPOINT_DEADLINE):
            self._checkpoint_token()

    return True


@external
def commit_admin(_addr: address):
    """
    @notice Commit transfer of ownership
    @param _addr New admin address
    """
    assert msg.sender == self.admin  # dev: access denied
    self.future_admin = _addr
    log CommitAdmin(_addr)


@external
def apply_admin():
    """
    @notice Apply transfer of ownership
    """
    assert msg.sender == self.admin
    assert self.future_admin != ZERO_ADDRESS
    future_admin: address = self.future_admin
    self.admin = future_admin
    log ApplyAdmin(future_admin)


@external
def toggle_allow_checkpoint_token():
    """
    @notice Toggle permission for checkpointing by any account
    """
    assert msg.sender == self.admin
    flag: bool = not self.can_checkpoint_token
    self.can_checkpoint_token = flag
    log ToggleAllowCheckpointToken(flag)


@external
def kill_me():
    """
    @notice Kill the contract
    @dev Killing transfers the entire 3CRV balance to the emergency return address
         and blocks the ability to claim or burn. The contract cannot be unkilled.
    """
    assert msg.sender == self.admin

    self.is_killed = True

    token: address = self.token
    assert ERC20(token).transfer(self.emergency_return, ERC20(token).balanceOf(self))


@external
def recover_balance(_coin: address) -> bool:
    """
    @notice Recover ERC20 tokens from this contract
    @dev Tokens are sent to the emergency return address.
    @param _coin Token address
    @return bool success
    """
    assert msg.sender == self.admin
    assert _coin != self.token

    amount: uint256 = ERC20(_coin).balanceOf(self)
    response: Bytes[32] = raw_call(
        _coin,
        concat(
            method_id("transfer(address,uint256)"),
            convert(self.emergency_return, bytes32),
            convert(amount, bytes32),
        ),
        max_outsize=32,
    )
    if len(response) != 0:
        assert convert(response, bool)

    return True

Contract Security Audit

Contract ABI

[{"name":"CommitAdmin","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyAdmin","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ToggleAllowCheckpointToken","inputs":[{"type":"bool","name":"toggle_flag","indexed":false}],"anonymous":false,"type":"event"},{"name":"CheckpointToken","inputs":[{"type":"uint256","name":"time","indexed":false},{"type":"uint256","name":"tokens","indexed":false}],"anonymous":false,"type":"event"},{"name":"Claimed","inputs":[{"type":"address","name":"recipient","indexed":true},{"type":"uint256","name":"amount","indexed":false},{"type":"uint256","name":"claim_epoch","indexed":false},{"type":"uint256","name":"max_epoch","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"_voting_escrow"},{"type":"uint256","name":"_start_time"},{"type":"address","name":"_token"},{"type":"address","name":"_admin"},{"type":"address","name":"_emergency_return"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"checkpoint_token","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":820723},{"name":"ve_for_at","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_user"},{"type":"uint256","name":"_timestamp"}],"stateMutability":"view","type":"function","gas":249417},{"name":"checkpoint_total_supply","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":10592405},{"name":"claim","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"nonpayable","type":"function"},{"name":"claim","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"nonpayable","type":"function"},{"name":"claim_many","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address[20]","name":"_receivers"}],"stateMutability":"nonpayable","type":"function","gas":26281905},{"name":"burn","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_coin"}],"stateMutability":"nonpayable","type":"function","gas":823450},{"name":"commit_admin","outputs":[],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"nonpayable","type":"function","gas":37898},{"name":"apply_admin","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":39534},{"name":"toggle_allow_checkpoint_token","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38673},{"name":"kill_me","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":39587},{"name":"recover_balance","outputs":[{"type":"bool","name":""}],"inputs":[{"type":"address","name":"_coin"}],"stateMutability":"nonpayable","type":"function","gas":7778},{"name":"start_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1541},{"name":"time_cursor","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1571},{"name":"time_cursor_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1816},{"name":"user_epoch_of","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":1846},{"name":"last_token_time","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1661},{"name":"tokens_per_week","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1800},{"name":"voting_escrow","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1721},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1751},{"name":"total_received","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1781},{"name":"token_last_balance","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1811},{"name":"ve_supply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":1950},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1871},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1901},{"name":"can_checkpoint_token","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1931},{"name":"emergency_return","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1961},{"name":"is_killed","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1991}]

6f7fffffffffffffffffffffffffffffff60405260a0611f45610140396020611f4560c03960c05160a01c1561003457600080fd5b60206040611f450160c03960c05160a01c1561004f57600080fd5b60206060611f450160c03960c05160a01c1561006a57600080fd5b60206080611f450160c03960c05160a01c1561008557600080fd5b6101605162093a808082049050905062093a8080820282158284830414176100ac57600080fd5b809050905090506101e0526101e0516000556101e0516004556101e05160015561018051600755610140516006556101a051600b556101c051600e55611f2d56341561000a57600080fd5b600436101561001857611e3a565b600035601c526f7fffffffffffffffffffffffffffffff604052600015610384575b61014052602061020060246370a0823161018052306101a05261019c6007545afa61006457600080fd5b601f3d1161007157600080fd5b6000506102005161016052610160516009548082101561009057600080fd5b8082039050905061018052610160516009556004546101a052426101a051808210156100bb57600080fd5b808203905090506101c052426004556101a05162093a808082049050905062093a8080820282158284830414176100f157600080fd5b809050905090506101e05260006102005261022060006014818352015b6101e05162093a8081818301101561012557600080fd5b808201905090506102005261020051421015610232576101c0511515610150576101a0514214610153565b60005b1561019e576101e05166038d7ea4c68000811061016f57600080fd5b600560c052602060c0200180546101805181818301101561018f57600080fd5b80820190509050815550610229565b6101e05166038d7ea4c6800081106101b557600080fd5b600560c052602060c02001805461018051426101a051808210156101d857600080fd5b8082039050905080820282158284830414176101f357600080fd5b809050905090506101c051808061020957600080fd5b82049050905081818301101561021e57600080fd5b808201905090508155505b61034856610327565b6101c051151561024a576101a051610200511461024d565b60005b15610298576101e05166038d7ea4c68000811061026957600080fd5b600560c052602060c0200180546101805181818301101561028957600080fd5b80820190509050815550610326565b6101e05166038d7ea4c6800081106102af57600080fd5b600560c052602060c02001805461018051610200516101a051808210156102d557600080fd5b8082039050905080820282158284830414176102f057600080fd5b809050905090506101c051808061030657600080fd5b82049050905081818301101561031b57600080fd5b808201905090508155505b5b610200516101a052610200516101e0525b815160010180835281141561010e575b5050426102205261018051610240527fce749457b74e10f393f2c6b1ce4261b78791376db5a3f501477a809f03f500d66040610220a161014051565b63811a40fe60005114156103eb57600b543314156103a35760016103d3565b600d54156103cf57600454620151808181830110156103c157600080fd5b8082019050905042116103d2565b60005b5b5b6103dd57600080fd5b6006580161003a565b600050005b6000156105a6575b61018052610140526101605260006101a0526020610240600463900cf0cf6101e0526101fc610140515afa61042757600080fd5b601f3d1161043457600080fd5b600050610240516101c0526101e060006080818352015b6101c0516101a05110151561045f57610592565b6101a0516101c05181818301101561047657600080fd5b80820190509050600281818301101561048e57600080fd5b80820190509050600280820490509050610200526102206080610320602463d1febfb96102a052610200516102c0526102bc610140515afa6104cf57600080fd5b607f3d116104dc57600080fd5b61032080808080516103a0525050602081019050808080516103c0525050602081019050808080516103e05250506020810190508080805161040052505050506000506103a0805182528060200151826020015280604001518260400152806060015182606001525050610160516102605111151561056257610200516101a052610581565b6102005160018082101561057557600080fd5b808203905090506101c0525b5b815160010180835281141561044b575b50506101a051600052600051610180515650005b60001561073f575b6101c0526101405261016052610180526101a05260006101e0526101a0516102005261022060006080818352015b610200516101e0511015156105f05761072b565b6101e0516102005181818301101561060757600080fd5b80820190509050600281818301101561061f57600080fd5b8082019050905060028082049050905061024052610260608061038060446328d09d476102e052610160516103005261024051610320526102fc610140515afa61066857600080fd5b607f3d1161067557600080fd5b61038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610180516102a0511115156106fb57610240516101e05261071a565b6102405160018082101561070e57600080fd5b80820390509050610200525b5b81516001018083528114156105dc575b50506101e0516000526000516101c0515650005b63ace296fb60005114156109525760043560a01c1561075d57600080fd5b600654610140526020610200602463010ae757610180526004356101a05261019c610140515afa61078d57600080fd5b601f3d1161079a57600080fd5b6000506102005161016052610140516101605161018051610140516101a0526004356101c0526024356101e0526101605161020052610200516101e0516101c0516101a051600658016105ae565b6102605261018052610160526101405261026051610180526101a060806102c060446328d09d476102205260043561024052610180516102605261023c610140515afa61083457600080fd5b607f3d1161084157600080fd5b6102c080808080516103405250506020810190508080805161036052505060208101905080808051610380525050602081019050808080516103a052505050506000506103408051825280602001518260200152806040015182604001528060600151826060015250506101a0516101c0516024356101e051808210156108c757600080fd5b808203905090506040518111156108dd57600080fd5b808202808060008112156108ed57195b607f1c156108fa57600080fd5b9050905090508082038080600081121561091057195b607f1c1561091d57600080fd5b9050905090506000808212156109335780610935565b815b90509050600081121561094757600080fd5b60005260206000f350005b600015610c10575b6101405260065461016052600154610180524262093a808082049050905062093a80808202821582848304141761099057600080fd5b809050905090506101a052610160513b6109a957600080fd5b60006000600463c2c4c5c16101c0526101dc6000610160515af16109cc57600080fd5b6101c060006014818352015b6101a0516101805111156109ef57610c0156610bce565b6101405161016051610180516101a0516101c0516101e051610160516102005261018051610220526102205161020051600658016103f3565b610280526101e0526101c0526101a052610180526101605261014052610280516101e0526102006080610300602463d1febfb9610280526101e0516102a05261029c610160515afa610a7957600080fd5b607f3d11610a8657600080fd5b6103008080808051610380525050602081019050808080516103a0525050602081019050808080516103c0525050602081019050808080516103e0525050505060005061038080518252806020015182602001528060400151826040015280606001518260600152505060006102805261024051610180511115610b3457610180516102405180821015610b1957600080fd5b80820390509050604051811115610b2f57600080fd5b610280525b61020051610220516102805180820280806000811215610b5057195b607f1c15610b5d57600080fd5b90509050905080820380806000811215610b7357195b607f1c15610b8057600080fd5b905090509050600080821215610b965780610b98565b815b905090506000811215610baa57600080fd5b6101805166038d7ea4c680008110610bc157600080fd5b600a60c052602060c02001555b610180805162093a80818183011015610be657600080fd5b808201905090508152505b81516001018083528114156109d8575b50506101805160015561014051565b63b21ed5026000511415610c2c576006580161095a565b600050005b600015611294575b6101a0526101405261016052610180526040366101c03760206102a0602463010ae75761022052610140516102405261023c610160515afa610c7557600080fd5b601f3d11610c8257600080fd5b6000506102a0516102005260005461022052610200511515610cad5760006000526000516101a05156505b60026101405160e05260c052604060c0205461024052610240511515610d5f576101405161016051610180516101a0516101c0516101e05161020051610220516102405161016051610260526101405161028052610220516102a052610200516102c0526102c0516102a0516102805161026051600658016105ae565b610320526102405261022052610200526101e0526101c0526101a052610180526101605261014052610320516101c052610d76565b60036101405160e05260c052604060c020546101c0525b6101c0511515610d875760016101c0525b610260608061038060446328d09d476102e05261014051610300526101c051610320526102fc610160515afa610dbc57600080fd5b607f3d11610dc957600080fd5b61038080808080516104005250506020810190508080805161042052505060208101905080808051610440525050602081019050808080516104605250505050600050610400805182528060200151826020015280604001518260400152806060015182606001525050610240511515610ea0576102a05162093a80818183011015610e5457600080fd5b80820190509050600180821015610e6a57600080fd5b8082039050905062093a808082049050905062093a808082028215828483041417610e9457600080fd5b80905090509050610240525b6101805161024051101515610ebe5760006000526000516101a05156505b61022051610240511015610ed55761022051610240525b6080366102e03761036060006032818352015b6101805161024051101515610efc576111db565b6102a05161024051101515610f1a57610200516101c0511115610f1d565b60005b15611038576101c080516001818183011015610f3857600080fd5b808201905090508152506102e0610260805182528060200151826020015280604001518260400152806060015182606001525050610200516101c0511115610f865760803661026037611033565b610260608061042060446328d09d4761038052610140516103a0526101c0516103c05261039c610160515afa610fbb57600080fd5b607f3d11610fc857600080fd5b61042080808080516104a0525050602081019050808080516104c0525050602081019050808080516104e05250506020810190508080805161050052505050506000506104a08051825280602001518260200152806040015182604001528060600151826060015250505b6111ca565b61024051610320518082101561104d57600080fd5b8082039050905060405181111561106357600080fd5b610380526102e05161038051610300518082028080600081121561108357195b607f1c1561109057600080fd5b905090509050808203808060008112156110a657195b607f1c156110b357600080fd5b9050905090506000808212156110c957806110cb565b815b9050905060008112156110dd57600080fd5b6103a0526103a05115156110f957610200516101c051116110fc565b60005b15611106576111db565b60006103a05111156111a7576101e080516103a0516102405166038d7ea4c68000811061113257600080fd5b600560c052602060c0200154808202821582848304141761115257600080fd5b809050905090506102405166038d7ea4c68000811061117057600080fd5b600a60c052602060c0200154808061118757600080fd5b82049050905081818301101561119c57600080fd5b808201905090508152505b610240805162093a808181830110156111bf57600080fd5b808201905090508152505b5b8151600101808352811415610ee8575b5050610200516101c0516001808210156111f457600080fd5b8082039050905080821115611209578061120b565b815b905090506101c0526101c05160036101405160e05260c052604060c020556102405160026101405160e05260c052604060c020556101e051610360526101c05161038052610200516103a052610140517f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e6060610360a26101e0516000526000516101a0515650005b634e71d92d60005114156112ac5733610140526112e2565b631e83409a60005114156112da5760043560a01c156112ca57600080fd5b60206004610140376000506112e2565b6000156114a6575b62ffffff54156112f157600080fd5b600162ffffff55600f541561130557600080fd5b6001544210151561132557610140516006580161095a565b610140526000505b60045461016052600d541561135957610160516201518081818301101561134b57600080fd5b80820190509050421161135c565b60005b156113835761014051610160516006580161003a565b610160526101405260005042610160525b6101605162093a808082049050905062093a8080820282158284830414176113aa57600080fd5b8090509050905061016052610140516101605161018051610140516101a0526006546101c052610160516101e0526101e0516101c0516101a05160065801610c34565b6102405261018052610160526101405261024051610180526000610180511815611489576007546101a0526020610260604463a9059cbb6101c052610140516101e05261018051610200526101dc60006101a0515af161144c57600080fd5b601f3d1161145957600080fd5b6000506102605161146957600080fd5b60098054610180518082101561147e57600080fd5b808203905090508155505b61018051600052600062ffffff5560206000f350600062ffffff55005b637b935a2360005114156117395762ffffff54156114c357600080fd5b600162ffffff556000610120525b610120516004013560a01c156114e657600080fd5b6020610120510161012052610280610120511015611503576114d1565b600f541561151057600080fd5b60015442101515611528576006580161095a565b6000505b60045461014052600d541561155c57610140516201518081818301101561154e57600080fd5b80820190509050421161155f565b60005b1561157e57610140516006580161003a565b6101405260005042610140525b6101405162093a808082049050905062093a8080820282158284830414176115a557600080fd5b8090509050905061014052600654610160526007546101805260006101a0526101e060006014818352015b60206101e05102600401356101c0526101c05115156115ee576116f0565b6101405161016051610180516101a0516101c0516101e051610200516101c051610220526101605161024052610140516102605261026051610240516102205160065801610c34565b6102c052610200526101e0526101c0526101a0526101805261016052610140526102c0516102005260006102005118156116df5760206102c0604463a9059cbb610220526101c05161024052610200516102605261023c6000610180515af161169f57600080fd5b601f3d116116ac57600080fd5b6000506102c0516116bc57600080fd5b6101a08051610200518181830110156116d457600080fd5b808201905090508152505b5b81516001018083528114156115d0575b505060006101a051181561171e57600980546101a0518082101561171357600080fd5b808203905090508155505b6001600052600062ffffff5560206000f350600062ffffff55005b6389afcb44600051141561185e5760043560a01c1561175757600080fd5b6007546004351461176757600080fd5b600f541561177457600080fd5b60206101e060246370a0823161016052336101805261017c6004355afa61179a57600080fd5b601f3d116117a757600080fd5b6000506101e05161014052600061014051181561185157602061022060646323b872dd610160523361018052306101a052610140516101c05261017c60006004355af16117f357600080fd5b601f3d1161180057600080fd5b60005061022050600d5415611833576004546201518081818301101561182557600080fd5b808201905090504211611836565b60005b1561185057610140516006580161003a565b610140526000505b5b600160005260206000f350005b63b1d3db7560005114156118c05760043560a01c1561187c57600080fd5b600b54331461188a57600080fd5b600435600c55600435610140527f59a407284ae6e2986675fa1400d6498af928ed01f4fd2dd6be4a2a8b4fc35b346020610140a1005b63c0e991a6600051141561192a57600b5433146118dc57600080fd5b6000600c54186118eb57600080fd5b600c546101405261014051600b5561014051610160527f756f845176805c8ebf249854e909627308157f63c96e470e44a9e8549ba6fb1e6020610160a1005b632121bfc3600051141561198657600b54331461194657600080fd5b600d54156101405261014051600d5561014051610160527fdbe6ac1081ebd8e648718341126659456f4009fcadfe1c23f66f5e61522610b26020610160a1005b63e36988536000511415611a3757600b5433146119a257600080fd5b6001600f556007546101405260206102a0604463a9059cbb61020052600e546102205260206101e060246370a0823161016052306101805261017c610140515afa6119ec57600080fd5b601f3d116119f957600080fd5b6000506101e0516102405261021c6000610140515af1611a1857600080fd5b601f3d11611a2557600080fd5b6000506102a051611a3557600080fd5b005b63db2f5f796000511415611bff5760043560a01c15611a5557600080fd5b600b543314611a6357600080fd5b60075460043518611a7357600080fd5b60206101e060246370a0823161016052306101805261017c6004355afa611a9957600080fd5b601f3d11611aa657600080fd5b6000506101e05161014052600060046101c0527fa9059cbb000000000000000000000000000000000000000000000000000000006101e0526101c060048060208461022001018260208501600060045af1505080518201915050600e5460208261022001015260208101905061014051602082610220010152602081019050806102205261022090508051602001806102c08284600060045af1611b4957600080fd5b505060206103806102c0516102e060006004355af1611b6757600080fd5b60203d80821115611b785780611b7a565b815b90509050610360526103608051602001806101608284600060045af1611b9f57600080fd5b50506000610160511815611bf257610160806020015160008251806020901315611bc857600080fd5b8091901215611bd657600080fd5b806020036101000a82049050905090501515611bf157600080fd5b5b600160005260206000f350005b63834ee4176000511415611c1b5760005460005260206000f350005b63127dcbd36000511415611c375760015460005260206000f350005b632a2a314b6000511415611c715760043560a01c15611c5557600080fd5b600260043560e05260c052604060c0205460005260206000f350005b63d5d46e886000511415611cab5760043560a01c15611c8f57600080fd5b600360043560e05260c052604060c0205460005260206000f350005b637f58e8f86000511415611cc75760045460005260206000f350005b63edf599976000511415611d025760043566038d7ea4c680008110611ceb57600080fd5b600560c052602060c020015460005260206000f350005b63dfe050316000511415611d1e5760065460005260206000f350005b63fc0c546a6000511415611d3a5760075460005260206000f350005b632f0c222e6000511415611d565760085460005260206000f350005b6322b04bfc6000511415611d725760095460005260206000f350005b63d4dafba86000511415611dad5760043566038d7ea4c680008110611d9657600080fd5b600a60c052602060c020015460005260206000f350005b63f851a4406000511415611dc957600b5460005260206000f350005b6317f7182a6000511415611de557600c5460005260206000f350005b63aeba47376000511415611e0157600d5460005260206000f350005b632c3f531e6000511415611e1d57600e5460005260206000f350005b639c868ac06000511415611e3957600f5460005260206000f350005b5b60006000fd5b6100ed611f2d036100ed6000396100ed611f2d036000f30000000000000000000000008756c27a2efb827e8bf03decc6f6c83ee7e9df300000000000000000000000000000000000000000000000000000000060a1f73f0000000000000000000000000026296407a0eba938409575f84059ca603d33dc00000000000000000000000053d79a69a0b506a3bd183ac876deea0c0cd0d91100000000000000000000000053d79a69a0b506a3bd183ac876deea0c0cd0d911

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.