ETH Price: $2,046.54 (-4.75%)

Contract

0x5c8A93bFEF107a49Ab40b4cCaBA77F575DD3c5eC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x6106a060236390022025-10-23 8:25:59154 days ago1761207959  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xAC5BA25B...D0a13EE8F
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
AssetList

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

import "./IPriceFeed.sol";
import "./IERC20NonStandard.sol";
import "./CometMainInterface.sol";
import "./CometCore.sol";

/**
 * @title Compound's Asset List
 * @author Compound
 */
contract AssetList {
    /// @dev The decimals required for a price feed
    uint8 internal constant PRICE_FEED_DECIMALS = 8;

    /// @dev The scale for factors
    uint64 internal constant FACTOR_SCALE = 1e18;

    /// @dev The max value for a collateral factor (1)
    uint64 internal constant MAX_COLLATERAL_FACTOR = FACTOR_SCALE;

    uint256 internal immutable asset00_a;
    uint256 internal immutable asset00_b;
    uint256 internal immutable asset01_a;
    uint256 internal immutable asset01_b;
    uint256 internal immutable asset02_a;
    uint256 internal immutable asset02_b;
    uint256 internal immutable asset03_a;
    uint256 internal immutable asset03_b;
    uint256 internal immutable asset04_a;
    uint256 internal immutable asset04_b;
    uint256 internal immutable asset05_a;
    uint256 internal immutable asset05_b;
    uint256 internal immutable asset06_a;
    uint256 internal immutable asset06_b;
    uint256 internal immutable asset07_a;
    uint256 internal immutable asset07_b;
    uint256 internal immutable asset08_a;
    uint256 internal immutable asset08_b;
    uint256 internal immutable asset09_a;
    uint256 internal immutable asset09_b;
    uint256 internal immutable asset10_a;
    uint256 internal immutable asset10_b;
    uint256 internal immutable asset11_a;
    uint256 internal immutable asset11_b;
    uint256 internal immutable asset12_a;
    uint256 internal immutable asset12_b;
    uint256 internal immutable asset13_a;
    uint256 internal immutable asset13_b;
    uint256 internal immutable asset14_a;
    uint256 internal immutable asset14_b;
    uint256 internal immutable asset15_a;
    uint256 internal immutable asset15_b;
    uint256 internal immutable asset16_a;
    uint256 internal immutable asset16_b;
    uint256 internal immutable asset17_a;
    uint256 internal immutable asset17_b;
    uint256 internal immutable asset18_a;
    uint256 internal immutable asset18_b;
    uint256 internal immutable asset19_a;
    uint256 internal immutable asset19_b;
    uint256 internal immutable asset20_a;
    uint256 internal immutable asset20_b;
    uint256 internal immutable asset21_a;
    uint256 internal immutable asset21_b;
    uint256 internal immutable asset22_a;
    uint256 internal immutable asset22_b;
    uint256 internal immutable asset23_a;
    uint256 internal immutable asset23_b;

    /// @notice The number of assets this contract actually supports
    uint8 public immutable numAssets;
    
    constructor(CometConfiguration.AssetConfig[] memory assetConfigs) {
        uint8 _numAssets = uint8(assetConfigs.length);
        numAssets = _numAssets;
        
        (asset00_a, asset00_b) = getPackedAssetInternal(assetConfigs, 0);
        (asset01_a, asset01_b) = getPackedAssetInternal(assetConfigs, 1);
        (asset02_a, asset02_b) = getPackedAssetInternal(assetConfigs, 2);
        (asset03_a, asset03_b) = getPackedAssetInternal(assetConfigs, 3);
        (asset04_a, asset04_b) = getPackedAssetInternal(assetConfigs, 4);
        (asset05_a, asset05_b) = getPackedAssetInternal(assetConfigs, 5);
        (asset06_a, asset06_b) = getPackedAssetInternal(assetConfigs, 6);
        (asset07_a, asset07_b) = getPackedAssetInternal(assetConfigs, 7);
        (asset08_a, asset08_b) = getPackedAssetInternal(assetConfigs, 8);
        (asset09_a, asset09_b) = getPackedAssetInternal(assetConfigs, 9);
        (asset10_a, asset10_b) = getPackedAssetInternal(assetConfigs, 10);
        (asset11_a, asset11_b) = getPackedAssetInternal(assetConfigs, 11);
        (asset12_a, asset12_b) = getPackedAssetInternal(assetConfigs, 12);
        (asset13_a, asset13_b) = getPackedAssetInternal(assetConfigs, 13);
        (asset14_a, asset14_b) = getPackedAssetInternal(assetConfigs, 14);
        (asset15_a, asset15_b) = getPackedAssetInternal(assetConfigs, 15);
        (asset16_a, asset16_b) = getPackedAssetInternal(assetConfigs, 16);
        (asset17_a, asset17_b) = getPackedAssetInternal(assetConfigs, 17);
        (asset18_a, asset18_b) = getPackedAssetInternal(assetConfigs, 18);
        (asset19_a, asset19_b) = getPackedAssetInternal(assetConfigs, 19);
        (asset20_a, asset20_b) = getPackedAssetInternal(assetConfigs, 20);
        (asset21_a, asset21_b) = getPackedAssetInternal(assetConfigs, 21);
        (asset22_a, asset22_b) = getPackedAssetInternal(assetConfigs, 22);
        (asset23_a, asset23_b) = getPackedAssetInternal(assetConfigs, 23);
    }

    /**
     * @dev Checks and gets the packed asset info for storage in 2 variables
     * - in first variable, the asset address is stored in the lower 160 bits (address can be interpreted as uint160),
     *      the borrow collateral factor in the next 16 bits,
     *      the liquidate collateral factor in the next 16 bits,
     *      and the liquidation factor in the next 16 bits
     * - in the second variable, the price feed address is stored in the lower 160 bits,
     *      the asset decimals in the next 8 bits,
     *      and the supply cap in the next 64 bits
     * @param assetConfigs The asset configurations
     * @param i The index of the asset info to get
     * @return The packed asset info
     */
    function getPackedAssetInternal(CometConfiguration.AssetConfig[] memory assetConfigs, uint i) internal view returns (uint256, uint256) {
        CometConfiguration.AssetConfig memory assetConfig;
        if (i < assetConfigs.length) {
            assembly {
                assetConfig := mload(add(add(assetConfigs, 0x20), mul(i, 0x20)))
            }
        } else {
            return (0, 0);
        }
        address asset = assetConfig.asset;
        address priceFeed = assetConfig.priceFeed;
        uint8 decimals_ = assetConfig.decimals;

        // Short-circuit if asset is nil
        if (asset == address(0)) {
            return (0, 0);
        }

        // Sanity check price feed and asset decimals
        if (IPriceFeed(priceFeed).decimals() != PRICE_FEED_DECIMALS) revert CometMainInterface.BadDecimals();
        if (IERC20NonStandard(asset).decimals() != decimals_) revert CometMainInterface.BadDecimals();

        // Ensure collateral factors are within range
        if (assetConfig.borrowCollateralFactor >= assetConfig.liquidateCollateralFactor) revert CometMainInterface.BorrowCFTooLarge();
        if (assetConfig.liquidateCollateralFactor > MAX_COLLATERAL_FACTOR) revert CometMainInterface.LiquidateCFTooLarge();

        unchecked {
            // Keep 4 decimals for each factor
            uint64 descale = FACTOR_SCALE / 1e4;
            uint16 borrowCollateralFactor = uint16(assetConfig.borrowCollateralFactor / descale);
            uint16 liquidateCollateralFactor = uint16(assetConfig.liquidateCollateralFactor / descale);
            uint16 liquidationFactor = uint16(assetConfig.liquidationFactor / descale);

            // Be nice and check descaled values are still within range
            if (borrowCollateralFactor >= liquidateCollateralFactor) revert CometMainInterface.BorrowCFTooLarge();

            // Keep whole units of asset for supply cap
            uint64 supplyCap = uint64(assetConfig.supplyCap / (10 ** decimals_));

            uint256 word_a = (uint160(asset) << 0 |
                              uint256(borrowCollateralFactor) << 160 |
                              uint256(liquidateCollateralFactor) << 176 |
                              uint256(liquidationFactor) << 192);
            uint256 word_b = (uint160(priceFeed) << 0 |
                              uint256(decimals_) << 160 |
                              uint256(supplyCap) << 168);

            return (word_a, word_b);
        }
    }

    /**
     * @notice Get the i-th asset info, according to the order they were passed in originally
     * @param i The index of the asset info to get
     * @return The asset info object
     */
    function getAssetInfo(uint8 i) public view returns (CometCore.AssetInfo memory) {
        if (i >= numAssets) revert CometMainInterface.BadAsset();
        uint256 word_a;
        uint256 word_b;
        if(i == 0){
            word_a = asset00_a;
            word_b = asset00_b;
        }
        if(i == 1){
            word_a = asset01_a;
            word_b = asset01_b;
        }
        if(i == 2){
            word_a = asset02_a;
            word_b = asset02_b;
        }
        if(i == 3){
            word_a = asset03_a;
            word_b = asset03_b;
        }
        if(i == 4){
            word_a = asset04_a;
            word_b = asset04_b;
        }
        if(i == 5){
            word_a = asset05_a;
            word_b = asset05_b;
        }
        if(i == 6){
            word_a = asset06_a;
            word_b = asset06_b;
        }
        if(i == 7){
            word_a = asset07_a;
            word_b = asset07_b;
        }
        if(i == 8){
            word_a = asset08_a;
            word_b = asset08_b;
        }
        if(i == 9){
            word_a = asset09_a;
            word_b = asset09_b;
        }
        if(i == 10){
            word_a = asset10_a;
            word_b = asset10_b;
        }
        if(i == 11){
            word_a = asset11_a;
            word_b = asset11_b;
        }
        if(i == 12){
            word_a = asset12_a;
            word_b = asset12_b;
        }
        if(i == 13){
            word_a = asset13_a;
            word_b = asset13_b;
        }
        if(i == 14){
            word_a = asset14_a;
            word_b = asset14_b;
        }
        if(i == 15){
            word_a = asset15_a;
            word_b = asset15_b;
        }
        if(i == 16){
            word_a = asset16_a;
            word_b = asset16_b;
        }
        if(i == 17){
            word_a = asset17_a;
            word_b = asset17_b;
        }
        if(i == 18){
            word_a = asset18_a;
            word_b = asset18_b;
        }
        if(i == 19){
            word_a = asset19_a;
            word_b = asset19_b;
        }
        if(i == 20){
            word_a = asset20_a;
            word_b = asset20_b;
        }
        if(i == 21){
            word_a = asset21_a;
            word_b = asset21_b;
        }
        if(i == 22){
            word_a = asset22_a;
            word_b = asset22_b;
        }
        if(i == 23){
            word_a = asset23_a;
            word_b = asset23_b;
        }

        address asset = address(uint160(word_a & type(uint160).max));
        uint64 rescale = FACTOR_SCALE / 1e4;
        uint64 borrowCollateralFactor = uint64(((word_a >> 160) & type(uint16).max) * rescale);
        uint64 liquidateCollateralFactor = uint64(((word_a >> 176) & type(uint16).max) * rescale);
        uint64 liquidationFactor = uint64(((word_a >> 192) & type(uint16).max) * rescale);

        address priceFeed = address(uint160(word_b & type(uint160).max));
        uint8 decimals_ = uint8(((word_b >> 160) & type(uint8).max));
        uint64 scale = uint64(10 ** decimals_);
        uint128 supplyCap = uint128(((word_b >> 168) & type(uint64).max) * scale);

        return CometCore.AssetInfo({
            offset: i,
            asset: asset,
            priceFeed: priceFeed,
            scale: scale,
            borrowCollateralFactor: borrowCollateralFactor,
            liquidateCollateralFactor: liquidateCollateralFactor,
            liquidationFactor: liquidationFactor,
            supplyCap: supplyCap
         });
    }
}

File 2 of 8 : CometConfiguration.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @title Compound's Comet Configuration Interface
 * @author Compound
 */
contract CometConfiguration {
    struct ExtConfiguration {
        bytes32 name32;
        bytes32 symbol32;
    }

    struct Configuration {
        address governor;
        address pauseGuardian;
        address baseToken;
        address baseTokenPriceFeed;
        address extensionDelegate;

        uint64 supplyKink;
        uint64 supplyPerYearInterestRateSlopeLow;
        uint64 supplyPerYearInterestRateSlopeHigh;
        uint64 supplyPerYearInterestRateBase;
        uint64 borrowKink;
        uint64 borrowPerYearInterestRateSlopeLow;
        uint64 borrowPerYearInterestRateSlopeHigh;
        uint64 borrowPerYearInterestRateBase;
        uint64 storeFrontPriceFactor;
        uint64 trackingIndexScale;
        uint64 baseTrackingSupplySpeed;
        uint64 baseTrackingBorrowSpeed;
        uint104 baseMinForRewards;
        uint104 baseBorrowMin;
        uint104 targetReserves;

        AssetConfig[] assetConfigs;
    }

    struct AssetConfig {
        address asset;
        address priceFeed;
        uint8 decimals;
        uint64 borrowCollateralFactor;
        uint64 liquidateCollateralFactor;
        uint64 liquidationFactor;
        uint128 supplyCap;
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

import "./CometConfiguration.sol";
import "./CometStorage.sol";
import "./CometMath.sol";

abstract contract CometCore is CometConfiguration, CometStorage, CometMath {
    struct AssetInfo {
        uint8 offset;
        address asset;
        address priceFeed;
        uint64 scale;
        uint64 borrowCollateralFactor;
        uint64 liquidateCollateralFactor;
        uint64 liquidationFactor;
        uint128 supplyCap;
    }

    /** Internal constants **/

    /// @dev The max number of assets this contract is hardcoded to support
    ///  Do not change this variable without updating all the fields throughout the contract,
    //    including the size of UserBasic.assetsIn and corresponding integer conversions.
    uint8 internal constant MAX_ASSETS = 15;

    /// @dev The max number of decimals base token can have
    ///  Note this cannot just be increased arbitrarily.
    uint8 internal constant MAX_BASE_DECIMALS = 18;

    /// @dev The max value for a collateral factor (1)
    uint64 internal constant MAX_COLLATERAL_FACTOR = FACTOR_SCALE;

    /// @dev Offsets for specific actions in the pause flag bit array
    uint8 internal constant PAUSE_SUPPLY_OFFSET = 0;
    uint8 internal constant PAUSE_TRANSFER_OFFSET = 1;
    uint8 internal constant PAUSE_WITHDRAW_OFFSET = 2;
    uint8 internal constant PAUSE_ABSORB_OFFSET = 3;
    uint8 internal constant PAUSE_BUY_OFFSET = 4;

    /// @dev The decimals required for a price feed
    uint8 internal constant PRICE_FEED_DECIMALS = 8;

    /// @dev 365 days * 24 hours * 60 minutes * 60 seconds
    uint64 internal constant SECONDS_PER_YEAR = 31_536_000;

    /// @dev The scale for base tracking accrual
    uint64 internal constant BASE_ACCRUAL_SCALE = 1e6;

    /// @dev The scale for base index (depends on time/rate scales, not base token)
    uint64 internal constant BASE_INDEX_SCALE = 1e15;

    /// @dev The scale for prices (in USD)
    uint64 internal constant PRICE_SCALE = uint64(10 ** PRICE_FEED_DECIMALS);

    /// @dev The scale for factors
    uint64 internal constant FACTOR_SCALE = 1e18;

    /// @dev The storage slot for reentrancy guard flags
    bytes32 internal constant REENTRANCY_GUARD_FLAG_SLOT = bytes32(keccak256("comet.reentrancy.guard"));

    /// @dev The reentrancy guard statuses
    uint256 internal constant REENTRANCY_GUARD_NOT_ENTERED = 0;
    uint256 internal constant REENTRANCY_GUARD_ENTERED = 1;

    /**
     * @notice Determine if the manager has permission to act on behalf of the owner
     * @param owner The owner account
     * @param manager The manager account
     * @return Whether or not the manager has permission
     */
    function hasPermission(address owner, address manager) public view returns (bool) {
        return owner == manager || isAllowed[owner][manager];
    }

    /**
     * @dev The positive present supply balance if positive or the negative borrow balance if negative
     */
    function presentValue(int104 principalValue_) internal view returns (int256) {
        if (principalValue_ >= 0) {
            return signed256(presentValueSupply(baseSupplyIndex, uint104(principalValue_)));
        } else {
            return -signed256(presentValueBorrow(baseBorrowIndex, uint104(-principalValue_)));
        }
    }

    /**
     * @dev The principal amount projected forward by the supply index
     */
    function presentValueSupply(uint64 baseSupplyIndex_, uint104 principalValue_) internal pure returns (uint256) {
        return uint256(principalValue_) * baseSupplyIndex_ / BASE_INDEX_SCALE;
    }

    /**
     * @dev The principal amount projected forward by the borrow index
     */
    function presentValueBorrow(uint64 baseBorrowIndex_, uint104 principalValue_) internal pure returns (uint256) {
        return uint256(principalValue_) * baseBorrowIndex_ / BASE_INDEX_SCALE;
    }

    /**
     * @dev The positive principal if positive or the negative principal if negative
     */
    function principalValue(int256 presentValue_) internal view returns (int104) {
        if (presentValue_ >= 0) {
            return signed104(principalValueSupply(baseSupplyIndex, uint256(presentValue_)));
        } else {
            return -signed104(principalValueBorrow(baseBorrowIndex, uint256(-presentValue_)));
        }
    }

    /**
     * @dev The present value projected backward by the supply index (rounded down)
     *  Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals.
     */
    function principalValueSupply(uint64 baseSupplyIndex_, uint256 presentValue_) internal pure returns (uint104) {
        return safe104((presentValue_ * BASE_INDEX_SCALE) / baseSupplyIndex_);
    }

    /**
     * @dev The present value projected backward by the borrow index (rounded up)
     *  Note: This will overflow (revert) at 2^104/1e18=~20 trillion principal for assets with 18 decimals.
     */
    function principalValueBorrow(uint64 baseBorrowIndex_, uint256 presentValue_) internal pure returns (uint104) {
        return safe104((presentValue_ * BASE_INDEX_SCALE + baseBorrowIndex_ - 1) / baseBorrowIndex_);
    }
}

File 4 of 8 : CometMainInterface.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

import "./CometCore.sol";

/**
 * @title Compound's Comet Main Interface (without Ext)
 * @notice An efficient monolithic money market protocol
 * @author Compound
 */
abstract contract CometMainInterface is CometCore {
    error Absurd();
    error AlreadyInitialized();
    error BadAsset();
    error BadDecimals();
    error BadDiscount();
    error BadMinimum();
    error BadPrice();
    error BorrowTooSmall();
    error BorrowCFTooLarge();
    error InsufficientReserves();
    error LiquidateCFTooLarge();
    error NoSelfTransfer();
    error NotCollateralized();
    error NotForSale();
    error NotLiquidatable();
    error Paused();
    error ReentrantCallBlocked();
    error SupplyCapExceeded();
    error TimestampTooLarge();
    error TooManyAssets();
    error TooMuchSlippage();
    error TransferInFailed();
    error TransferOutFailed();
    error Unauthorized();

    event Supply(address indexed from, address indexed dst, uint amount);
    event Transfer(address indexed from, address indexed to, uint amount);
    event Withdraw(address indexed src, address indexed to, uint amount);

    event SupplyCollateral(address indexed from, address indexed dst, address indexed asset, uint amount);
    event TransferCollateral(address indexed from, address indexed to, address indexed asset, uint amount);
    event WithdrawCollateral(address indexed src, address indexed to, address indexed asset, uint amount);

    /// @notice Event emitted when a borrow position is absorbed by the protocol
    event AbsorbDebt(address indexed absorber, address indexed borrower, uint basePaidOut, uint usdValue);

    /// @notice Event emitted when a user's collateral is absorbed by the protocol
    event AbsorbCollateral(address indexed absorber, address indexed borrower, address indexed asset, uint collateralAbsorbed, uint usdValue);

    /// @notice Event emitted when a collateral asset is purchased from the protocol
    event BuyCollateral(address indexed buyer, address indexed asset, uint baseAmount, uint collateralAmount);

    /// @notice Event emitted when an action is paused/unpaused
    event PauseAction(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused);

    /// @notice Event emitted when reserves are withdrawn by the governor
    event WithdrawReserves(address indexed to, uint amount);

    function supply(address asset, uint amount) virtual external;
    function supplyTo(address dst, address asset, uint amount) virtual external;
    function supplyFrom(address from, address dst, address asset, uint amount) virtual external;

    function transfer(address dst, uint amount) virtual external returns (bool);
    function transferFrom(address src, address dst, uint amount) virtual external returns (bool);

    function transferAsset(address dst, address asset, uint amount) virtual external;
    function transferAssetFrom(address src, address dst, address asset, uint amount) virtual external;

    function withdraw(address asset, uint amount) virtual external;
    function withdrawTo(address to, address asset, uint amount) virtual external;
    function withdrawFrom(address src, address to, address asset, uint amount) virtual external;

    function approveThis(address manager, address asset, uint amount) virtual external;
    function withdrawReserves(address to, uint amount) virtual external;

    function absorb(address absorber, address[] calldata accounts) virtual external;
    function buyCollateral(address asset, uint minAmount, uint baseAmount, address recipient) virtual external;
    function quoteCollateral(address asset, uint baseAmount) virtual public view returns (uint);

    function getAssetInfo(uint8 i) virtual public view returns (AssetInfo memory);
    function getAssetInfoByAddress(address asset) virtual public view returns (AssetInfo memory);
    function getCollateralReserves(address asset) virtual public view returns (uint);
    function getReserves() virtual public view returns (int);
    function getPrice(address priceFeed) virtual public view returns (uint);

    function isBorrowCollateralized(address account) virtual public view returns (bool);
    function isLiquidatable(address account) virtual public view returns (bool);

    function totalSupply() virtual external view returns (uint256);
    function totalBorrow() virtual external view returns (uint256);
    function balanceOf(address owner) virtual public view returns (uint256);
    function borrowBalanceOf(address account) virtual public view returns (uint256);

    function pause(bool supplyPaused, bool transferPaused, bool withdrawPaused, bool absorbPaused, bool buyPaused) virtual external;
    function isSupplyPaused() virtual public view returns (bool);
    function isTransferPaused() virtual public view returns (bool);
    function isWithdrawPaused() virtual public view returns (bool);
    function isAbsorbPaused() virtual public view returns (bool);
    function isBuyPaused() virtual public view returns (bool);

    function accrueAccount(address account) virtual external;
    function getSupplyRate(uint utilization) virtual public view returns (uint64);
    function getBorrowRate(uint utilization) virtual public view returns (uint64);
    function getUtilization() virtual public view returns (uint);

    function governor() virtual external view returns (address);
    function pauseGuardian() virtual external view returns (address);
    function baseToken() virtual external view returns (address);
    function baseTokenPriceFeed() virtual external view returns (address);
    function extensionDelegate() virtual external view returns (address);

    /// @dev uint64
    function supplyKink() virtual external view returns (uint);
    /// @dev uint64
    function supplyPerSecondInterestRateSlopeLow() virtual external view returns (uint);
    /// @dev uint64
    function supplyPerSecondInterestRateSlopeHigh() virtual external view returns (uint);
    /// @dev uint64
    function supplyPerSecondInterestRateBase() virtual external view returns (uint);
    /// @dev uint64
    function borrowKink() virtual external view returns (uint);
    /// @dev uint64
    function borrowPerSecondInterestRateSlopeLow() virtual external view returns (uint);
    /// @dev uint64
    function borrowPerSecondInterestRateSlopeHigh() virtual external view returns (uint);
    /// @dev uint64
    function borrowPerSecondInterestRateBase() virtual external view returns (uint);
    /// @dev uint64
    function storeFrontPriceFactor() virtual external view returns (uint);

    /// @dev uint64
    function baseScale() virtual external view returns (uint);
    /// @dev uint64
    function trackingIndexScale() virtual external view returns (uint);

    /// @dev uint64
    function baseTrackingSupplySpeed() virtual external view returns (uint);
    /// @dev uint64
    function baseTrackingBorrowSpeed() virtual external view returns (uint);
    /// @dev uint104
    function baseMinForRewards() virtual external view returns (uint);
    /// @dev uint104
    function baseBorrowMin() virtual external view returns (uint);
    /// @dev uint104
    function targetReserves() virtual external view returns (uint);

    function numAssets() virtual external view returns (uint8);
    function decimals() virtual external view returns (uint8);

    function initializeStorage() virtual external;
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @title Compound's Comet Math Contract
 * @dev Pure math functions
 * @author Compound
 */
contract CometMath {
    /** Custom errors **/

    error InvalidUInt64();
    error InvalidUInt104();
    error InvalidUInt128();
    error InvalidInt104();
    error InvalidInt256();
    error NegativeNumber();

    function safe64(uint n) internal pure returns (uint64) {
        if (n > type(uint64).max) revert InvalidUInt64();
        return uint64(n);
    }

    function safe104(uint n) internal pure returns (uint104) {
        if (n > type(uint104).max) revert InvalidUInt104();
        return uint104(n);
    }

    function safe128(uint n) internal pure returns (uint128) {
        if (n > type(uint128).max) revert InvalidUInt128();
        return uint128(n);
    }

    function signed104(uint104 n) internal pure returns (int104) {
        if (n > uint104(type(int104).max)) revert InvalidInt104();
        return int104(n);
    }

    function signed256(uint256 n) internal pure returns (int256) {
        if (n > uint256(type(int256).max)) revert InvalidInt256();
        return int256(n);
    }

    function unsigned104(int104 n) internal pure returns (uint104) {
        if (n < 0) revert NegativeNumber();
        return uint104(n);
    }

    function unsigned256(int256 n) internal pure returns (uint256) {
        if (n < 0) revert NegativeNumber();
        return uint256(n);
    }

    function toUInt8(bool x) internal pure returns (uint8) {
        return x ? 1 : 0;
    }

    function toBool(uint8 x) internal pure returns (bool) {
        return x != 0;
    }
}

File 6 of 8 : CometStorage.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @title Compound's Comet Storage Interface
 * @dev Versions can enforce append-only storage slots via inheritance.
 * @author Compound
 */
contract CometStorage {
    // 512 bits total = 2 slots
    struct TotalsBasic {
        // 1st slot
        uint64 baseSupplyIndex;
        uint64 baseBorrowIndex;
        uint64 trackingSupplyIndex;
        uint64 trackingBorrowIndex;
        // 2nd slot
        uint104 totalSupplyBase;
        uint104 totalBorrowBase;
        uint40 lastAccrualTime;
        uint8 pauseFlags;
    }

    struct TotalsCollateral {
        uint128 totalSupplyAsset;
        uint128 _reserved;
    }

    struct UserBasic {
        int104 principal;
        uint64 baseTrackingIndex;
        uint64 baseTrackingAccrued;
        uint16 assetsIn;
        uint8 _reserved;
    }

    struct UserCollateral {
        uint128 balance;
        uint128 _reserved;
    }

    struct LiquidatorPoints {
        uint32 numAbsorbs;
        uint64 numAbsorbed;
        uint128 approxSpend;
        uint32 _reserved;
    }

    /// @dev Aggregate variables tracked for the entire market
    uint64 internal baseSupplyIndex;
    uint64 internal baseBorrowIndex;
    uint64 internal trackingSupplyIndex;
    uint64 internal trackingBorrowIndex;
    uint104 internal totalSupplyBase;
    uint104 internal totalBorrowBase;
    uint40 internal lastAccrualTime;
    uint8 internal pauseFlags;

    /// @notice Aggregate variables tracked for each collateral asset
    mapping(address => TotalsCollateral) public totalsCollateral;

    /// @notice Mapping of users to accounts which may be permitted to manage the user account
    mapping(address => mapping(address => bool)) public isAllowed;

    /// @notice The next expected nonce for an address, for validating authorizations via signature
    mapping(address => uint) public userNonce;

    /// @notice Mapping of users to base principal and other basic data
    mapping(address => UserBasic) public userBasic;

    /// @notice Mapping of users to collateral data per collateral asset
    mapping(address => mapping(address => UserCollateral)) public userCollateral;

    /// @notice Mapping of magic liquidator points
    mapping(address => LiquidatorPoints) public liquidatorPoints;
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @title IERC20NonStandard
 * @dev Version of ERC20 with no return values for `approve`, `transfer`, and `transferFrom`
 *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
 */
interface IERC20NonStandard {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (-1 means infinite)
     */
    function approve(address spender, uint256 amount) external;

    /**
     * @notice Transfer `value` tokens from `msg.sender` to `to`
     * @param to The address of the destination account
     * @param value The number of tokens to transfer
     */
    function transfer(address to, uint256 value) external;

    /**
     * @notice Transfer `value` tokens from `from` to `to`
     * @param from The address of the source account
     * @param to The address of the destination account
     * @param value The number of tokens to transfer
     */
    function transferFrom(address from, address to, uint256 value) external;

    /**
     * @notice Gets the balance of the specified address
     * @param account The address from which the balance will be retrieved
     */
    function balanceOf(address account) external view returns (uint256);
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;

/**
 * @dev Interface for price feeds used by Comet
 * Note This is Chainlink's AggregatorV3Interface, but without the `getRoundData` function.
 */
interface IPriceFeed {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

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":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometConfiguration.AssetConfig[]","name":"assetConfigs","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadAsset","type":"error"},{"inputs":[],"name":"BadDecimals","type":"error"},{"inputs":[],"name":"BorrowCFTooLarge","type":"error"},{"inputs":[],"name":"LiquidateCFTooLarge","type":"error"},{"inputs":[{"internalType":"uint8","name":"i","type":"uint8"}],"name":"getAssetInfo","outputs":[{"components":[{"internalType":"uint8","name":"offset","type":"uint8"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint64","name":"scale","type":"uint64"},{"internalType":"uint64","name":"borrowCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidateCollateralFactor","type":"uint64"},{"internalType":"uint64","name":"liquidationFactor","type":"uint64"},{"internalType":"uint128","name":"supplyCap","type":"uint128"}],"internalType":"struct CometCore.AssetInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numAssets","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]

0x6106a0604052346200021b576200001f62000019620002a3565b620003fc565b604051610b479081620009c5823960805181610a0e015260a05181610a31015260c051816109c3015260e051816109e6015261010051816109780152610120518161099b0152610140518161092d01526101605181610950015261018051816108e201526101a0518161090501526101c0518161089701526101e051816108ba0152610200518161084c0152610220518161086f0152610240518161080101526102605181610824015261028051816107b601526102a051816107d901526102c0518161076b01526102e0518161078e0152610300518161072001526103205181610743015261034051816106d5015261036051816106f80152610380518161068a01526103a051816106ad01526103c0518161063f01526103e05181610662015261040051816105f401526104205181610617015261044051816105a9015261046051816105cc0152610480518161055e01526104a0518161058101526104c0518161051301526104e05181610536015261050051816104c8015261052051816104eb0152610540518161047d015261056051816104a00152610580518161043201526105a0518161045501526105c051816103e701526105e0518161040a0152610600518161039c015261062051816103bf015261064051816103510152610660518161037401526106805181818160920152610a890152f35b600080fd5b50634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b038211908210176200025b57604052565b6200026562000220565b604052565b51906001600160a01b03821682036200021b57565b519060ff821682036200021b57565b51906001600160401b03821682036200021b57565b6200150c8038039060409180835192620002be828562000237565b83398101602080838303126200021b5782516001600160401b03938482116200021b57019180601f840112156200021b578251938411620003ec575b8451946200030e838660051b018762000237565b848652828601918360e0809702860101948186116200021b578401925b8584106200033d575050505050505090565b86848303126200021b5782519062000356888362000237565b62000361856200026a565b8252620003708686016200026a565b86830152620003818486016200027f565b848301526060620003948187016200028e565b908301526080620003a78187016200028e565b9083015260a0620003ba8187016200028e565b9083015260c085810151929091906001600160801b03841684036200021b57899388938201528152019301926200032b565b620003f662000220565b620002fa565b6017620005f8916200040f815160ff1690565b6106805262000420600082620006bd565b60a05260805262000433600182620006bd565b60e05260c05262000446600282620006bd565b61012052610100526200045b600382620006bd565b610160526101405262000470600482620006bd565b6101a0526101805262000485600582620006bd565b6101e0526101c0526200049a600682620006bd565b6102205261020052620004af600782620006bd565b6102605261024052620004c4600882620006bd565b6102a05261028052620004d9600982620006bd565b6102e0526102c052620004ee600a82620006bd565b610320526103005262000503600b82620006bd565b610360526103405262000518600c82620006bd565b6103a052610380526200052d600d82620006bd565b6103e0526103c05262000542600e82620006bd565b610420526104005262000557600f82620006bd565b61046052610440526200056c601082620006bd565b6104a0526104805262000581601182620006bd565b6104e0526104c05262000596601282620006bd565b6105205261050052620005ab601382620006bd565b6105605261054052620005c0601482620006bd565b6105a05261058052620005d5601582620006bd565b6105e0526105c052620005ea601682620006bd565b6106205261060052620006bd565b6106605261064052565b604051906200061360e08362000237565b8160c06000918281528260208201528260408201528260608201528260808201528260a08201520152565b908160209103126200021b5762000655906200027f565b90565b506040513d6000823e3d90fd5b50634e487b7160e01b600052601260045260246000fd5b6001600160401b03918216919082156200069557160490565b6200069f62000665565b160490565b8115620006af570490565b620006b962000665565b0490565b620006c762000602565b508051821015620009ba5760059190911b016020015180516001600160a01b0316602082810151909391906001600160a01b03166040936200070c8582015160ff1690565b926001600160a01b03908116928315620009ac57169185519663313ce56760e01b90818952600860ff60049a83818d818b5afa9081156200099c575b6000916200097a575b5016036200096a5760ff91885190815281818b81875afa9182156200095a575b60009262000926575b505081861691829116036200091657606083018051608085018051909592916001600160401b0390811691620007b891165b6001600160401b031690565b6001600160401b03918216101562000906578551670de0b6b3a76400009182916001600160401b03161611620008f6576200083262000847620008326200082c999a9b9c9d946200082c62000839620008326200081c6127106200085e996200067c565b809e81955160018060401b031690565b6200067c565b61ffff1690565b9a516001600160401b031690565b60a08501519098906001600160401b03166200067c565b9961ffff8088169087161015620008e957505060c001516200089591620007ac91600a9190910a906001600160801b0316620006a4565b60a092831b61ffff60a01b169190911760b09390931b61ffff60b01b169290921760c09690961b61ffff60c01b1695909517949290921b60ff60a01b161760a89190911b600160a81b600160e81b03161790565b5163327d763960e21b8152fd5b89516304d6b32560e41b81528b90fd5b895163327d763960e21b81528b90fd5b8651630456c65960e51b81528890fd5b6200094a9250803d1062000952575b62000941818362000237565b8101906200063e565b38806200077a565b503d62000935565b6200096462000658565b62000771565b8751630456c65960e51b81528990fd5b620009959150843d8611620009525762000941818362000237565b3862000751565b620009a662000658565b62000748565b506000965086955050505050565b505060009060009056fe608080604052600436101561001357600080fd5b600090813560e01c908163a46fe83b14610a70575063c8c7fe6b1461003757600080fd5b34610a6d576020366003190112610a6d5760043560ff81168103610a6957610100918060e061006585610aad565b8281528260208201528260408201528260608201528260808201528260a08201528260c0820152015260ff7f00000000000000000000000000000000000000000000000000000000000000001660ff83161015610a5757808060ff841615610a0c575b600160ff8516146109c1575b600260ff851614610976575b600360ff85161461092b575b600460ff8516146108e0575b600560ff851614610895575b600660ff85161461084a575b600760ff8516146107ff575b600860ff8516146107b4575b600960ff851614610769575b600a60ff85161461071e575b600b60ff8516146106d3575b600c60ff851614610688575b600d60ff85161461063d575b600e60ff8516146105f2575b600f60ff8516146105a7575b601060ff85161461055c575b601160ff851614610511575b601260ff8516146104c6575b601360ff85161461047b575b601460ff851614610430575b601560ff8516146103e5575b601660ff85161461039a575b601760ff85161461034f575b655af3107a400061ffff6001600160401b036101fe8360a088901c8416610ae8565b16906102316001600160401b0361021b8560b08a901c8516610ae8565b16936001600160401b039260c089901c16610ae8565b169260ff8560a01c1690604d821161033b5750600a0a6001600160401b03908116906001600160801b039061026d90839060a889901c16610ae8565b169461027889610aad565b9660ff8916885260018060a01b0316602088015260018060a01b031660408701526060860152608085015260a084015260c083015260e082015260ff6040519216825260018060a01b03602082015116602083015260018060a01b03604082015116604083015260018060401b03606082015116606083015260018060401b03608082015116608083015260018060401b0360a08201511660a083015260018060401b0360c08201511660c083015260e060018060801b039101511660e0820152f35b634e487b7160e01b81526011600452602490fd5b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101dc565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101d0565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101c4565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101b8565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101ac565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101a0565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610194565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610188565b7f000000000000000000000000000000000000000000000000000000000000000092507f0000000000000000000000000000000000000000000000000000000000000000915061017c565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610170565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610164565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610158565b7f000000000000000000000000000000000000000000000000000000000000000092507f0000000000000000000000000000000000000000000000000000000000000000915061014c565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610140565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610134565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610128565b7f000000000000000000000000000000000000000000000000000000000000000092507f0000000000000000000000000000000000000000000000000000000000000000915061011c565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610110565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610104565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506100f8565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506100ec565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506100e0565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506100d4565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506100c8565b604051633640530560e01b8152600490fd5b5080fd5b80fd5b905034610a695781600319360112610a695760209060ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6040519190601f01601f191682016001600160401b03811183821017610ad257604052565b634e487b7160e01b600052604160045260246000fd5b8060001904821181151516610afb570290565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220156b2c45d9782c265a2ab39e241c8b6029c4e470b58c8217e90a4801a01f1fb464736f6c634300080f00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000c00e94cb662c3520282e6f5717214004a7f2688800000000000000000000000069b50ff403e995d9c4441a303438d9049dac8ccd000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000a688906bd8b000000000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c8e4c3f58d5fc4409522503927ecea057ebba1fc00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000bcbce7f1b1500000000000000000000000000000000000000000000000000000c7d713b49da0000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c0053f3fbccd593758258334dfce24c2a9a673ad00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000b72fd2103b280000000000000000000000000000000000000000000000000000c3663566a5800000000000000000000000000000000000000000000000000000ce80612991d00000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000553303d460ee0afb37edff9be42922d8ff63220e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000096fd865af4400000000000000000000000000000000000000000000000000000a4502144dca00000000000000000000000000000000000000000000000000000b84c09a3b930000000000000000000000000000000000000000000000022692484ce19d09000000000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000083b34662f65532e611a87ebed38063dec889d5a700000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000a217b21de0900000000000000000000000000000000000000000000000000000af6a4d07c8f00000000000000000000000000000000000000000000000000000b84c09a3b93000000000000000000000000000000000000000000000001a784379d99db420000000000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000a2699232b341881b1ed85d91592b7c259e029acf00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000bcbce7f1b1500000000000000000000000000000000000000000000000000000c7d713b49da0000000000000000000000000000000000000000000000000fe1c215e8f838e00000000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf0000000000000000000000000a4f4f9e84fc4f674f0d209f94d41fafe5af887d00000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000bcbce7f1b1500000000000000000000000000000000000000000000000000000d2f13f7789f000000000000000000000000000000000000000000000000000000000014f46b040000000000000000000000000018084fba666a33d37592fa2633fd49a74dd93a88000000000000000000000000aa9527bf3183a96fe6e55831c96de5cd988d348400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000bcbce7f1b1500000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000001ee656cc02b4a80000000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee0000000000000000000000004f12633d511dc3049de1ea923b7047fbed0070d200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000a688906bd8b00000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000c7d713b49da000000000000000000000000000000000000000000000000028a857425466f80000000000000000000000000000015700b564ca08d9439c58ca5053166e8317aa138000000000000000000000000471a6299c027bd81ed4d66069dc510bd0569f4f800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000c3663566a5800000000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000d529ae9e8600000000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000005c5b196abe0d54485975d1ec29617d42d9198326000000000000000000000000e4829421ae79f2f44716ccbbb40751cd6be3d48300000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000c3663566a5800000000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000422ca8b0a00a425000000000000000000000000000000a1290d69c65a6fe4df752f95823fae25cb99e5a7000000000000000000000000d6a48f6f687a5fef8a69834c49514b747012cf1c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000bcbce7f1b1500000000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000d2f13f7789f000000000000000000000000000000000000000000000000005150ae84a8cdf00000

Deployed Bytecode

0x608080604052600436101561001357600080fd5b600090813560e01c908163a46fe83b14610a70575063c8c7fe6b1461003757600080fd5b34610a6d576020366003190112610a6d5760043560ff81168103610a6957610100918060e061006585610aad565b8281528260208201528260408201528260608201528260808201528260a08201528260c0820152015260ff7f000000000000000000000000000000000000000000000000000000000000000c1660ff83161015610a5757808060ff841615610a0c575b600160ff8516146109c1575b600260ff851614610976575b600360ff85161461092b575b600460ff8516146108e0575b600560ff851614610895575b600660ff85161461084a575b600760ff8516146107ff575b600860ff8516146107b4575b600960ff851614610769575b600a60ff85161461071e575b600b60ff8516146106d3575b600c60ff851614610688575b600d60ff85161461063d575b600e60ff8516146105f2575b600f60ff8516146105a7575b601060ff85161461055c575b601160ff851614610511575b601260ff8516146104c6575b601360ff85161461047b575b601460ff851614610430575b601560ff8516146103e5575b601660ff85161461039a575b601760ff85161461034f575b655af3107a400061ffff6001600160401b036101fe8360a088901c8416610ae8565b16906102316001600160401b0361021b8560b08a901c8516610ae8565b16936001600160401b039260c089901c16610ae8565b169260ff8560a01c1690604d821161033b5750600a0a6001600160401b03908116906001600160801b039061026d90839060a889901c16610ae8565b169461027889610aad565b9660ff8916885260018060a01b0316602088015260018060a01b031660408701526060860152608085015260a084015260c083015260e082015260ff6040519216825260018060a01b03602082015116602083015260018060a01b03604082015116604083015260018060401b03606082015116606083015260018060401b03608082015116608083015260018060401b0360a08201511660a083015260018060401b0360c08201511660c083015260e060018060801b039101511660e0820152f35b634e487b7160e01b81526011600452602490fd5b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101dc565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101d0565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101c4565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101b8565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101ac565b7f000000000000000000000000000000000000000000000000000000000000000092507f000000000000000000000000000000000000000000000000000000000000000091506101a0565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610194565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610188565b7f000000000000000000000000000000000000000000000000000000000000000092507f0000000000000000000000000000000000000000000000000000000000000000915061017c565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610170565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610164565b7f000000000000000000000000000000000000000000000000000000000000000092507f00000000000000000000000000000000000000000000000000000000000000009150610158565b7f000000000000251c23282134a1290d69c65a6fe4df752f95823fae25cb99e5a792507f00000000000000000005dc12d6a48f6f687a5fef8a69834c49514b747012cf1c915061014c565b7f0000000000002580232822605c5b196abe0d54485975d1ec29617d42d919832692507f00000000000000004c4b4012e4829421ae79f2f44716ccbbb40751cd6be3d4839150610140565b7f00000000000025802328226015700b564ca08d9439c58ca5053166e8317aa13892507f00000000000000007a120012471a6299c027bd81ed4d66069dc510bd0569f4f89150610134565b7f00000000000023281f401d4ccd5fe23c85820f7b72d0926fc9b05b43e359b7ee92507f0000000000000000002ee0124f12633d511dc3049de1ea923b7047fbed0070d29150610128565b7f000000000000232821341f4018084fba666a33d37592fa2633fd49a74dd93a8892507f000000000000000000023a12aa9527bf3183a96fe6e55831c96de5cd988d3484915061011c565b7f000000000000251c21341f40cbb7c0000ab88b473b1f5afd9ef808440eed33bf92507f0000000000000000000384080a4f4f9e84fc4f674f0d209f94d41fafe5af887d9150610110565b7f000000000000232821341f407f39c581f595b53c5cb19bd0b3f8da6c935e2ca092507f00000000000000000124f812a2699232b341881b1ed85d91592b7c259e029acf9150610104565b7f000000000000206c1edc1c84514910771af9ca656af840dff83e8264ecf986ca92507f00000000000000001e84801283b34662f65532e611a87ebed38063dec889d5a791506100f8565b7f000000000000206c1ce81a901f9840a85d5af5bf1d1762f925bdaddc4201f98492507f000000000000000027ac4012553303d460ee0afb37edff9be42922d8ff63220e91506100ec565b7f00000000000024542260203ac02aaa39b223fe8d0a0e5c4f27ead9083c756cc292507f000000000000000007a12012c0053f3fbccd593758258334dfce24c2a9a673ad91506100e0565b7f000000000000232821341f402260fac5e5542a773aa44fbcfedf7c193bc2c59992507f000000000000000000271008c8e4c3f58d5fc4409522503927ecea057ebba1fc91506100d4565b7f0000000000001d4c1b581388c00e94cb662c3520282e6f5717214004a7f2688892507f00000000000000000186a01269b50ff403e995d9c4441a303438d9049dac8ccd91506100c8565b604051633640530560e01b8152600490fd5b5080fd5b80fd5b905034610a695781600319360112610a695760209060ff7f000000000000000000000000000000000000000000000000000000000000000c168152f35b6040519190601f01601f191682016001600160401b03811183821017610ad257604052565b634e487b7160e01b600052604160045260246000fd5b8060001904821181151516610afb570290565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220156b2c45d9782c265a2ab39e241c8b6029c4e470b58c8217e90a4801a01f1fb464736f6c634300080f0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.