ETH Price: $2,286.03 (-2.59%)

Contract

0xF6f5a326212672B8e4dD93704fCF3554f1e34d7e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Market For R...142667212022-02-24 4:51:06935 days ago1645678266IN
0xF6f5a326...4f1e34d7e
0 ETH0.00714628219.35932469
Set Flywheel Rew...142667192022-02-24 4:50:24935 days ago1645678224IN
0xF6f5a326...4f1e34d7e
0 ETH0.00670096204.26651612
Accrue142653792022-02-23 23:37:37935 days ago1645659457IN
0xF6f5a326...4f1e34d7e
0 ETH0.0116304580.84116224
Add Market For R...142649842022-02-23 22:11:21936 days ago1645654281IN
0xF6f5a326...4f1e34d7e
0 ETH0.01532581308.50315094
Claim142646692022-02-23 21:04:49936 days ago1645650289IN
0xF6f5a326...4f1e34d7e
0 ETH0.0014133258.81011006
Accrue142646222022-02-23 20:55:58936 days ago1645649758IN
0xF6f5a326...4f1e34d7e
0 ETH0.0021453886.86824222
Claim142644322022-02-23 20:19:51936 days ago1645647591IN
0xF6f5a326...4f1e34d7e
0 ETH0.002010683.6638071
Accrue142644292022-02-23 20:19:32936 days ago1645647572IN
0xF6f5a326...4f1e34d7e
0 ETH0.009921899.78285875
Claim142643882022-02-23 20:08:05936 days ago1645646885IN
0xF6f5a326...4f1e34d7e
0 ETH0.00558317142.42425359
Accrue142643872022-02-23 20:07:48936 days ago1645646868IN
0xF6f5a326...4f1e34d7e
0 ETH0.02206359137.06396824
Add Market For R...142643672022-02-23 20:02:53936 days ago1645646573IN
0xF6f5a326...4f1e34d7e
0 ETH0.00601759121.13198796
Add Market For R...142643672022-02-23 20:02:53936 days ago1645646573IN
0xF6f5a326...4f1e34d7e
0 ETH0.00601759121.13198796
Add Market For R...142643602022-02-23 20:00:23936 days ago1645646423IN
0xF6f5a326...4f1e34d7e
0 ETH0.0042315285.17903596
Accrue142643562022-02-23 19:58:32936 days ago1645646312IN
0xF6f5a326...4f1e34d7e
0 ETH0.0018623875.40948413
Claim142640272022-02-23 18:54:02936 days ago1645642442IN
0xF6f5a326...4f1e34d7e
0 ETH0.0035774491.25906266
Accrue142640182022-02-23 18:52:21936 days ago1645642341IN
0xF6f5a326...4f1e34d7e
0 ETH0.01813544126.05612333
Claim142638412022-02-23 18:08:29936 days ago1645639709IN
0xF6f5a326...4f1e34d7e
0 ETH0.0022426193.31801355
Accrue142638382022-02-23 18:08:15936 days ago1645639695IN
0xF6f5a326...4f1e34d7e
0 ETH0.01399146117.24132145
Claim142607532022-02-23 6:32:53936 days ago1645597973IN
0xF6f5a326...4f1e34d7e
0 ETH0.0022918758.46462567
Accrue142607512022-02-23 6:32:18936 days ago1645597938IN
0xF6f5a326...4f1e34d7e
0 ETH0.0073826951.31577728
Claim142607052022-02-23 6:22:58936 days ago1645597378IN
0xF6f5a326...4f1e34d7e
0 ETH0.0030458454.09937807
Accrue142607022022-02-23 6:22:40936 days ago1645597360IN
0xF6f5a326...4f1e34d7e
0 ETH0.0107705966.91138086
Add Market For R...142521142022-02-21 22:29:34937 days ago1645482574IN
0xF6f5a326...4f1e34d7e
0 ETH0.00721113145.15756555
Add Market For R...142521132022-02-21 22:29:28937 days ago1645482568IN
0xF6f5a326...4f1e34d7e
0 ETH0.0077268155.53776526
Add Market For R...142521112022-02-21 22:29:16937 days ago1645482556IN
0xF6f5a326...4f1e34d7e
0 ETH0.00908564182.89067789
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FuseFlywheelCore

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2022-02-17
*/

// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.10;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*///////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*///////////////////////////////////////////////////////////////
                             EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*///////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*///////////////////////////////////////////////////////////////
                              ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*///////////////////////////////////////////////////////////////
                              EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(
                        abi.encode(
                            keccak256(
                                "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                            ),
                            owner,
                            spender,
                            value,
                            nonces[owner]++,
                            deadline
                        )
                    )
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}
/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnerUpdated(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnerUpdated(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function setOwner(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnerUpdated(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

/**
 @title Rewards Module for Flywheel
 @notice The rewards module is a minimal interface for determining the quantity of rewards accrued to a flywheel market.

 Different module strategies include:
  * a static reward rate per second
  * a decaying reward rate
  * a dynamic just-in-time reward stream
  * liquid governance reward delegation
 */
interface IFlywheelRewards {
    function getAccruedRewards(ERC20 market, uint32 lastUpdatedTimestamp) external returns (uint256 rewards);
}
/**
 @title Balance Booster Module for Flywheel
 @notice An optional module for virtually boosting user balances. This allows a Flywheel Core to plug into some balance boosting logic.

 Boosting logic can be associated with referrals, vote-escrow, or other strategies. It can even be used to model exotic strategies like borrowing.
 */
interface IFlywheelBooster {
    function boostedTotalSupply(ERC20 market) external view returns(uint256);

    function boostedBalanceOf(ERC20 market, address user) external view returns(uint256);
}

/**
 @title Flywheel Core Incentives Manager
 @notice Flywheel is a general framework for managing token incentives.
         It is comprised of the Core (this contract), Rewards module, and optional Booster module.

         Core is responsible for maintaining reward accrual through reward indexes. 
         It delegates the actual accrual logic to the Rewards Module.

         For maximum accuracy and to avoid exploits, rewards accrual should be notified atomically through the accrue hook. 
         Accrue should be called any time tokens are transferred, minted, or burned.
 */
contract FlywheelCore is Auth {

    event AddMarket(address indexed newMarket);

    event FlywheelRewardsUpdate(address indexed oldFlywheelRewards, address indexed newFlywheelRewards);

    event AccrueRewards(ERC20 indexed cToken, address indexed owner, uint rewardsDelta, uint rewardsIndex);
    
    event ClaimRewards(address indexed owner, uint256 amount);

    struct RewardsState {
        /// @notice The market's last updated index
        uint224 index;

        /// @notice The timestamp the index was last updated at
        uint32 lastUpdatedTimestamp;
    }

    /// @notice The token to reward
    ERC20 public immutable rewardToken;

    /// @notice the rewards contract for managing streams
    IFlywheelRewards public flywheelRewards;

    /// @notice optional booster module for calculating virtual balances on markets
    IFlywheelBooster public immutable flywheelBooster;

    /// @notice the fixed point factor of flywheel
    uint224 public constant ONE = 1e18;

    /// @notice The market index and last updated per market
    mapping(ERC20 => RewardsState) public marketState;

    /// @notice user index per market
    mapping(ERC20 => mapping(address => uint224)) public userIndex;

    /// @notice The accrued but not yet transferred rewards for each user
    mapping(address => uint256) public rewardsAccrued;

    /// @dev immutable flag for short-circuiting boosting logic
    bool internal immutable applyBoosting;

    constructor(
        ERC20 _rewardToken, 
        IFlywheelRewards _flywheelRewards, 
        IFlywheelBooster _flywheelBooster,
        address _owner,
        Authority _authority
    ) Auth(_owner, _authority) {
        rewardToken = _rewardToken;
        flywheelRewards = _flywheelRewards;
        flywheelBooster = _flywheelBooster;

        applyBoosting = address(_flywheelBooster) != address(0);
    }

    /// @notice initialize a new market
    function addMarketForRewards(ERC20 market) external requiresAuth {
        marketState[market] = RewardsState({
            index: ONE,
            lastUpdatedTimestamp: uint32(block.timestamp)
        });

        emit AddMarket(address(market));
    }

    /// @notice swap out the flywheel rewards contract
    function setFlywheelRewards(IFlywheelRewards newFlywheelRewards) external requiresAuth {
        address oldFlywheelRewards = address(flywheelRewards);

        flywheelRewards = newFlywheelRewards;

        emit FlywheelRewardsUpdate(oldFlywheelRewards, address(newFlywheelRewards));
    }

    /// @notice accrue rewards for a single user on a market
    function accrue(ERC20 market, address user) public returns (uint256) {
        RewardsState memory state = marketState[market];

        if (state.index == 0) return 0;

        state = accrueMarket(market, state);
        return accrueUser(market, user, state);
    }

    /// @notice accrue rewards for two users on a market
    function accrue(ERC20 market, address user, address secondUser) public returns (uint256, uint256) {
        RewardsState memory state = marketState[market];

        if (state.index == 0) return (0, 0);

        state = accrueMarket(market, state);
        return (accrueUser(market, user, state), accrueUser(market, secondUser, state));
    }

    /// @notice claim rewards for a given owner
    function claim(address owner) external {
        uint256 accrued = rewardsAccrued[owner];

        if (accrued != 0) {
            rewardsAccrued[owner] = 0;

            rewardToken.transfer(owner, accrued); 

            emit ClaimRewards(owner, accrued);
        }
    }

    /// @notice accumulate global rewards on a market
    function accrueMarket(ERC20 market, RewardsState memory state) private returns(RewardsState memory rewardsState) {
        // calculate accrued rewards through module
        uint256 marketRewardsAccrued = flywheelRewards.getAccruedRewards(market, state.lastUpdatedTimestamp);

        rewardsState = state;
        if (marketRewardsAccrued > 0) {
            // use the booster or token supply to calculate reward index denominator
            uint256 supplyTokens = applyBoosting ? flywheelBooster.boostedTotalSupply(market): market.totalSupply();

            // accumulate rewards per token onto the index, multiplied by fixed-point factor
            rewardsState = RewardsState({
                index: state.index + uint224(marketRewardsAccrued * ONE / supplyTokens),
                lastUpdatedTimestamp: uint32(block.timestamp)
            });
            marketState[market] = rewardsState;
        }
    }

    /// @notice accumulate rewards on a market for a specific user
    function accrueUser(ERC20 market, address user, RewardsState memory state) private returns (uint256) {
        // load indices
        uint224 supplyIndex = state.index;
        uint224 supplierIndex = userIndex[market][user];

        // sync user index to global
        userIndex[market][user] = supplyIndex;

        // if user hasn't yet accrued rewards, grant them interest from the market beginning if they have a balance
        // zero balances will have no effect other than syncing to global index
        if (supplierIndex == 0) {
            supplierIndex = ONE;
        }

        uint224 deltaIndex = supplyIndex - supplierIndex;
        // use the booster or token balance to calculate reward balance multiplier
        uint256 supplierTokens = applyBoosting ? flywheelBooster.boostedBalanceOf(market, user) : market.balanceOf(user);

        // accumulate rewards by multiplying user tokens by rewardsPerToken index and adding on unclaimed
        uint256 supplierDelta = supplierTokens * deltaIndex / ONE;
        uint256 supplierAccrued = rewardsAccrued[user] + supplierDelta;
        
        rewardsAccrued[user] = supplierAccrued;

        emit AccrueRewards(market, user, supplierDelta, supplyIndex);

        return supplierAccrued;
    }
}

contract FuseFlywheelCore is FlywheelCore {

    bool public constant isRewardsDistributor = true;

    constructor(
        ERC20 _rewardToken, 
        IFlywheelRewards _flywheelRewards, 
        IFlywheelBooster _flywheelBooster,
        address _owner,
        Authority _authority
    ) FlywheelCore(_rewardToken, _flywheelRewards, _flywheelBooster, _owner, _authority) {}

    function flywheelPreSupplierAction(ERC20 market, address supplier) external {
        accrue(market, supplier);  
    }

    function flywheelPreBorrowerAction(ERC20 market, address borrower) external {}

    function flywheelPreTransferAction(ERC20 market, address src, address dst) external {
        accrue(market, src, dst);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract ERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IFlywheelRewards","name":"_flywheelRewards","type":"address"},{"internalType":"contract IFlywheelBooster","name":"_flywheelBooster","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract Authority","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ERC20","name":"cToken","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsDelta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsIndex","type":"uint256"}],"name":"AccrueRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarket","type":"address"}],"name":"AddMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldFlywheelRewards","type":"address"},{"indexed":true,"internalType":"address","name":"newFlywheelRewards","type":"address"}],"name":"FlywheelRewardsUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"inputs":[],"name":"ONE","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"accrue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"secondUser","type":"address"}],"name":"accrue","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"}],"name":"addMarketForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flywheelBooster","outputs":[{"internalType":"contract IFlywheelBooster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"flywheelPreBorrowerAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"supplier","type":"address"}],"name":"flywheelPreSupplierAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"market","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"flywheelPreTransferAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flywheelRewards","outputs":[{"internalType":"contract IFlywheelRewards","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"name":"marketState","outputs":[{"internalType":"uint224","name":"index","type":"uint224"},{"internalType":"uint32","name":"lastUpdatedTimestamp","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsAccrued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IFlywheelRewards","name":"newFlywheelRewards","type":"address"}],"name":"setFlywheelRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userIndex","outputs":[{"internalType":"uint224","name":"","type":"uint224"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b506040516200120d3803806200120d833981016040819052620000349162000129565b600080546001600160a01b03199081166001600160a01b0385811691821784556001805490931690851617909155604051879287928792879287928492849233917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506001600160a01b03928316608052600280546001600160a01b031916928416929092179091551660a0819052151560c05250620001a99350505050565b6001600160a01b03811681146200012657600080fd5b50565b600080600080600060a086880312156200014257600080fd5b85516200014f8162000110565b6020870151909550620001628162000110565b6040870151909450620001758162000110565b6060870151909350620001888162000110565b60808701519092506200019b8162000110565b809150509295509295909350565b60805160a05160c051611018620001f5600039600081816109d30152610bdf0152600081816102b001528181610a7c0152610c98015260008181610384015261049401526110186000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ab5497d7116100ad578063c2ee3a0811610071578063c2ee3a0814610323578063cc6bc10114610332578063e6e162e81461035a578063f046ee5c1461036c578063f7c618c11461037f57600080fd5b8063ab5497d7146102ab578063abc6d72d146102d2578063b006340d146102ea578063b9be44ac146102fd578063bf7e214f1461031057600080fd5b80637a9e5e4b116100f45780637a9e5e4b146101d05780637fb5ad38146101e35780638da5cb5b146102115780638fb009131461023c578063a7a9a62c1461024f57600080fd5b8063116139d31461013157806313af4035146101825780631c9161e0146101975780631e83409a146101aa5780634e081c95146101bd575b600080fd5b61016561013f366004610dea565b60046020908152600092835260408084209091529082529020546001600160e01b031681565b6040516001600160e01b0390911681526020015b60405180910390f35b610195610190366004610e23565b6103a6565b005b6101956101a5366004610dea565b61042c565b6101956101b8366004610e23565b61043b565b6101956101cb366004610e47565b61054b565b6101956101de366004610e23565b61055d565b6102036101f1366004610e23565b60056020526000908152604090205481565b604051908152602001610179565b600054610224906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b61019561024a366004610e23565b610647565b61028761025d366004610e23565b6003602052600090815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b604080516001600160e01b03909316835263ffffffff909116602083015201610179565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6102da600181565b6040519015158152602001610179565b6101956102f8366004610e23565b6106cb565b61020361030b366004610dea565b610781565b600154610224906001600160a01b031681565b610165670de0b6b3a764000081565b610345610340366004610e47565b6107f7565b60408051928352602083019190915201610179565b610195610368366004610dea565b5050565b600254610224906001600160a01b031681565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6103bc336000356001600160e01b031916610880565b6103e15760405162461bcd60e51b81526004016103d890610e92565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6104368282610781565b505050565b6001600160a01b0381166000908152600560205260409020548015610368576001600160a01b03828116600081815260056020526040808220919091555163a9059cbb60e01b81526004810191909152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156104df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105039190610eb8565b50816001600160a01b03167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc678260405161053f91815260200190565b60405180910390a25050565b6105568383836107f7565b5050505050565b6000546001600160a01b03163314806105f2575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906105b190339030906001600160e01b03196000351690600401610eda565b602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190610eb8565b6105fb57600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b61065d336000356001600160e01b031916610880565b6106795760405162461bcd60e51b81526004016103d890610e92565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fc88394d92ca818942c423842b933c023fc08dbdb030fcaf02ac41b89e2d1d9f690600090a35050565b6106e1336000356001600160e01b031916610880565b6106fd5760405162461bcd60e51b81526004016103d890610e92565b604080518082018252670de0b6b3a7640000815263ffffffff42811660208084019182526001600160a01b0386166000818152600390925285822094519251909316600160e01b026001600160e01b03929092169190911790925591517fc3dfb88ee5301cecf05761fb2728064e5b641524346ae69b9ba80394631bf11f9190a250565b6001600160a01b03821660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff1692820192909252906107d65760009150506107f1565b6107e0848261092a565b90506107ed848483610b74565b9150505b92915050565b6001600160a01b03831660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff16928201929092528291610850576000809250925050610878565b61085a868261092a565b9050610867868683610b74565b610872878684610b74565b92509250505b935093915050565b6001546000906001600160a01b0316801580159061090a575060405163b700961360e01b81526001600160a01b0382169063b7009613906108c990879030908890600401610eda565b602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190610eb8565b806107ed57506000546001600160a01b0385811691161491505092915050565b6040805180820190915260008082526020820152600254602083015160405163b334db7b60e01b81526001600160a01b03868116600483015263ffffffff9092166024820152600092919091169063b334db7b906044016020604051808303816000875af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c49190610f07565b83925090508015610b6d5760007f0000000000000000000000000000000000000000000000000000000000000000610a5d57846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190610f07565b610ae7565b604051631e1932fb60e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690631e1932fb90602401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae79190610f07565b604080518082019091529091508082610b08670de0b6b3a764000086610f36565b610b129190610f55565b8651610b1e9190610f77565b6001600160e01b03908116825263ffffffff4281166020938401526001600160a01b03891660009081526003845260409020845193850151909116600160e01b02929091169190911790559250505b5092915050565b80516001600160a01b038481166000908152600460209081526040808320938716835292905290812080546001600160e01b038085166001600160e01b03198316179092559192911680610bcd5750670de0b6b3a76400005b6000610bd98284610fa2565b905060007f0000000000000000000000000000000000000000000000000000000000000000610c71576040516370a0823160e01b81526001600160a01b0388811660048301528916906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190610f07565b610d03565b604051631a50ef2f60e01b81526001600160a01b03898116600483015288811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a50ef2f90604401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190610f07565b90506000670de0b6b3a7640000610d236001600160e01b03851684610f36565b610d2d9190610f55565b6001600160a01b03891660009081526005602052604081205491925090610d55908390610fca565b6001600160a01b03808b16600081815260056020526040908190208490555192935091908c16907f35a61f3c719e8f59f636c336e563ba74f667fadafcc80d709231ca8bb59eecce90610dbd9086908b909182526001600160e01b0316602082015260400190565b60405180910390a39998505050505050505050565b6001600160a01b0381168114610de757600080fd5b50565b60008060408385031215610dfd57600080fd5b8235610e0881610dd2565b91506020830135610e1881610dd2565b809150509250929050565b600060208284031215610e3557600080fd5b8135610e4081610dd2565b9392505050565b600080600060608486031215610e5c57600080fd5b8335610e6781610dd2565b92506020840135610e7781610dd2565b91506040840135610e8781610dd2565b809150509250925092565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600060208284031215610eca57600080fd5b81518015158114610e4057600080fd5b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610f1957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610f5057610f50610f20565b500290565b600082610f7257634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160e01b03828116848216808303821115610f9957610f99610f20565b01949350505050565b60006001600160e01b0383811690831681811015610fc257610fc2610f20565b039392505050565b60008219821115610fdd57610fdd610f20565b50019056fea2646970667358221220484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb3464736f6c634300080a0033000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ab5497d7116100ad578063c2ee3a0811610071578063c2ee3a0814610323578063cc6bc10114610332578063e6e162e81461035a578063f046ee5c1461036c578063f7c618c11461037f57600080fd5b8063ab5497d7146102ab578063abc6d72d146102d2578063b006340d146102ea578063b9be44ac146102fd578063bf7e214f1461031057600080fd5b80637a9e5e4b116100f45780637a9e5e4b146101d05780637fb5ad38146101e35780638da5cb5b146102115780638fb009131461023c578063a7a9a62c1461024f57600080fd5b8063116139d31461013157806313af4035146101825780631c9161e0146101975780631e83409a146101aa5780634e081c95146101bd575b600080fd5b61016561013f366004610dea565b60046020908152600092835260408084209091529082529020546001600160e01b031681565b6040516001600160e01b0390911681526020015b60405180910390f35b610195610190366004610e23565b6103a6565b005b6101956101a5366004610dea565b61042c565b6101956101b8366004610e23565b61043b565b6101956101cb366004610e47565b61054b565b6101956101de366004610e23565b61055d565b6102036101f1366004610e23565b60056020526000908152604090205481565b604051908152602001610179565b600054610224906001600160a01b031681565b6040516001600160a01b039091168152602001610179565b61019561024a366004610e23565b610647565b61028761025d366004610e23565b6003602052600090815260409020546001600160e01b03811690600160e01b900463ffffffff1682565b604080516001600160e01b03909316835263ffffffff909116602083015201610179565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6102da600181565b6040519015158152602001610179565b6101956102f8366004610e23565b6106cb565b61020361030b366004610dea565b610781565b600154610224906001600160a01b031681565b610165670de0b6b3a764000081565b610345610340366004610e47565b6107f7565b60408051928352602083019190915201610179565b610195610368366004610dea565b5050565b600254610224906001600160a01b031681565b6102247f000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5281565b6103bc336000356001600160e01b031916610880565b6103e15760405162461bcd60e51b81526004016103d890610e92565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b6104368282610781565b505050565b6001600160a01b0381166000908152600560205260409020548015610368576001600160a01b03828116600081815260056020526040808220919091555163a9059cbb60e01b81526004810191909152602481018390527f000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd529091169063a9059cbb906044016020604051808303816000875af11580156104df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105039190610eb8565b50816001600160a01b03167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc678260405161053f91815260200190565b60405180910390a25050565b6105568383836107f7565b5050505050565b6000546001600160a01b03163314806105f2575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906105b190339030906001600160e01b03196000351690600401610eda565b602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f29190610eb8565b6105fb57600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b61065d336000356001600160e01b031916610880565b6106795760405162461bcd60e51b81526004016103d890610e92565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fc88394d92ca818942c423842b933c023fc08dbdb030fcaf02ac41b89e2d1d9f690600090a35050565b6106e1336000356001600160e01b031916610880565b6106fd5760405162461bcd60e51b81526004016103d890610e92565b604080518082018252670de0b6b3a7640000815263ffffffff42811660208084019182526001600160a01b0386166000818152600390925285822094519251909316600160e01b026001600160e01b03929092169190911790925591517fc3dfb88ee5301cecf05761fb2728064e5b641524346ae69b9ba80394631bf11f9190a250565b6001600160a01b03821660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff1692820192909252906107d65760009150506107f1565b6107e0848261092a565b90506107ed848483610b74565b9150505b92915050565b6001600160a01b03831660009081526003602090815260408083208151808301909252546001600160e01b038116808352600160e01b90910463ffffffff16928201929092528291610850576000809250925050610878565b61085a868261092a565b9050610867868683610b74565b610872878684610b74565b92509250505b935093915050565b6001546000906001600160a01b0316801580159061090a575060405163b700961360e01b81526001600160a01b0382169063b7009613906108c990879030908890600401610eda565b602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190610eb8565b806107ed57506000546001600160a01b0385811691161491505092915050565b6040805180820190915260008082526020820152600254602083015160405163b334db7b60e01b81526001600160a01b03868116600483015263ffffffff9092166024820152600092919091169063b334db7b906044016020604051808303816000875af11580156109a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c49190610f07565b83925090508015610b6d5760007f0000000000000000000000000000000000000000000000000000000000000000610a5d57846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190610f07565b610ae7565b604051631e1932fb60e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690631e1932fb90602401602060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae79190610f07565b604080518082019091529091508082610b08670de0b6b3a764000086610f36565b610b129190610f55565b8651610b1e9190610f77565b6001600160e01b03908116825263ffffffff4281166020938401526001600160a01b03891660009081526003845260409020845193850151909116600160e01b02929091169190911790559250505b5092915050565b80516001600160a01b038481166000908152600460209081526040808320938716835292905290812080546001600160e01b038085166001600160e01b03198316179092559192911680610bcd5750670de0b6b3a76400005b6000610bd98284610fa2565b905060007f0000000000000000000000000000000000000000000000000000000000000000610c71576040516370a0823160e01b81526001600160a01b0388811660048301528916906370a0823190602401602060405180830381865afa158015610c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6c9190610f07565b610d03565b604051631a50ef2f60e01b81526001600160a01b03898116600483015288811660248301527f00000000000000000000000000000000000000000000000000000000000000001690631a50ef2f90604401602060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190610f07565b90506000670de0b6b3a7640000610d236001600160e01b03851684610f36565b610d2d9190610f55565b6001600160a01b03891660009081526005602052604081205491925090610d55908390610fca565b6001600160a01b03808b16600081815260056020526040908190208490555192935091908c16907f35a61f3c719e8f59f636c336e563ba74f667fadafcc80d709231ca8bb59eecce90610dbd9086908b909182526001600160e01b0316602082015260400190565b60405180910390a39998505050505050505050565b6001600160a01b0381168114610de757600080fd5b50565b60008060408385031215610dfd57600080fd5b8235610e0881610dd2565b91506020830135610e1881610dd2565b809150509250929050565b600060208284031215610e3557600080fd5b8135610e4081610dd2565b9392505050565b600080600060608486031215610e5c57600080fd5b8335610e6781610dd2565b92506020840135610e7781610dd2565b91506040840135610e8781610dd2565b809150509250925092565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b600060208284031215610eca57600080fd5b81518015158114610e4057600080fd5b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610f1957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610f5057610f50610f20565b500290565b600082610f7257634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160e01b03828116848216808303821115610f9957610f99610f20565b01949350505050565b60006001600160e01b0383811690831681811015610fc257610fc2610f20565b039392505050565b60008219821115610fdd57610fdd610f20565b50019056fea2646970667358221220484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb3464736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xD533a949740bb3306d119CC777fa900bA034cd52
Arg [1] : _flywheelRewards (address): 0x0000000000000000000000000000000000000000
Arg [2] : _flywheelBooster (address): 0x0000000000000000000000000000000000000000
Arg [3] : _owner (address): 0xB290f2F3FAd4E540D0550985951Cdad2711ac34A
Arg [4] : _authority (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000b290f2f3fad4e540d0550985951cdad2711ac34a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

17142:740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12268:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12268:62:0;;;;;;-1:-1:-1;;;;;741:32:1;;;723:51;;711:2;696:18;12268:62:0;;;;;;;;8825:151;;;;;;:::i;:::-;;:::i;:::-;;17537:121;;;;;;:::i;:::-;;:::i;14492:283::-;;;;;;:::i;:::-;;:::i;17752:127::-;;;;;;:::i;:::-;;:::i;8375:442::-;;;;;;:::i;:::-;;:::i;12414:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2034:25:1;;;2022:2;2007:18;12414:49:0;1888:177:1;7404:20:0;;;;;-1:-1:-1;;;;;7404:20:0;;;;;;-1:-1:-1;;;;;2234:32:1;;;2216:51;;2204:2;2189:18;7404:20:0;2070:203:1;13378:296:0;;;;;;:::i;:::-;;:::i;12171:49::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12171:49:0;;;-1:-1:-1;;;12171:49:0;;;;;;;;;;-1:-1:-1;;;;;3023:32:1;;;3005:51;;3104:10;3092:23;;;3087:2;3072:18;;3065:51;2978:18;12171:49:0;2833:289:1;11956:49:0;;;;;17193:48;;17237:4;17193:48;;;;;3524:14:1;;3517:22;3499:41;;3487:2;3472:18;17193:48:0;3359:187:1;13054:260:0;;;;;;:::i;:::-;;:::i;13744:275::-;;;;;;:::i;:::-;;:::i;7433:26::-;;;;;-1:-1:-1;;;;;7433:26:0;;;12066:34;;12096:4;12066:34;;14085:350;;;;;;:::i;:::-;;:::i;:::-;;;;3950:25:1;;;4006:2;3991:18;;3984:34;;;;3923:18;14085:350:0;3776:248:1;17666:78:0;;;;;;:::i;:::-;14531:244;14492:283;;11823:39;;;;;-1:-1:-1;;;;;11823:39:0;;;11721:34;;;;;8825:151;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;;;;;;;;;8900:5:::1;:16:::0;;-1:-1:-1;;;;;;8900:16:0::1;-1:-1:-1::0;;;;;8900:16:0;::::1;::::0;;::::1;::::0;;8934:34:::1;::::0;8900:16;;8947:10:::1;::::0;8934:34:::1;::::0;8900:5;8934:34:::1;8825:151:::0;:::o;17537:121::-;17624:24;17631:6;17639:8;17624:6;:24::i;:::-;;17537:121;;:::o;14492:283::-;-1:-1:-1;;;;;14560:21:0;;14542:15;14560:21;;;:14;:21;;;;;;14598:12;;14594:174;;-1:-1:-1;;;;;14627:21:0;;;14651:1;14627:21;;;:14;:21;;;;;;:25;;;;14669:36;-1:-1:-1;;;14669:36:0;;;;;4997:51:1;;;;5064:18;;;5057:34;;;14669:11:0;:20;;;;;;4970:18:1;;14669:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14741:5;-1:-1:-1;;;;;14728:28:0;;14748:7;14728:28;;;;2034:25:1;;2022:2;2007:18;;1888:177;14728:28:0;;;;;;;;14531:244;14492:283;:::o;17752:127::-;17847:24;17854:6;17862:3;17867;17847:6;:24::i;:::-;;;17752:127;;;:::o;8375:442::-;8649:5;;-1:-1:-1;;;;;8649:5:0;8635:10;:19;;:76;;-1:-1:-1;8658:9:0;;:53;;-1:-1:-1;;;8658:53:0;;-1:-1:-1;;;;;8658:9:0;;;;:17;;:53;;8676:10;;8696:4;;-1:-1:-1;;;;;;8658:9:0;8703:7;;;8658:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8627:85;;;;;;8725:9;:24;;-1:-1:-1;;;;;;8725:24:0;-1:-1:-1;;;;;8725:24:0;;;;;;;;8767:42;;8784:10;;8767:42;;-1:-1:-1;;8767:42:0;8375:442;:::o;13378:296::-;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;13513:15:::1;::::0;;-1:-1:-1;;;;;13542:36:0;;::::1;-1:-1:-1::0;;;;;;13542:36:0;::::1;::::0;::::1;::::0;;;13596:70:::1;::::0;13513:15;::::1;::::0;13542:36;13513:15;;13596:70:::1;::::0;13476:26:::1;::::0;13596:70:::1;13465:209;13378:296:::0;:::o;13054:260::-;7741:33;7754:10;7766:7;;-1:-1:-1;;;;;;7766:7:0;7741:12;:33::i;:::-;7733:58;;;;-1:-1:-1;;;7733:58:0;;;;;;;:::i;:::-;13152:110:::1;::::0;;;;::::1;::::0;;12096:4:::1;13152:110:::0;;::::1;13234:15;13152:110:::0;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;13130:19:0;::::1;-1:-1:-1::0;13130:19:0;;;:11:::1;:19:::0;;;;;;:132;;;;;;::::1;-1:-1:-1::0;;;13130:132:0::1;-1:-1:-1::0;;;;;13130:132:0;;;::::1;::::0;;;::::1;::::0;;;13280:26;;::::1;::::0;-1:-1:-1;13280:26:0::1;13054:260:::0;:::o;13744:275::-;-1:-1:-1;;;;;13852:19:0;;13804:7;13852:19;;;:11;:19;;;;;;;;13824:47;;;;;;;;;-1:-1:-1;;;;;13824:47:0;;;;;-1:-1:-1;;;13824:47:0;;;;;;;;;;;;;13884:30;;13913:1;13906:8;;;;;13884:30;13935:27;13948:6;13956:5;13935:12;:27::i;:::-;13927:35;;13980:31;13991:6;13999:4;14005:5;13980:10;:31::i;:::-;13973:38;;;13744:275;;;;;:::o;14085:350::-;-1:-1:-1;;;;;14222:19:0;;14165:7;14222:19;;;:11;:19;;;;;;;;14194:47;;;;;;;;;-1:-1:-1;;;;;14194:47:0;;;;;-1:-1:-1;;;14194:47:0;;;;;;;;;;;;14165:7;;14254:35;;14284:1;14287;14276:13;;;;;;;14254:35;14310:27;14323:6;14331:5;14310:12;:27::i;:::-;14302:35;;14356:31;14367:6;14375:4;14381:5;14356:10;:31::i;:::-;14389:37;14400:6;14408:10;14420:5;14389:10;:37::i;:::-;14348:79;;;;;14085:350;;;;;;;:::o;7821:546::-;7942:9;;7908:4;;-1:-1:-1;;;;;7942:9:0;8264:27;;;;;:77;;-1:-1:-1;8295:46:0;;-1:-1:-1;;;8295:46:0;;-1:-1:-1;;;;;8295:12:0;;;;;:46;;8308:4;;8322;;8329:11;;8295:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8263:96;;;-1:-1:-1;8354:5:0;;-1:-1:-1;;;;;8346:13:0;;;8354:5;;8346:13;8256:103;;;7821:546;;;;:::o;14838:932::-;-1:-1:-1;;;;;;;;;;;;;;;;;15046:15:0;;15088:26;;;;15046:69;;-1:-1:-1;;;15046:69:0;;-1:-1:-1;;;;;5992:32:1;;;15046:69:0;;;5974:51:1;6073:10;6061:23;;;6041:18;;;6034:51;15015:28:0;;15046:15;;;;;:33;;5947:18:1;;15046:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15143:5;;-1:-1:-1;15015:100:0;-1:-1:-1;15163:24:0;;15159:604;;15290:20;15313:13;:80;;15373:6;-1:-1:-1;;;;;15373:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15313:80;;;15329:42;;-1:-1:-1;;;15329:42:0;;-1:-1:-1;;;;;2234:32:1;;;15329:42:0;;;2216:51:1;15329:15:0;:34;;;;2189:18:1;;15329:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15519:183;;;;;;;;;15290:103;;-1:-1:-1;15519:183:0;15290:103;15580:26;12096:4;15580:20;:26;:::i;:::-;:41;;;;:::i;:::-;15558:11;;:64;;;;:::i;:::-;-1:-1:-1;;;;;15519:183:0;;;;;;15670:15;15519:183;;;;;;;-1:-1:-1;;;;;15717:19:0;;-1:-1:-1;15717:19:0;;;:11;:19;;;;;:34;;;;;;;;;-1:-1:-1;;;15717:34:0;;;;;;;;;;;15504:198;-1:-1:-1;;15159:604:0;14951:819;14838:932;;;;:::o;15846:1289::-;16005:11;;-1:-1:-1;;;;;16051:17:0;;;15938:7;16051:17;;;:9;:17;;;;;;;;:23;;;;;;;;;;;;;-1:-1:-1;;;;;16125:37:0;;;-1:-1:-1;;;;;;16125:37:0;;;;;;15938:7;;16005:11;16051:23;;16373:70;;-1:-1:-1;12096:4:0;16373:70;16455:18;16476:27;16490:13;16476:11;:27;:::i;:::-;16455:48;;16598:22;16623:13;:87;;16688:22;;-1:-1:-1;;;16688:22:0;;-1:-1:-1;;;;;2234:32:1;;;16688:22:0;;;2216:51:1;16688:16:0;;;;;2189:18:1;;16688:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16623:87;;;16639:46;;-1:-1:-1;;;16639:46:0;;-1:-1:-1;;;;;7534:15:1;;;16639:46:0;;;7516:34:1;7586:15;;;7566:18;;;7559:43;16639:15:0;:32;;;;7451:18:1;;16639:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16598:112;-1:-1:-1;16830:21:0;12096:4;16854:27;-1:-1:-1;;;;;16854:27:0;;16598:112;16854:27;:::i;:::-;:33;;;;:::i;:::-;-1:-1:-1;;;;;16924:20:0;;16898:23;16924:20;;;:14;:20;;;;;;16830:57;;-1:-1:-1;16898:23:0;16924:36;;16830:57;;16924:36;:::i;:::-;-1:-1:-1;;;;;16981:20:0;;;;;;;:14;:20;;;;;;;:38;;;17037:55;16898:62;;-1:-1:-1;16981:20:0;17037:55;;;;;;;;17065:13;;17080:11;;7920:25:1;;;-1:-1:-1;;;;;7981:32:1;7976:2;7961:18;;7954:60;7908:2;7893:18;;7746:274;17037:55:0;;;;;;;;17112:15;15846:1289;-1:-1:-1;;;;;;;;;15846:1289:0:o;14:138:1:-;-1:-1:-1;;;;;96:31:1;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:415::-;238:6;246;299:2;287:9;278:7;274:23;270:32;267:52;;;315:1;312;305:12;267:52;354:9;341:23;373:38;405:5;373:38;:::i;:::-;430:5;-1:-1:-1;487:2:1;472:18;;459:32;500:40;459:32;500:40;:::i;:::-;559:7;549:17;;;157:415;;;;;:::o;785:254::-;844:6;897:2;885:9;876:7;872:23;868:32;865:52;;;913:1;910;903:12;865:52;952:9;939:23;971:38;1003:5;971:38;:::i;:::-;1028:5;785:254;-1:-1:-1;;;785:254:1:o;1044:563::-;1134:6;1142;1150;1203:2;1191:9;1182:7;1178:23;1174:32;1171:52;;;1219:1;1216;1209:12;1171:52;1258:9;1245:23;1277:38;1309:5;1277:38;:::i;:::-;1334:5;-1:-1:-1;1391:2:1;1376:18;;1363:32;1404:40;1363:32;1404:40;:::i;:::-;1463:7;-1:-1:-1;1522:2:1;1507:18;;1494:32;1535:40;1494:32;1535:40;:::i;:::-;1594:7;1584:17;;;1044:563;;;;;:::o;4482:336::-;4684:2;4666:21;;;4723:2;4703:18;;;4696:30;-1:-1:-1;;;4757:2:1;4742:18;;4735:42;4809:2;4794:18;;4482:336::o;5102:277::-;5169:6;5222:2;5210:9;5201:7;5197:23;5193:32;5190:52;;;5238:1;5235;5228:12;5190:52;5270:9;5264:16;5323:5;5316:13;5309:21;5302:5;5299:32;5289:60;;5345:1;5342;5335:12;5384:400;-1:-1:-1;;;;;5640:15:1;;;5622:34;;5692:15;;;;5687:2;5672:18;;5665:43;-1:-1:-1;;;;;;5744:33:1;;;5739:2;5724:18;;5717:61;5572:2;5557:18;;5384:400::o;6096:184::-;6166:6;6219:2;6207:9;6198:7;6194:23;6190:32;6187:52;;;6235:1;6232;6225:12;6187:52;-1:-1:-1;6258:16:1;;6096:184;-1:-1:-1;6096:184:1:o;6285:127::-;6346:10;6341:3;6337:20;6334:1;6327:31;6377:4;6374:1;6367:15;6401:4;6398:1;6391:15;6417:168;6457:7;6523:1;6519;6515:6;6511:14;6508:1;6505:21;6500:1;6493:9;6486:17;6482:45;6479:71;;;6530:18;;:::i;:::-;-1:-1:-1;6570:9:1;;6417:168::o;6590:217::-;6630:1;6656;6646:132;;6700:10;6695:3;6691:20;6688:1;6681:31;6735:4;6732:1;6725:15;6763:4;6760:1;6753:15;6646:132;-1:-1:-1;6792:9:1;;6590:217::o;6812:238::-;6852:3;-1:-1:-1;;;;;6919:10:1;;;6949;;;6979:12;;;6971:21;;6968:47;;;6995:18;;:::i;:::-;7031:13;;6812:238;-1:-1:-1;;;;6812:238:1:o;7055:231::-;7095:4;-1:-1:-1;;;;;7193:10:1;;;;7163;;7215:12;;;7212:38;;;7230:18;;:::i;:::-;7267:13;;7055:231;-1:-1:-1;;;7055:231:1:o;7613:128::-;7653:3;7684:1;7680:6;7677:1;7674:13;7671:39;;;7690:18;;:::i;:::-;-1:-1:-1;7726:9:1;;7613:128::o

Swarm Source

ipfs://484f874cfe659571a66d9d9937d2c359ecd069da70cc19af8e32f0b155f2bb34

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.