ETH Price: $2,958.09 (-0.87%)

Contract

0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Transaction Hash
Block
From
To
Claim384689302026-01-24 1:14:4915 hrs ago1769217289IN
0x6f7D514b...063dEe486
0 ETH0.000000080.0006975
Claim384639832026-01-23 23:52:2217 hrs ago1769212342IN
0x6f7D514b...063dEe486
0 ETH0.000000060.0006974
Claim384417202026-01-23 17:41:1923 hrs ago1769190079IN
0x6f7D514b...063dEe486
0 ETH0.000000060.0005
Claim384213752026-01-23 12:02:1429 hrs ago1769169734IN
0x6f7D514b...063dEe486
0 ETH0.000000070.0006227
Claim383848782026-01-23 1:53:5739 hrs ago1769133237IN
0x6f7D514b...063dEe486
0 ETH0.000000040.0005
Claim383848382026-01-23 1:53:1739 hrs ago1769133197IN
0x6f7D514b...063dEe486
0 ETH0.000000050.0005
Claim383848112026-01-23 1:52:5039 hrs ago1769133170IN
0x6f7D514b...063dEe486
0 ETH0.000000050.0005
Claim383407242026-01-22 13:38:032 days ago1769089083IN
0x6f7D514b...063dEe486
0 ETH0.000000040.0006
Claim383407102026-01-22 13:37:492 days ago1769089069IN
0x6f7D514b...063dEe486
0 ETH0.000000070.0006
Claim383159272026-01-22 6:44:462 days ago1769064286IN
0x6f7D514b...063dEe486
0 ETH0.000000060.0006228
Claim382777072026-01-21 20:07:462 days ago1769026066IN
0x6f7D514b...063dEe486
0 ETH0.000000050.00050117
Claim382237762026-01-21 5:08:553 days ago1768972135IN
0x6f7D514b...063dEe486
0 ETH0.000000050.0006
Claim382018752026-01-20 23:03:543 days ago1768950234IN
0x6f7D514b...063dEe486
0 ETH0.000000380.003506
Claim381687142026-01-20 13:51:134 days ago1768917073IN
0x6f7D514b...063dEe486
0 ETH00.00007051
Claim381680822026-01-20 13:40:414 days ago1768916441IN
0x6f7D514b...063dEe486
0 ETH00.00000033
Claim381680342026-01-20 13:39:534 days ago1768916393IN
0x6f7D514b...063dEe486
0 ETH0.000000120.00100026
Claim381450512026-01-20 7:16:504 days ago1768893410IN
0x6f7D514b...063dEe486
0 ETH00.00010026
Claim381448512026-01-20 7:13:304 days ago1768893210IN
0x6f7D514b...063dEe486
0 ETH0.000000010.00010027
Claim381441892026-01-20 7:02:284 days ago1768892548IN
0x6f7D514b...063dEe486
0 ETH0.000000010.00010027
Claim381264222026-01-20 2:06:214 days ago1768874781IN
0x6f7D514b...063dEe486
0 ETH00.00000025
Claim381263982026-01-20 2:05:574 days ago1768874757IN
0x6f7D514b...063dEe486
0 ETH00.00000025
Claim381263702026-01-20 2:05:294 days ago1768874729IN
0x6f7D514b...063dEe486
0 ETH00.00000025
Claim380939162026-01-19 17:04:355 days ago1768842275IN
0x6f7D514b...063dEe486
0 ETH00.00000035
Claim380920842026-01-19 16:34:035 days ago1768840443IN
0x6f7D514b...063dEe486
0 ETH00.00000035
Claim380589562026-01-19 7:21:555 days ago1768807315IN
0x6f7D514b...063dEe486
0 ETH00.00000035
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xD3A6Ffc1...2AC3470A2 in Sonic Mainnet
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
CometRewards

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1 runs

Other Settings:
Default EvmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at uniscan.xyz on 2025-03-27
*/

{{
  "language": "Solidity",
  "sources": {
    "contracts/CometConfiguration.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\n/**\n * @title Compound's Comet Configuration Interface\n * @author Compound\n */\ncontract CometConfiguration {\n    struct ExtConfiguration {\n        bytes32 name32;\n        bytes32 symbol32;\n    }\n\n    struct Configuration {\n        address governor;\n        address pauseGuardian;\n        address baseToken;\n        address baseTokenPriceFeed;\n        address extensionDelegate;\n\n        uint64 supplyKink;\n        uint64 supplyPerYearInterestRateSlopeLow;\n        uint64 supplyPerYearInterestRateSlopeHigh;\n        uint64 supplyPerYearInterestRateBase;\n        uint64 borrowKink;\n        uint64 borrowPerYearInterestRateSlopeLow;\n        uint64 borrowPerYearInterestRateSlopeHigh;\n        uint64 borrowPerYearInterestRateBase;\n        uint64 storeFrontPriceFactor;\n        uint64 trackingIndexScale;\n        uint64 baseTrackingSupplySpeed;\n        uint64 baseTrackingBorrowSpeed;\n        uint104 baseMinForRewards;\n        uint104 baseBorrowMin;\n        uint104 targetReserves;\n\n        AssetConfig[] assetConfigs;\n    }\n\n    struct AssetConfig {\n        address asset;\n        address priceFeed;\n        uint8 decimals;\n        uint64 borrowCollateralFactor;\n        uint64 liquidateCollateralFactor;\n        uint64 liquidationFactor;\n        uint128 supplyCap;\n    }\n}\n"
    },
    "contracts/CometCore.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\nimport \"./CometConfiguration.sol\";\nimport \"./CometStorage.sol\";\nimport \"./CometMath.sol\";\n\nabstract contract CometCore is CometConfiguration, CometStorage, CometMath {\n    struct AssetInfo {\n        uint8 offset;\n        address asset;\n        address priceFeed;\n        uint64 scale;\n        uint64 borrowCollateralFactor;\n        uint64 liquidateCollateralFactor;\n        uint64 liquidationFactor;\n        uint128 supplyCap;\n    }\n\n    /** Internal constants **/\n\n    /// @dev The max number of assets this contract is hardcoded to support\n    ///  Do not change this variable without updating all the fields throughout the contract,\n    //    including the size of UserBasic.assetsIn and corresponding integer conversions.\n    uint8 internal constant MAX_ASSETS = 15;\n\n    /// @dev The max number of decimals base token can have\n    ///  Note this cannot just be increased arbitrarily.\n    uint8 internal constant MAX_BASE_DECIMALS = 18;\n\n    /// @dev The max value for a collateral factor (1)\n    uint64 internal constant MAX_COLLATERAL_FACTOR = FACTOR_SCALE;\n\n    /// @dev Offsets for specific actions in the pause flag bit array\n    uint8 internal constant PAUSE_SUPPLY_OFFSET = 0;\n    uint8 internal constant PAUSE_TRANSFER_OFFSET = 1;\n    uint8 internal constant PAUSE_WITHDRAW_OFFSET = 2;\n    uint8 internal constant PAUSE_ABSORB_OFFSET = 3;\n    uint8 internal constant PAUSE_BUY_OFFSET = 4;\n\n    /// @dev The decimals required for a price feed\n    uint8 internal constant PRICE_FEED_DECIMALS = 8;\n\n    /// @dev 365 days * 24 hours * 60 minutes * 60 seconds\n    uint64 internal constant SECONDS_PER_YEAR = 31_536_000;\n\n    /// @dev The scale for base tracking accrual\n    uint64 internal constant BASE_ACCRUAL_SCALE = 1e6;\n\n    /// @dev The scale for base index (depends on time/rate scales, not base token)\n    uint64 internal constant BASE_INDEX_SCALE = 1e15;\n\n    /// @dev The scale for prices (in USD)\n    uint64 internal constant PRICE_SCALE = uint64(10 ** PRICE_FEED_DECIMALS);\n\n    /// @dev The scale for factors\n    uint64 internal constant FACTOR_SCALE = 1e18;\n\n    /// @dev The storage slot for reentrancy guard flags\n    bytes32 internal constant REENTRANCY_GUARD_FLAG_SLOT = bytes32(keccak256(\"comet.reentrancy.guard\"));\n\n    /// @dev The reentrancy guard statuses\n    uint256 internal constant REENTRANCY_GUARD_NOT_ENTERED = 0;\n    uint256 internal constant REENTRANCY_GUARD_ENTERED = 1;\n\n    /**\n     * @notice Determine if the manager has permission to act on behalf of the owner\n     * @param owner The owner account\n     * @param manager The manager account\n     * @return Whether or not the manager has permission\n     */\n    function hasPermission(address owner, address manager) public view returns (bool) {\n        return owner == manager || isAllowed[owner][manager];\n    }\n\n    /**\n     * @dev The positive present supply balance if positive or the negative borrow balance if negative\n     */\n    function presentValue(int104 principalValue_) internal view returns (int256) {\n        if (principalValue_ >= 0) {\n            return signed256(presentValueSupply(baseSupplyIndex, uint104(principalValue_)));\n        } else {\n            return -signed256(presentValueBorrow(baseBorrowIndex, uint104(-principalValue_)));\n        }\n    }\n\n    /**\n     * @dev The principal amount projected forward by the supply index\n     */\n    function presentValueSupply(uint64 baseSupplyIndex_, uint104 principalValue_) internal pure returns (uint256) {\n        return uint256(principalValue_) * baseSupplyIndex_ / BASE_INDEX_SCALE;\n    }\n\n    /**\n     * @dev The principal amount projected forward by the borrow index\n     */\n    function presentValueBorrow(uint64 baseBorrowIndex_, uint104 principalValue_) internal pure returns (uint256) {\n        return uint256(principalValue_) * baseBorrowIndex_ / BASE_INDEX_SCALE;\n    }\n\n    /**\n     * @dev The positive principal if positive or the negative principal if negative\n     */\n    function principalValue(int256 presentValue_) internal view returns (int104) {\n        if (presentValue_ >= 0) {\n            return signed104(principalValueSupply(baseSupplyIndex, uint256(presentValue_)));\n        } else {\n            return -signed104(principalValueBorrow(baseBorrowIndex, uint256(-presentValue_)));\n        }\n    }\n\n    /**\n     * @dev The present value projected backward by the supply index (rounded down)\n     *  Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals.\n     */\n    function principalValueSupply(uint64 baseSupplyIndex_, uint256 presentValue_) internal pure returns (uint104) {\n        return safe104((presentValue_ * BASE_INDEX_SCALE) / baseSupplyIndex_);\n    }\n\n    /**\n     * @dev The present value projected backward by the borrow index (rounded up)\n     *  Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals.\n     */\n    function principalValueBorrow(uint64 baseBorrowIndex_, uint256 presentValue_) internal pure returns (uint104) {\n        return safe104((presentValue_ * BASE_INDEX_SCALE + baseBorrowIndex_ - 1) / baseBorrowIndex_);\n    }\n}\n"
    },
    "contracts/CometExtInterface.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\nimport \"./CometCore.sol\";\n\n/**\n * @title Compound's Comet Ext Interface\n * @notice An efficient monolithic money market protocol\n * @author Compound\n */\nabstract contract CometExtInterface is CometCore {\n    error BadAmount();\n    error BadNonce();\n    error BadSignatory();\n    error InvalidValueS();\n    error InvalidValueV();\n    error SignatureExpired();\n\n    function allow(address manager, bool isAllowed) virtual external;\n    function allowBySig(address owner, address manager, bool isAllowed, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) virtual external;\n\n    function collateralBalanceOf(address account, address asset) virtual external view returns (uint128);\n    function baseTrackingAccrued(address account) virtual external view returns (uint64);\n\n    function baseAccrualScale() virtual external view returns (uint64);\n    function baseIndexScale() virtual external view returns (uint64);\n    function factorScale() virtual external view returns (uint64);\n    function priceScale() virtual external view returns (uint64);\n\n    function maxAssets() virtual external view returns (uint8);\n\n    function totalsBasic() virtual external view returns (TotalsBasic memory);\n\n    function version() virtual external view returns (string memory);\n\n    /**\n      * ===== ERC20 interfaces =====\n      * Does not include the following functions/events, which are defined in `CometMainInterface` instead:\n      * - function decimals() virtual external view returns (uint8)\n      * - function totalSupply() virtual external view returns (uint256)\n      * - function transfer(address dst, uint amount) virtual external returns (bool)\n      * - function transferFrom(address src, address dst, uint amount) virtual external returns (bool)\n      * - function balanceOf(address owner) virtual external view returns (uint256)\n      * - event Transfer(address indexed from, address indexed to, uint256 amount)\n      */\n    function name() virtual external view returns (string memory);\n    function symbol() virtual external view returns (string memory);\n\n    /**\n      * @notice Approve `spender` to transfer up to `amount` from `src`\n      * @dev This will overwrite the approval amount for `spender`\n      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n      * @param spender The address of the account which may transfer tokens\n      * @param amount The number of tokens that are approved (-1 means infinite)\n      * @return Whether or not the approval succeeded\n      */\n    function approve(address spender, uint256 amount) virtual external returns (bool);\n\n    /**\n      * @notice Get the current allowance from `owner` for `spender`\n      * @param owner The address of the account which owns the tokens to be spent\n      * @param spender The address of the account which may transfer tokens\n      * @return The number of tokens allowed to be spent (-1 means infinite)\n      */\n    function allowance(address owner, address spender) virtual external view returns (uint256);\n\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n}"
    },
    "contracts/CometInterface.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\nimport \"./CometMainInterface.sol\";\nimport \"./CometExtInterface.sol\";\n\n/**\n * @title Compound's Comet Interface\n * @notice An efficient monolithic money market protocol\n * @author Compound\n */\nabstract contract CometInterface is CometMainInterface, CometExtInterface {}\n"
    },
    "contracts/CometMainInterface.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\nimport \"./CometCore.sol\";\n\n/**\n * @title Compound's Comet Main Interface (without Ext)\n * @notice An efficient monolithic money market protocol\n * @author Compound\n */\nabstract contract CometMainInterface is CometCore {\n    error Absurd();\n    error AlreadyInitialized();\n    error BadAsset();\n    error BadDecimals();\n    error BadDiscount();\n    error BadMinimum();\n    error BadPrice();\n    error BorrowTooSmall();\n    error BorrowCFTooLarge();\n    error InsufficientReserves();\n    error LiquidateCFTooLarge();\n    error NoSelfTransfer();\n    error NotCollateralized();\n    error NotForSale();\n    error NotLiquidatable();\n    error Paused();\n    error ReentrantCallBlocked();\n    error SupplyCapExceeded();\n    error TimestampTooLarge();\n    error TooManyAssets();\n    error TooMuchSlippage();\n    error TransferInFailed();\n    error TransferOutFailed();\n    error Unauthorized();\n\n    event Supply(address indexed from, address indexed dst, uint amount);\n    event Transfer(address indexed from, address indexed to, uint amount);\n    event Withdraw(address indexed src, address indexed to, uint amount);\n\n    event SupplyCollateral(address indexed from, address indexed dst, address indexed asset, uint amount);\n    event TransferCollateral(address indexed from, address indexed to, address indexed asset, uint amount);\n    event WithdrawCollateral(address indexed src, address indexed to, address indexed asset, uint amount);\n\n    /// @notice Event emitted when a borrow position is absorbed by the protocol\n    event AbsorbDebt(address indexed absorber, address indexed borrower, uint basePaidOut, uint usdValue);\n\n    /// @notice Event emitted when a user's collateral is absorbed by the protocol\n    event AbsorbCollateral(address indexed absorber, address indexed borrower, address indexed asset, uint collateralAbsorbed, uint usdValue);\n\n    /// @notice Event emitted when a collateral asset is purchased from the protocol\n    event BuyCollateral(address indexed buyer, address indexed asset, uint baseAmount, uint collateralAmount);\n\n    /// @notice Event emitted when an action is paused/unpaused\n    event PauseAction(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused);\n\n    /// @notice Event emitted when reserves are withdrawn by the governor\n    event WithdrawReserves(address indexed to, uint amount);\n\n    function supply(address asset, uint amount) virtual external;\n    function supplyTo(address dst, address asset, uint amount) virtual external;\n    function supplyFrom(address from, address dst, address asset, uint amount) virtual external;\n\n    function transfer(address dst, uint amount) virtual external returns (bool);\n    function transferFrom(address src, address dst, uint amount) virtual external returns (bool);\n\n    function transferAsset(address dst, address asset, uint amount) virtual external;\n    function transferAssetFrom(address src, address dst, address asset, uint amount) virtual external;\n\n    function withdraw(address asset, uint amount) virtual external;\n    function withdrawTo(address to, address asset, uint amount) virtual external;\n    function withdrawFrom(address src, address to, address asset, uint amount) virtual external;\n\n    function approveThis(address manager, address asset, uint amount) virtual external;\n    function withdrawReserves(address to, uint amount) virtual external;\n\n    function absorb(address absorber, address[] calldata accounts) virtual external;\n    function buyCollateral(address asset, uint minAmount, uint baseAmount, address recipient) virtual external;\n    function quoteCollateral(address asset, uint baseAmount) virtual public view returns (uint);\n\n    function getAssetInfo(uint8 i) virtual public view returns (AssetInfo memory);\n    function getAssetInfoByAddress(address asset) virtual public view returns (AssetInfo memory);\n    function getCollateralReserves(address asset) virtual public view returns (uint);\n    function getReserves() virtual public view returns (int);\n    function getPrice(address priceFeed) virtual public view returns (uint);\n\n    function isBorrowCollateralized(address account) virtual public view returns (bool);\n    function isLiquidatable(address account) virtual public view returns (bool);\n\n    function totalSupply() virtual external view returns (uint256);\n    function totalBorrow() virtual external view returns (uint256);\n    function balanceOf(address owner) virtual public view returns (uint256);\n    function borrowBalanceOf(address account) virtual public view returns (uint256);\n\n    function pause(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused) virtual external;\n    function isSupplyPaused() virtual public view returns (bool);\n    function isTransferPaused() virtual public view returns (bool);\n    function isWithdrawPaused() virtual public view returns (bool);\n    function isAbsorbPaused() virtual public view returns (bool);\n    function isBuyPaused() virtual public view returns (bool);\n\n    function accrueAccount(address account) virtual external;\n    function getSupplyRate(uint utilization) virtual public view returns (uint64);\n    function getBorrowRate(uint utilization) virtual public view returns (uint64);\n    function getUtilization() virtual public view returns (uint);\n\n    function governor() virtual external view returns (address);\n    function pauseGuardian() virtual external view returns (address);\n    function baseToken() virtual external view returns (address);\n    function baseTokenPriceFeed() virtual external view returns (address);\n    function extensionDelegate() virtual external view returns (address);\n\n    /// @dev uint64\n    function supplyKink() virtual external view returns (uint);\n    /// @dev uint64\n    function supplyPerSecondInterestRateSlopeLow() virtual external view returns (uint);\n    /// @dev uint64\n    function supplyPerSecondInterestRateSlopeHigh() virtual external view returns (uint);\n    /// @dev uint64\n    function supplyPerSecondInterestRateBase() virtual external view returns (uint);\n    /// @dev uint64\n    function borrowKink() virtual external view returns (uint);\n    /// @dev uint64\n    function borrowPerSecondInterestRateSlopeLow() virtual external view returns (uint);\n    /// @dev uint64\n    function borrowPerSecondInterestRateSlopeHigh() virtual external view returns (uint);\n    /// @dev uint64\n    function borrowPerSecondInterestRateBase() virtual external view returns (uint);\n    /// @dev uint64\n    function storeFrontPriceFactor() virtual external view returns (uint);\n\n    /// @dev uint64\n    function baseScale() virtual external view returns (uint);\n    /// @dev uint64\n    function trackingIndexScale() virtual external view returns (uint);\n\n    /// @dev uint64\n    function baseTrackingSupplySpeed() virtual external view returns (uint);\n    /// @dev uint64\n    function baseTrackingBorrowSpeed() virtual external view returns (uint);\n    /// @dev uint104\n    function baseMinForRewards() virtual external view returns (uint);\n    /// @dev uint104\n    function baseBorrowMin() virtual external view returns (uint);\n    /// @dev uint104\n    function targetReserves() virtual external view returns (uint);\n\n    function numAssets() virtual external view returns (uint8);\n    function decimals() virtual external view returns (uint8);\n\n    function initializeStorage() virtual external;\n}"
    },
    "contracts/CometMath.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\n/**\n * @title Compound's Comet Math Contract\n * @dev Pure math functions\n * @author Compound\n */\ncontract CometMath {\n    /** Custom errors **/\n\n    error InvalidUInt64();\n    error InvalidUInt104();\n    error InvalidUInt128();\n    error InvalidInt104();\n    error InvalidInt256();\n    error NegativeNumber();\n\n    function safe64(uint n) internal pure returns (uint64) {\n        if (n > type(uint64).max) revert InvalidUInt64();\n        return uint64(n);\n    }\n\n    function safe104(uint n) internal pure returns (uint104) {\n        if (n > type(uint104).max) revert InvalidUInt104();\n        return uint104(n);\n    }\n\n    function safe128(uint n) internal pure returns (uint128) {\n        if (n > type(uint128).max) revert InvalidUInt128();\n        return uint128(n);\n    }\n\n    function signed104(uint104 n) internal pure returns (int104) {\n        if (n > uint104(type(int104).max)) revert InvalidInt104();\n        return int104(n);\n    }\n\n    function signed256(uint256 n) internal pure returns (int256) {\n        if (n > uint256(type(int256).max)) revert InvalidInt256();\n        return int256(n);\n    }\n\n    function unsigned104(int104 n) internal pure returns (uint104) {\n        if (n < 0) revert NegativeNumber();\n        return uint104(n);\n    }\n\n    function unsigned256(int256 n) internal pure returns (uint256) {\n        if (n < 0) revert NegativeNumber();\n        return uint256(n);\n    }\n\n    function toUInt8(bool x) internal pure returns (uint8) {\n        return x ? 1 : 0;\n    }\n\n    function toBool(uint8 x) internal pure returns (bool) {\n        return x != 0;\n    }\n}\n"
    },
    "contracts/CometRewards.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\nimport \"./CometInterface.sol\";\nimport \"./ERC20.sol\";\n\n/**\n * @title Compound's CometRewards Contract\n * @notice Hold and claim token rewards\n * @author Compound\n */\ncontract CometRewards {\n    struct RewardConfig {\n        address token;\n        uint64 rescaleFactor;\n        bool shouldUpscale;\n        // Note: We define new variables after existing variables to keep interface backwards-compatible\n        uint256 multiplier;\n    }\n\n    struct RewardOwed {\n        address token;\n        uint owed;\n    }\n\n    /// @notice The governor address which controls the contract\n    address public governor;\n\n    /// @notice Reward token address per Comet instance\n    mapping(address => RewardConfig) public rewardConfig;\n\n    /// @notice Rewards claimed per Comet instance and user account\n    mapping(address => mapping(address => uint)) public rewardsClaimed;\n\n    /// @dev The scale for factors\n    uint256 internal constant FACTOR_SCALE = 1e18;\n\n    /** Custom events **/\n\n    event GovernorTransferred(address indexed oldGovernor, address indexed newGovernor);\n    event RewardsClaimedSet(address indexed user, address indexed comet, uint256 amount);\n    event RewardClaimed(address indexed src, address indexed recipient, address indexed token, uint256 amount);\n\n    /** Custom errors **/\n\n    error AlreadyConfigured(address);\n    error BadData();\n    error InvalidUInt64(uint);\n    error NotPermitted(address);\n    error NotSupported(address);\n    error TransferOutFailed(address, uint);\n\n    /**\n     * @notice Construct a new rewards pool\n     * @param governor_ The governor who will control the contract\n     */\n    constructor(address governor_) {\n        governor = governor_;\n    }\n\n    /**\n     * @notice Set the reward token for a Comet instance\n     * @param comet The protocol instance\n     * @param token The reward token address\n     * @param multiplier The multiplier for converting a unit of accrued tracking to a unit of the reward token\n     */\n    function setRewardConfigWithMultiplier(address comet, address token, uint256 multiplier) public {\n        if (msg.sender != governor) revert NotPermitted(msg.sender);\n        if (rewardConfig[comet].token != address(0)) revert AlreadyConfigured(comet);\n\n        uint64 accrualScale = CometInterface(comet).baseAccrualScale();\n        uint8 tokenDecimals = ERC20(token).decimals();\n        uint64 tokenScale = safe64(10 ** tokenDecimals);\n        if (accrualScale > tokenScale) {\n            rewardConfig[comet] = RewardConfig({\n                token: token,\n                rescaleFactor: accrualScale / tokenScale,\n                shouldUpscale: false,\n                multiplier: multiplier\n            });\n        } else {\n            rewardConfig[comet] = RewardConfig({\n                token: token,\n                rescaleFactor: tokenScale / accrualScale,\n                shouldUpscale: true,\n                multiplier: multiplier\n            });\n        }\n    }\n\n    /**\n     * @notice Set the reward token for a Comet instance\n     * @param comet The protocol instance\n     * @param token The reward token address\n     */\n    function setRewardConfig(address comet, address token) external {\n        setRewardConfigWithMultiplier(comet, token, FACTOR_SCALE);\n    }\n\n    /**\n     * @notice Set the rewards claimed for a list of users\n     * @param comet The protocol instance to populate the data for\n     * @param users The list of users to populate the data for\n     * @param claimedAmounts The list of claimed amounts to populate the data with\n     */\n    function setRewardsClaimed(address comet, address[] calldata users, uint[] calldata claimedAmounts) external {\n        if (msg.sender != governor) revert NotPermitted(msg.sender);\n        if (users.length != claimedAmounts.length) revert BadData();\n\n        for (uint i = 0; i < users.length; ) {\n            rewardsClaimed[comet][users[i]] = claimedAmounts[i];\n            emit RewardsClaimedSet(users[i], comet, claimedAmounts[i]);\n            unchecked { i++; }\n        }\n    }\n\n    /**\n     * @notice Withdraw tokens from the contract\n     * @param token The reward token address\n     * @param to Where to send the tokens\n     * @param amount The number of tokens to withdraw\n     */\n    function withdrawToken(address token, address to, uint amount) external {\n        if (msg.sender != governor) revert NotPermitted(msg.sender);\n\n        doTransferOut(token, to, amount);\n    }\n\n    /**\n     * @notice Transfers the governor rights to a new address\n     * @param newGovernor The address of the new governor\n     */\n    function transferGovernor(address newGovernor) external {\n        if (msg.sender != governor) revert NotPermitted(msg.sender);\n\n        address oldGovernor = governor;\n        governor = newGovernor;\n        emit GovernorTransferred(oldGovernor, newGovernor);\n    }\n\n    /**\n     * @notice Calculates the amount of a reward token owed to an account\n     * @param comet The protocol instance\n     * @param account The account to check rewards for\n     */\n    function getRewardOwed(address comet, address account) external returns (RewardOwed memory) {\n        RewardConfig memory config = rewardConfig[comet];\n        if (config.token == address(0)) revert NotSupported(comet);\n\n        CometInterface(comet).accrueAccount(account);\n\n        uint claimed = rewardsClaimed[comet][account];\n        uint accrued = getRewardAccrued(comet, account, config);\n\n        uint owed = accrued > claimed ? accrued - claimed : 0;\n        return RewardOwed(config.token, owed);\n    }\n\n    /**\n     * @notice Claim rewards of token type from a comet instance to owner address\n     * @param comet The protocol instance\n     * @param src The owner to claim for\n     * @param shouldAccrue Whether or not to call accrue first\n     */\n    function claim(address comet, address src, bool shouldAccrue) external {\n        claimInternal(comet, src, src, shouldAccrue);\n    }\n\n    /**\n     * @notice Claim rewards of token type from a comet instance to a target address\n     * @param comet The protocol instance\n     * @param src The owner to claim for\n     * @param to The address to receive the rewards\n     */\n    function claimTo(address comet, address src, address to, bool shouldAccrue) external {\n        if (!CometInterface(comet).hasPermission(src, msg.sender)) revert NotPermitted(msg.sender);\n\n        claimInternal(comet, src, to, shouldAccrue);\n    }\n\n    /**\n     * @dev Claim to, assuming permitted\n     */\n    function claimInternal(address comet, address src, address to, bool shouldAccrue) internal {\n        RewardConfig memory config = rewardConfig[comet];\n        if (config.token == address(0)) revert NotSupported(comet);\n\n        if (shouldAccrue) {\n            CometInterface(comet).accrueAccount(src);\n        }\n\n        uint claimed = rewardsClaimed[comet][src];\n        uint accrued = getRewardAccrued(comet, src, config);\n\n        if (accrued > claimed) {\n            uint owed = accrued - claimed;\n            rewardsClaimed[comet][src] = accrued;\n            doTransferOut(config.token, to, owed);\n\n            emit RewardClaimed(src, to, config.token, owed);\n        }\n    }\n\n    /**\n     * @dev Calculates the reward accrued for an account on a Comet deployment\n     */\n    function getRewardAccrued(address comet, address account, RewardConfig memory config) internal view returns (uint) {\n        uint accrued = CometInterface(comet).baseTrackingAccrued(account);\n\n        if (config.shouldUpscale) {\n            accrued *= config.rescaleFactor;\n        } else {\n            accrued /= config.rescaleFactor;\n        }\n        return accrued * config.multiplier / FACTOR_SCALE;\n    }\n\n    /**\n     * @dev Safe ERC20 transfer out\n     */\n    function doTransferOut(address token, address to, uint amount) internal {\n        bool success = ERC20(token).transfer(to, amount);\n        if (!success) revert TransferOutFailed(to, amount);\n    }\n\n    /**\n     * @dev Safe cast to uint64\n     */\n    function safe64(uint n) internal pure returns (uint64) {\n        if (n > type(uint64).max) revert InvalidUInt64(n);\n        return uint64(n);\n    }\n}"
    },
    "contracts/CometStorage.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\n/**\n * @title Compound's Comet Storage Interface\n * @dev Versions can enforce append-only storage slots via inheritance.\n * @author Compound\n */\ncontract CometStorage {\n    // 512 bits total = 2 slots\n    struct TotalsBasic {\n        // 1st slot\n        uint64 baseSupplyIndex;\n        uint64 baseBorrowIndex;\n        uint64 trackingSupplyIndex;\n        uint64 trackingBorrowIndex;\n        // 2nd slot\n        uint104 totalSupplyBase;\n        uint104 totalBorrowBase;\n        uint40 lastAccrualTime;\n        uint8 pauseFlags;\n    }\n\n    struct TotalsCollateral {\n        uint128 totalSupplyAsset;\n        uint128 _reserved;\n    }\n\n    struct UserBasic {\n        int104 principal;\n        uint64 baseTrackingIndex;\n        uint64 baseTrackingAccrued;\n        uint16 assetsIn;\n        uint8 _reserved;\n    }\n\n    struct UserCollateral {\n        uint128 balance;\n        uint128 _reserved;\n    }\n\n    struct LiquidatorPoints {\n        uint32 numAbsorbs;\n        uint64 numAbsorbed;\n        uint128 approxSpend;\n        uint32 _reserved;\n    }\n\n    /// @dev Aggregate variables tracked for the entire market\n    uint64 internal baseSupplyIndex;\n    uint64 internal baseBorrowIndex;\n    uint64 internal trackingSupplyIndex;\n    uint64 internal trackingBorrowIndex;\n    uint104 internal totalSupplyBase;\n    uint104 internal totalBorrowBase;\n    uint40 internal lastAccrualTime;\n    uint8 internal pauseFlags;\n\n    /// @notice Aggregate variables tracked for each collateral asset\n    mapping(address => TotalsCollateral) public totalsCollateral;\n\n    /// @notice Mapping of users to accounts which may be permitted to manage the user account\n    mapping(address => mapping(address => bool)) public isAllowed;\n\n    /// @notice The next expected nonce for an address, for validating authorizations via signature\n    mapping(address => uint) public userNonce;\n\n    /// @notice Mapping of users to base principal and other basic data\n    mapping(address => UserBasic) public userBasic;\n\n    /// @notice Mapping of users to collateral data per collateral asset\n    mapping(address => mapping(address => UserCollateral)) public userCollateral;\n\n    /// @notice Mapping of magic liquidator points\n    mapping(address => LiquidatorPoints) public liquidatorPoints;\n}\n"
    },
    "contracts/ERC20.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.15;\n\n/**\n * @title ERC 20 Token Standard Interface\n *  https://eips.ethereum.org/EIPS/eip-20\n */\ninterface ERC20 {\n    function name() external view returns (string memory);\n    function symbol() external view returns (string memory);\n    function decimals() external view returns (uint8);\n\n    /**\n      * @notice Get the total number of tokens in circulation\n      * @return The supply of tokens\n      */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @notice Gets the balance of the specified address\n     * @param owner The address from which the balance will be retrieved\n     * @return The balance\n     */\n    function balanceOf(address owner) external view returns (uint256);\n\n    /**\n      * @notice Transfer `amount` tokens from `msg.sender` to `dst`\n      * @param dst The address of the destination account\n      * @param amount The number of tokens to transfer\n      * @return Whether or not the transfer succeeded\n      */\n    function transfer(address dst, uint256 amount) external returns (bool);\n\n    /**\n      * @notice Transfer `amount` tokens from `src` to `dst`\n      * @param src The address of the source account\n      * @param dst The address of the destination account\n      * @param amount The number of tokens to transfer\n      * @return Whether or not the transfer succeeded\n      */\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool);\n\n    /**\n      * @notice Approve `spender` to transfer up to `amount` from `src`\n      * @dev This will overwrite the approval amount for `spender`\n      *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n      * @param spender The address of the account which may transfer tokens\n      * @param amount The number of tokens that are approved (-1 means infinite)\n      * @return Whether or not the approval succeeded\n      */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n      * @notice Get the current allowance from `owner` for `spender`\n      * @param owner The address of the account which owns the tokens to be spent\n      * @param spender The address of the account which may transfer tokens\n      * @return The number of tokens allowed to be spent (-1 means infinite)\n      */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    event Transfer(address indexed from, address indexed to, uint256 amount);\n    event Approval(address indexed owner, address indexed spender, uint256 amount);\n}\n"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 1,
      "details": {
        "yulDetails": {
          "optimizerSteps": "dhfoDgvulfnTUtnIf [xa[r]scLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LsTOtfDnca[r]Iulc] jmul[jul] VcTOcul jmul"
        }
      }
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "viaIR": true,
    "libraries": {}
  }
}}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AlreadyConfigured","type":"error"},{"inputs":[],"name":"BadData","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"InvalidUInt64","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NotPermitted","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NotSupported","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"TransferOutFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"comet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimedSet","type":"event"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"bool","name":"shouldAccrue","type":"bool"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"shouldAccrue","type":"bool"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"getRewardOwed","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"owed","type":"uint256"}],"internalType":"struct CometRewards.RewardOwed","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardConfig","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint64","name":"rescaleFactor","type":"uint64"},{"internalType":"bool","name":"shouldUpscale","type":"bool"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"setRewardConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setRewardConfigWithMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"comet","type":"address"},{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"name":"setRewardsClaimed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernor","type":"address"}],"name":"transferGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x6080806040523461007857601f610e2538819003918201601f19168301916001600160401b0383118484101761007d5780849260209460405283398101031261007857516001600160a01b0381169081900361007857600080546001600160a01b031916919091179055604051610d9190816100948239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301e336671461066c575080630c340a24146106445780632289b6b8146105d757806341e0cad61461046c5780634ff85d941461038a5780636394f1611461024457806365e12392146101f357806395e36d2c146101b0578063b7034f7e14610169578063b8cc9ce6146100e55763cdc0ca091461009c57600080fd5b346100e15760603660031901126100dc576001600160a01b03903581811681036100dc5760243591821682036100dc576100d99160443591610786565b51f35b600080fd5b8280fd5b5090346100e15760203660031901126100e15781356001600160a01b0381811692918390036100dc5784549081169384330361015257506001600160a01b0319168217845551917f6fadb1c244276388aee22be93b919985a18748c021e5d48553957a48101a25608484a3f35b6024908351906319b1d90760e31b82523390820152fd5b50346100e15760603660031901126100e157356001600160a01b0380821682036100dc5760243590811681036100dc576044359081151582036100dc57806100d993610a68565b50346100e157816003193601126100e1576001600160a01b03903581811681036100dc5760243591821682036100dc576100d991670de0b6b3a764000091610786565b50346100e157816003193601126100e1576001600160a01b039035818116908190036100dc576024359182168092036100dc5783839160209552600285522090600052825280600020549051908152f35b50919034610386576060366003190112610386576001600160a01b038335818116908190036100dc576001600160401b03916024358381116103825761028d90369088016106d0565b96909360443590811161037e576102a790369083016106d0565b9091838854163303610367578189036103595750865b8881106102c957878751f35b84886102d68385876109f5565b3582825283878d8c6020956002875220926102f1918d6109f5565b6102fa90610a1b565b1660005282528960002055610310838c8a6109f5565b61031990610a1b565b866103258587896109f5565b35918b5192835216917f8bd30d9ed3a8b430389fd4df14d7791abf777bfc8b82909777ea0a1ca271ac0d91a36001016102bd565b865163a554dcdf60e01b8152fd5b6024908751906319b1d90760e31b82523390820152fd5b8680fd5b8580fd5b5080fd5b50919034610386576080366003190112610386578235926001600160a01b03808516918286036100dc5760243590828216938483036100dc5760443593841684036100dc576064359485151586036100dc57602090604488518094819363cde6804160e01b8352878301523360248301525afa908115610462578791610434575b501561041d57506100d9939495610a68565b6024908551906319b1d90760e31b82523390820152fd5b610455915060203d811161045b575b61044d8183610700565b810190610a50565b3861040b565b503d610443565b86513d89823e3d90fd5b50346100e157816003193601126100e1578035926001600160a01b0390818516908186036105d45760243595838716968781036100e157869760019751966104b48a89610700565b848852846020809901528585528888528985208a51998a916104d7608084610700565b60ff81548b81168095528d8d858060401b038360a01c1691015260e01c1615158d8d0152015460608b0152156105bd57853b156105b957895163bfe69c8d60e01b81529081018290528481602481838a5af180156105af579089939291610599575b50849561055a94955260028852898620906000528752886000205493610be8565b818111156105915761056c9250610a2f565b925b51169181845161057e8682610700565b8481520190815283519283525190820152f35b50509261056e565b946105a88161055a9697610700565b9493610539565b8a513d87823e3d90fd5b8480fd5b8951634e2c71db60e11b8152908101869052602490fd5b80fd5b50346100e15760203660031901126100e1576001600160a01b039190358281169081900361064057838291608095526001602052209060ff60018354930154928251948116855260018060401b038160a01c16602086015260e01c161515908301526060820152f35b8380fd5b505034610386578160031936011261038657905490516001600160a01b039091168152602090f35b91905034610640576060366003190112610640578035916001600160a01b039182841684036103825760243592808416840361037e5786541633036106bb575050906100d99160443591610cd4565b6319b1d90760e31b8252339082015260249150fd5b9181601f840112156100dc578235916001600160401b0383116100dc576020808501948460051b0101116100dc57565b601f909101601f19168101906001600160401b0382119082101761072357604052565b634e487b7160e01b600052604160045260246000fd5b908160209103126100dc57516001600160401b03811681036100dc5790565b6001600160401b039182169190821561077057160490565b634e487b7160e01b600052601260045260246000fd5b9160018060a01b03916000938385541633036109dd5783168085526001936020958587526040908282822054166109c55781516351076acb60e11b8152948886600481885afa9586156109bb57829661098a575b50831697825163313ce56760e01b815281816004818d5afa8015610980578390610948575b60ff915016604d8111610934576001600160401b039690600a0a87811161091e5790878a9392169081898216116000146108a9579061083d91610758565b9684519a61084c60808d610700565b8b52909616868a01908152838a0183815260608b0198895295835295522095518654935192516001600160e81b031990941691161760a09190911b600160a01b600160e01b03161790151560e01b60ff60e01b1617835551910155565b6108b291610758565b9684519a6108c160808d610700565b8b52909616868a01908152838a0182815260608b0198895295835295522095518654935192516001600160e81b031990941691161760a09190911b600160a01b600160e01b03161790151560e01b60ff60e01b1617835551910155565b602490855190624809a360e21b82526004820152fd5b634e487b7160e01b83526011600452602483fd5b508181813d8311610979575b61095e8183610700565b810103126100e1575160ff811681036100e15760ff906107ff565b503d610954565b84513d85823e3d90fd5b849196506109ad908a3d8c116109b4575b6109a58183610700565b810190610739565b95906107da565b503d61099b565b83513d84823e3d90fd5b8151633a4406b560e01b815260048101859052602490fd5b6040516319b1d90760e31b8152336004820152602490fd5b9190811015610a055760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036100dc5790565b818110610a3a570390565b634e487b7160e01b600052601160045260246000fd5b908160209103126100dc575180151581036100dc5790565b600060018060a01b03808316948583526020926001845260409788822090895191610a94608084610700565b600181549160ff88841693848752838060401b038160a01c168b88015260e01c1615158d8601520154606084015215610bbd57610b6c575b87825260028552610af0818a842098868116998a60005288528b6000205498610be8565b868111610b04575b50505050505050505050565b898593610b327f2422cac5e23c46c890fdcf42d0c64757409df6832174df639337558f09d99c689984610a2f565b9a815260028852208860005286528960002055610b53888484845116610cd4565b511696519586521693a438808080808080808080610af8565b90873b156105d457885163bfe69c8d60e01b815287851660048201528181602481838d5af18015610bb357610ba3575b5090610acc565b81610bad91610700565b38610b9c565b8a513d84823e3d90fd5b8951634e2c71db60e11b8152600481018a9052602490fd5b8060001904821181151516610a3a570290565b604051632ae6e9fd60e21b81526001600160a01b039283166004820152929160209184916024918391165afa918215610cad57600092610c8d575b5060408101516001600160401b03928316929015610c6957906060610c5b670de0b6b3a764000094610c659460208501511690610bd5565b915b015190610bd5565b0490565b602082015116908115610770576060610c6592670de0b6b3a7640000940491610c5d565b610ca691925060203d81116109b4576109a58183610700565b9038610c23565b6040513d6000823e3d90fd5b6001600160a01b039091168152602081019190915260400190565b6020604051809263a9059cbb60e01b825281600081610cf7898960048401610cb9565b03926001600160a01b03165af1908115610cad57600091610d3d575b5015610d1d575050565b610d3960405192839263701ed0db60e01b845260048401610cb9565b0390fd5b610d55915060203d811161045b5761044d8183610700565b38610d1356fea2646970667358221220da4b5670d1f7119c1f71b8282126f0acefeca3eec6d6bfdf59046106244cc79a64736f6c634300080f00330000000000000000000000002501713a67a3dedde090e42759088a7ef37d4eab

Deployed Bytecode

0x6080604081815260048036101561001557600080fd5b600092833560e01c90816301e336671461066c575080630c340a24146106445780632289b6b8146105d757806341e0cad61461046c5780634ff85d941461038a5780636394f1611461024457806365e12392146101f357806395e36d2c146101b0578063b7034f7e14610169578063b8cc9ce6146100e55763cdc0ca091461009c57600080fd5b346100e15760603660031901126100dc576001600160a01b03903581811681036100dc5760243591821682036100dc576100d99160443591610786565b51f35b600080fd5b8280fd5b5090346100e15760203660031901126100e15781356001600160a01b0381811692918390036100dc5784549081169384330361015257506001600160a01b0319168217845551917f6fadb1c244276388aee22be93b919985a18748c021e5d48553957a48101a25608484a3f35b6024908351906319b1d90760e31b82523390820152fd5b50346100e15760603660031901126100e157356001600160a01b0380821682036100dc5760243590811681036100dc576044359081151582036100dc57806100d993610a68565b50346100e157816003193601126100e1576001600160a01b03903581811681036100dc5760243591821682036100dc576100d991670de0b6b3a764000091610786565b50346100e157816003193601126100e1576001600160a01b039035818116908190036100dc576024359182168092036100dc5783839160209552600285522090600052825280600020549051908152f35b50919034610386576060366003190112610386576001600160a01b038335818116908190036100dc576001600160401b03916024358381116103825761028d90369088016106d0565b96909360443590811161037e576102a790369083016106d0565b9091838854163303610367578189036103595750865b8881106102c957878751f35b84886102d68385876109f5565b3582825283878d8c6020956002875220926102f1918d6109f5565b6102fa90610a1b565b1660005282528960002055610310838c8a6109f5565b61031990610a1b565b866103258587896109f5565b35918b5192835216917f8bd30d9ed3a8b430389fd4df14d7791abf777bfc8b82909777ea0a1ca271ac0d91a36001016102bd565b865163a554dcdf60e01b8152fd5b6024908751906319b1d90760e31b82523390820152fd5b8680fd5b8580fd5b5080fd5b50919034610386576080366003190112610386578235926001600160a01b03808516918286036100dc5760243590828216938483036100dc5760443593841684036100dc576064359485151586036100dc57602090604488518094819363cde6804160e01b8352878301523360248301525afa908115610462578791610434575b501561041d57506100d9939495610a68565b6024908551906319b1d90760e31b82523390820152fd5b610455915060203d811161045b575b61044d8183610700565b810190610a50565b3861040b565b503d610443565b86513d89823e3d90fd5b50346100e157816003193601126100e1578035926001600160a01b0390818516908186036105d45760243595838716968781036100e157869760019751966104b48a89610700565b848852846020809901528585528888528985208a51998a916104d7608084610700565b60ff81548b81168095528d8d858060401b038360a01c1691015260e01c1615158d8d0152015460608b0152156105bd57853b156105b957895163bfe69c8d60e01b81529081018290528481602481838a5af180156105af579089939291610599575b50849561055a94955260028852898620906000528752886000205493610be8565b818111156105915761056c9250610a2f565b925b51169181845161057e8682610700565b8481520190815283519283525190820152f35b50509261056e565b946105a88161055a9697610700565b9493610539565b8a513d87823e3d90fd5b8480fd5b8951634e2c71db60e11b8152908101869052602490fd5b80fd5b50346100e15760203660031901126100e1576001600160a01b039190358281169081900361064057838291608095526001602052209060ff60018354930154928251948116855260018060401b038160a01c16602086015260e01c161515908301526060820152f35b8380fd5b505034610386578160031936011261038657905490516001600160a01b039091168152602090f35b91905034610640576060366003190112610640578035916001600160a01b039182841684036103825760243592808416840361037e5786541633036106bb575050906100d99160443591610cd4565b6319b1d90760e31b8252339082015260249150fd5b9181601f840112156100dc578235916001600160401b0383116100dc576020808501948460051b0101116100dc57565b601f909101601f19168101906001600160401b0382119082101761072357604052565b634e487b7160e01b600052604160045260246000fd5b908160209103126100dc57516001600160401b03811681036100dc5790565b6001600160401b039182169190821561077057160490565b634e487b7160e01b600052601260045260246000fd5b9160018060a01b03916000938385541633036109dd5783168085526001936020958587526040908282822054166109c55781516351076acb60e11b8152948886600481885afa9586156109bb57829661098a575b50831697825163313ce56760e01b815281816004818d5afa8015610980578390610948575b60ff915016604d8111610934576001600160401b039690600a0a87811161091e5790878a9392169081898216116000146108a9579061083d91610758565b9684519a61084c60808d610700565b8b52909616868a01908152838a0183815260608b0198895295835295522095518654935192516001600160e81b031990941691161760a09190911b600160a01b600160e01b03161790151560e01b60ff60e01b1617835551910155565b6108b291610758565b9684519a6108c160808d610700565b8b52909616868a01908152838a0182815260608b0198895295835295522095518654935192516001600160e81b031990941691161760a09190911b600160a01b600160e01b03161790151560e01b60ff60e01b1617835551910155565b602490855190624809a360e21b82526004820152fd5b634e487b7160e01b83526011600452602483fd5b508181813d8311610979575b61095e8183610700565b810103126100e1575160ff811681036100e15760ff906107ff565b503d610954565b84513d85823e3d90fd5b849196506109ad908a3d8c116109b4575b6109a58183610700565b810190610739565b95906107da565b503d61099b565b83513d84823e3d90fd5b8151633a4406b560e01b815260048101859052602490fd5b6040516319b1d90760e31b8152336004820152602490fd5b9190811015610a055760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036100dc5790565b818110610a3a570390565b634e487b7160e01b600052601160045260246000fd5b908160209103126100dc575180151581036100dc5790565b600060018060a01b03808316948583526020926001845260409788822090895191610a94608084610700565b600181549160ff88841693848752838060401b038160a01c168b88015260e01c1615158d8601520154606084015215610bbd57610b6c575b87825260028552610af0818a842098868116998a60005288528b6000205498610be8565b868111610b04575b50505050505050505050565b898593610b327f2422cac5e23c46c890fdcf42d0c64757409df6832174df639337558f09d99c689984610a2f565b9a815260028852208860005286528960002055610b53888484845116610cd4565b511696519586521693a438808080808080808080610af8565b90873b156105d457885163bfe69c8d60e01b815287851660048201528181602481838d5af18015610bb357610ba3575b5090610acc565b81610bad91610700565b38610b9c565b8a513d84823e3d90fd5b8951634e2c71db60e11b8152600481018a9052602490fd5b8060001904821181151516610a3a570290565b604051632ae6e9fd60e21b81526001600160a01b039283166004820152929160209184916024918391165afa918215610cad57600092610c8d575b5060408101516001600160401b03928316929015610c6957906060610c5b670de0b6b3a764000094610c659460208501511690610bd5565b915b015190610bd5565b0490565b602082015116908115610770576060610c6592670de0b6b3a7640000940491610c5d565b610ca691925060203d81116109b4576109a58183610700565b9038610c23565b6040513d6000823e3d90fd5b6001600160a01b039091168152602081019190915260400190565b6020604051809263a9059cbb60e01b825281600081610cf7898960048401610cb9565b03926001600160a01b03165af1908115610cad57600091610d3d575b5015610d1d575050565b610d3960405192839263701ed0db60e01b845260048401610cb9565b0390fd5b610d55915060203d811161045b5761044d8183610700565b38610d1356fea2646970667358221220da4b5670d1f7119c1f71b8282126f0acefeca3eec6d6bfdf59046106244cc79a64736f6c634300080f0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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