Source Code
Overview
MNT Balance
MNT Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CometExtAssetList
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 "./CometExt.sol";
contract CometExtAssetList is CometExt {
/// @notice The address of the asset list factory
address immutable public assetListFactory;
/**
* @notice Construct a new protocol instance
* @param config The mapping of initial/constant parameters
* @param assetListFactoryAddress The address of the asset list factory
**/
constructor(ExtConfiguration memory config, address assetListFactoryAddress) CometExt(config) {
assetListFactory = assetListFactoryAddress;
}
uint8 internal constant MAX_ASSETS_FOR_ASSET_LIST = 24;
function maxAssets() override external pure returns (uint8) { return MAX_ASSETS_FOR_ASSET_LIST; }
}// 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_);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;
import "./CometExtInterface.sol";
contract CometExt is CometExtInterface {
/** Public constants **/
/// @notice The major version of this contract
string public override constant version = "0";
/** Internal constants **/
/// @dev The EIP-712 typehash for the contract's domain
bytes32 internal constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
/// @dev The EIP-712 typehash for allowBySig Authorization
bytes32 internal constant AUTHORIZATION_TYPEHASH = keccak256("Authorization(address owner,address manager,bool isAllowed,uint256 nonce,uint256 expiry)");
/// @dev The highest valid value for s in an ECDSA signature pair (0 < s < secp256k1n ÷ 2 + 1)
/// See https://ethereum.github.io/yellowpaper/paper.pdf #307)
uint internal constant MAX_VALID_ECDSA_S = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0;
/** Immutable symbol **/
/// @dev The ERC20 name for wrapped base token
bytes32 internal immutable name32;
/// @dev The ERC20 symbol for wrapped base token
bytes32 internal immutable symbol32;
/**
* @notice Construct a new protocol instance
* @param config The mapping of initial/constant parameters
**/
constructor(ExtConfiguration memory config) {
name32 = config.name32;
symbol32 = config.symbol32;
}
/** External getters for internal constants **/
function baseAccrualScale() override external pure returns (uint64) { return BASE_ACCRUAL_SCALE; }
function baseIndexScale() override external pure returns (uint64) { return BASE_INDEX_SCALE; }
function factorScale() override external pure returns (uint64) { return FACTOR_SCALE; }
function priceScale() override external pure returns (uint64) { return PRICE_SCALE; }
function maxAssets() override virtual external pure returns (uint8) { return MAX_ASSETS; }
/**
* @notice Aggregate variables tracked for the entire market
**/
function totalsBasic() public override view returns (TotalsBasic memory) {
return TotalsBasic({
baseSupplyIndex: baseSupplyIndex,
baseBorrowIndex: baseBorrowIndex,
trackingSupplyIndex: trackingSupplyIndex,
trackingBorrowIndex: trackingBorrowIndex,
totalSupplyBase: totalSupplyBase,
totalBorrowBase: totalBorrowBase,
lastAccrualTime: lastAccrualTime,
pauseFlags: pauseFlags
});
}
/** Additional ERC20 functionality and approval interface **/
/**
* @notice Get the ERC20 name for wrapped base token
* @return The name as a string
*/
function name() override public view returns (string memory) {
uint8 i;
for (i = 0; i < 32; ) {
if (name32[i] == 0) {
break;
}
unchecked { i++; }
}
bytes memory name_ = new bytes(i);
for (uint8 j = 0; j < i; ) {
name_[j] = name32[j];
unchecked { j++; }
}
return string(name_);
}
/**
* @notice Get the ERC20 symbol for wrapped base token
* @return The symbol as a string
*/
function symbol() override external view returns (string memory) {
uint8 i;
for (i = 0; i < 32; ) {
if (symbol32[i] == 0) {
break;
}
unchecked { i++; }
}
bytes memory symbol_ = new bytes(i);
for (uint8 j = 0; j < i; ) {
symbol_[j] = symbol32[j];
unchecked { j++; }
}
return string(symbol_);
}
/**
* @notice Query the current collateral balance of an account
* @param account The account whose balance to query
* @param asset The collateral asset to check the balance for
* @return The collateral balance of the account
*/
function collateralBalanceOf(address account, address asset) override external view returns (uint128) {
return userCollateral[account][asset].balance;
}
/**
* @notice Query the total accrued base rewards for an account
* @param account The account to query
* @return The accrued rewards, scaled by `BASE_ACCRUAL_SCALE`
*/
function baseTrackingAccrued(address account) override external view returns (uint64) {
return userBasic[account].baseTrackingAccrued;
}
/**
* @notice Approve or disallow `spender` to transfer on sender's behalf
* @dev Note: this binary approval is unlike most other ERC20 tokens
* @dev Note: this grants full approval for spender to manage *all* the owner's assets
* @param spender The address of the account which may transfer tokens
* @param amount Either uint.max (to allow) or zero (to disallow)
* @return Whether or not the approval change succeeded
*/
function approve(address spender, uint256 amount) override external returns (bool) {
if (amount == type(uint256).max) {
allowInternal(msg.sender, spender, true);
} else if (amount == 0) {
allowInternal(msg.sender, spender, false);
} else {
revert BadAmount();
}
return true;
}
/**
* @notice Get the current allowance from `owner` for `spender`
* @dev Note: this binary allowance is unlike most other ERC20 tokens
* @dev Note: this allowance allows spender to manage *all* the owner's assets
* @param owner The address of the account which owns the tokens to be spent
* @param spender The address of the account which may transfer tokens
* @return Either uint.max (spender is allowed) or zero (spender is disallowed)
*/
function allowance(address owner, address spender) override external view returns (uint256) {
return hasPermission(owner, spender) ? type(uint256).max : 0;
}
/**
* @notice Allow or disallow another address to withdraw, or transfer from the sender
* @param manager The account which will be allowed or disallowed
* @param isAllowed_ Whether to allow or disallow
*/
function allow(address manager, bool isAllowed_) override external {
allowInternal(msg.sender, manager, isAllowed_);
}
/**
* @dev Stores the flag marking whether the manager is allowed to act on behalf of owner
*/
function allowInternal(address owner, address manager, bool isAllowed_) internal {
isAllowed[owner][manager] = isAllowed_;
emit Approval(owner, manager, isAllowed_ ? type(uint256).max : 0);
}
/**
* @notice Sets authorization status for a manager via signature from signatory
* @param owner The address that signed the signature
* @param manager The address to authorize (or rescind authorization from)
* @param isAllowed_ Whether to authorize or rescind authorization from manager
* @param nonce The next expected nonce value for the signatory
* @param expiry Expiration time for the signature
* @param v The recovery byte of the signature
* @param r Half of the ECDSA signature pair
* @param s Half of the ECDSA signature pair
*/
function allowBySig(
address owner,
address manager,
bool isAllowed_,
uint256 nonce,
uint256 expiry,
uint8 v,
bytes32 r,
bytes32 s
) override external {
if (uint256(s) > MAX_VALID_ECDSA_S) revert InvalidValueS();
// v ∈ {27, 28} (source: https://ethereum.github.io/yellowpaper/paper.pdf #308)
if (v != 27 && v != 28) revert InvalidValueV();
bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), keccak256(bytes(version)), block.chainid, address(this)));
bytes32 structHash = keccak256(abi.encode(AUTHORIZATION_TYPEHASH, owner, manager, isAllowed_, nonce, expiry));
bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
address signatory = ecrecover(digest, v, r, s);
if (signatory == address(0)) revert BadSignatory();
if (owner != signatory) revert BadSignatory();
if (nonce != userNonce[signatory]++) revert BadNonce();
if (block.timestamp >= expiry) revert SignatureExpired();
allowInternal(signatory, manager, isAllowed_);
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.15;
import "./CometCore.sol";
/**
* @title Compound's Comet Ext Interface
* @notice An efficient monolithic money market protocol
* @author Compound
*/
abstract contract CometExtInterface is CometCore {
error BadAmount();
error BadNonce();
error BadSignatory();
error InvalidValueS();
error InvalidValueV();
error SignatureExpired();
function allow(address manager, bool isAllowed) virtual external;
function allowBySig(address owner, address manager, bool isAllowed, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) virtual external;
function collateralBalanceOf(address account, address asset) virtual external view returns (uint128);
function baseTrackingAccrued(address account) virtual external view returns (uint64);
function baseAccrualScale() virtual external view returns (uint64);
function baseIndexScale() virtual external view returns (uint64);
function factorScale() virtual external view returns (uint64);
function priceScale() virtual external view returns (uint64);
function maxAssets() virtual external view returns (uint8);
function totalsBasic() virtual external view returns (TotalsBasic memory);
function version() virtual external view returns (string memory);
/**
* ===== ERC20 interfaces =====
* Does not include the following functions/events, which are defined in `CometMainInterface` instead:
* - function decimals() virtual external view returns (uint8)
* - function totalSupply() virtual external view returns (uint256)
* - function transfer(address dst, uint amount) virtual external returns (bool)
* - function transferFrom(address src, address dst, uint amount) virtual external returns (bool)
* - function balanceOf(address owner) virtual external view returns (uint256)
* - event Transfer(address indexed from, address indexed to, uint256 amount)
*/
function name() virtual external view returns (string memory);
function symbol() virtual external view returns (string memory);
/**
* @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)
* @return Whether or not the approval succeeded
*/
function approve(address spender, uint256 amount) virtual external returns (bool);
/**
* @notice Get the current allowance from `owner` for `spender`
* @param owner The address of the account which owns the tokens to be spent
* @param spender The address of the account which may transfer tokens
* @return The number of tokens allowed to be spent (-1 means infinite)
*/
function allowance(address owner, address spender) virtual external view returns (uint256);
event Approval(address indexed owner, address indexed spender, uint256 amount);
}// 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;
}
}// 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;
}{
"libraries": {},
"optimizer": {
"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"
}
},
"enabled": true,
"runs": 1
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"bytes32","name":"name32","type":"bytes32"},{"internalType":"bytes32","name":"symbol32","type":"bytes32"}],"internalType":"struct CometConfiguration.ExtConfiguration","name":"config","type":"tuple"},{"internalType":"address","name":"assetListFactoryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadAmount","type":"error"},{"inputs":[],"name":"BadNonce","type":"error"},{"inputs":[],"name":"BadSignatory","type":"error"},{"inputs":[],"name":"InvalidInt104","type":"error"},{"inputs":[],"name":"InvalidInt256","type":"error"},{"inputs":[],"name":"InvalidUInt104","type":"error"},{"inputs":[],"name":"InvalidUInt128","type":"error"},{"inputs":[],"name":"InvalidUInt64","type":"error"},{"inputs":[],"name":"InvalidValueS","type":"error"},{"inputs":[],"name":"InvalidValueV","type":"error"},{"inputs":[],"name":"NegativeNumber","type":"error"},{"inputs":[],"name":"SignatureExpired","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"bool","name":"isAllowed_","type":"bool"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"bool","name":"isAllowed_","type":"bool"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"allowBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetListFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseAccrualScale","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"baseIndexScale","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"baseTrackingAccrued","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"asset","type":"address"}],"name":"collateralBalanceOf","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factorScale","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"manager","type":"address"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidatorPoints","outputs":[{"internalType":"uint32","name":"numAbsorbs","type":"uint32"},{"internalType":"uint64","name":"numAbsorbed","type":"uint64"},{"internalType":"uint128","name":"approxSpend","type":"uint128"},{"internalType":"uint32","name":"_reserved","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAssets","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceScale","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalsBasic","outputs":[{"components":[{"internalType":"uint64","name":"baseSupplyIndex","type":"uint64"},{"internalType":"uint64","name":"baseBorrowIndex","type":"uint64"},{"internalType":"uint64","name":"trackingSupplyIndex","type":"uint64"},{"internalType":"uint64","name":"trackingBorrowIndex","type":"uint64"},{"internalType":"uint104","name":"totalSupplyBase","type":"uint104"},{"internalType":"uint104","name":"totalBorrowBase","type":"uint104"},{"internalType":"uint40","name":"lastAccrualTime","type":"uint40"},{"internalType":"uint8","name":"pauseFlags","type":"uint8"}],"internalType":"struct CometStorage.TotalsBasic","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalsCollateral","outputs":[{"internalType":"uint128","name":"totalSupplyAsset","type":"uint128"},{"internalType":"uint128","name":"_reserved","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBasic","outputs":[{"internalType":"int104","name":"principal","type":"int104"},{"internalType":"uint64","name":"baseTrackingIndex","type":"uint64"},{"internalType":"uint64","name":"baseTrackingAccrued","type":"uint64"},{"internalType":"uint16","name":"assetsIn","type":"uint16"},{"internalType":"uint8","name":"_reserved","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userCollateral","outputs":[{"internalType":"uint128","name":"balance","type":"uint128"},{"internalType":"uint128","name":"_reserved","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60e06040523461009657610e90803803908161001a8161009b565b928392833981010360608112610096576040136100965761003b604061009b565b81518082526020808401519201918252604090920151916001600160a01b0383168303610096576080525160a05260c052604051610db990816100d7823960805181610c46015260a05181610745015260c0518161083b0152f35b600080fd5b6040519190601f01601f191682016001600160401b038111838210176100c057604052565b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c806306fdde0314610aa1578063095ea7b314610a335780630f21d96b14610a10578063110496e5146109d85780632b92a07d146109725780632e04b8e71461093957806354fd4d501461091057806359e017bd146108c15780635c2549ee1461086a5780637042e2d81461082657806394b2294b1461080a57806395d89b411461073057806396e7a9c11461070e578063a0fbddaf146106ef578063a16543791461069a578063a20ed5961461067c578063ab9ba7f414610634578063b9f0baf71461051f578063bb24d9941461029b578063c5fa15cf14610232578063cde68041146101e7578063dc4abafd146101795763dd62ed3e1461011e57600080fd5b346101755781600319360112610175576001600160a01b0390358181168103610171576024359182168203610171576020939161015a91610bac565b1561016b5750600019905b51908152f35b90610165565b8380fd5b8280fd5b503461017557602036600319011261017557356001600160a01b038116908190036101755782829160a094526005602052205481519181600c0b835260018060401b03808360681c1660208501528260a81c169083015261ffff8160e81c16606083015260f81c6080820152f35b50346101755781600319360112610175576001600160a01b0392903590838216820361022f57602435938416840361022f575060209261022691610bac565b90519015158152f35b80fd5b503461017557602036600319011261017557356001600160a01b0381169081900361017557828291608094526007602052205481519163ffffffff8216835260018060401b038260201c166020840152600180851b038260601c169083015260e01c6060820152f35b5034610175576101003660031901126101755780356001600160a01b03818116929183900361051b576024359181831680840361051757604435948515159182870361051357606435916084359360a43560ff811680910361050f5760e435906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0382116104ff57601b811415806104f4575b6104e4578b8d92608092610335610c44565b958651986020998a80990120610349610b84565b8981519101208651908a8201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f845288830152606082015246888201523060a082015260a0815261039c60c082610b30565b51902091855190898201927fab8e80cad03d9def1f2f6f14831e15fd29eb88f59ac40032be3f8047b5ee33ed84528b888401526060830152878201528b60a08201528c60c082015260c081526103f360e082610b30565b5190208451908882019261190160f01b8452602283015260428201526042815261041e606282610b30565b51902092519283528583015260c4358e830152606082015282805260015afa156104da5789519586169081156104ca5781036104ba5789528390528688208054919060001983146104a757600183019055036104985742101561048a5750906104879291610ced565b51f35b8451630819bdcd60e01b8152fd5b5084516312f55d3b60e21b8152fd5b634e487b7160e01b8a526011855260248afd5b88516310188bcb60e21b81528590fd5b89516310188bcb60e21b81528690fd5b88513d8b823e3d90fd5b8b51639c5b7fcf60e01b81528890fd5b50601c811415610323565b8b5163ed9a019560e01b81528890fd5b8b80fd5b8880fd5b8680fd5b8480fd5b50503461063057816003193601126106305780519180610100936105438582610b30565b81815281602082015281848201528160608201528160808201528160a08201528160c082015260e0015254600160401b60019003908181169060015492839285519261058f8885610b30565b81845260208401968382821c1688528381860192818160801c168452606087019060c01c81526080870192600160681b60019003968795868b16865260a08a0197878c60681c16895260c08b019a64ffffffffff809d60d01c168c5260e0019c60f81c8d528284519e8f928352511690602001525116908b01525116606089015251166080870152511660a0850152511660c08301525160ff1660e0820152f35b5080fd5b503461017557602036600319011261017557356001600160a01b03811690819003610175578252600560209081529181902054905160a89190911c6001600160401b03168152f35b50503461063057816003193601126106305760209051620f42408152f35b50346101755781600319360112610175576001600160a01b0390358181169081900361017157602435918216809203610171578360ff9284926020965260038652828220908252855220541690519015158152f35b505034610630578160031936011261063057602090516305f5e1008152f35b5050346106305781600319360112610630576020905166038d7ea4c680008152f35b503461017557826003193601126101755782917f0000000000000000000000000000000000000000000000000000000000000000935b60ff9081811660208110156107fe5786901a60f81b6001600160f81b031916156107935760010116610766565b9391929490505b60ff809416906107a982610beb565b92805b868116848110156107ed5760208110156107da578791816107d2866001941a9189610c1d565b5301166107ac565b634e487b7160e01b835260328952602483fd5b8651806107fa8882610abf565b0390f35b5093919294905061079a565b5050346106305781600319360112610630576020905160188152f35b505034610630578160031936011261063057517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610175578160031936011261017557356001600160a01b038181169391849003610630576024359081168091036106305760209382526006845282822090825283528160018060801b03912054169051908152f35b503461017557602036600319011261017557356001600160a01b038116908190036101755782526002602052908190205490519081906107fa90608081901c906001600160801b031683610b16565b5050346106305781600319360112610630576107fa9061092e610b84565b905191829182610abf565b50346101755760203660031901126101755780356001600160a01b03811690819003610171579282916020948252845220549051908152f35b50346101755781600319360112610175576001600160a01b03903581811690819003610171576024359182168092036101715783526006602090815282842091845252908190205490519081906107fa90608081901c906001600160801b031683610b16565b5034610175578160031936011261017557356001600160a01b0381168103610175576024358015158103610171576104879133610ced565b50503461063057816003193601126106305760209051670de0b6b3a76400008152f35b50346101755781600319360112610175578035906001600160a01b0382168203610171576024356000198103610a7c575050602092506001610a759133610ced565b5160018152f35b610a935750602092610a8e9133610ced565b610a75565b825163749b593960e01b8152fd5b5050346106305781600319360112610630576107fa9061092e610c44565b919091602080825283519081818401526000945b828610610b00575050806040939411610af3575b601f01601f1916010190565b6000838284010152610ae7565b8581018201518487016040015294810194610ad3565b6001600160801b0391821681529116602082015260400190565b601f909101601f19168101906001600160401b03821190821017610b5357604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610b5357601f01601f191660200190565b610b8e6001610b69565b90610b9c6040519283610b30565b60018252600360fc1b6020830152565b6001600160a01b039081169116818114918215610bc857505090565b909150600052600360205260406000209060005260205260ff6040600020541690565b90610bf582610b69565b610c026040519182610b30565b8281528092610c13601f1991610b69565b0190602036910137565b908151811015610c2e570160200190565b634e487b7160e01b600052603260045260246000fd5b7f000000000000000000000000000000000000000000000000000000000000000060005b60ff908181166020811015610ce45783901a60f81b6001600160f81b03191615610c955760010116610c68565b9290505b60ff80931691610ca883610beb565b9060005b85811685811015610cda576020811015610c2e57869181610cd2856001941a9187610c1d565b530116610cac565b5050509150915090565b50929050610c99565b91909160018060a01b03809116916000918383526003602052604083209416938483526020526040822060ff1981541660ff83151516179055600014610d4c5750600080516020610d6483398151915260206000195b604051908152a3565b6020600080516020610d6483398151915291610d4356fe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212202150e061ff0ec0767acdf061949744a6cfa62ec1dbf1a55f8e044d735b2d99ff64736f6c634300080f0033436f6d706f756e6420555344650000000000000000000000000000000000000063555344657633000000000000000000000000000000000000000000000000000000000000000000000000000daf7a2772c84a82d1d46a4b628151e6d7f5b202
Deployed Bytecode
0x6040608081526004908136101561001557600080fd5b600091823560e01c806306fdde0314610aa1578063095ea7b314610a335780630f21d96b14610a10578063110496e5146109d85780632b92a07d146109725780632e04b8e71461093957806354fd4d501461091057806359e017bd146108c15780635c2549ee1461086a5780637042e2d81461082657806394b2294b1461080a57806395d89b411461073057806396e7a9c11461070e578063a0fbddaf146106ef578063a16543791461069a578063a20ed5961461067c578063ab9ba7f414610634578063b9f0baf71461051f578063bb24d9941461029b578063c5fa15cf14610232578063cde68041146101e7578063dc4abafd146101795763dd62ed3e1461011e57600080fd5b346101755781600319360112610175576001600160a01b0390358181168103610171576024359182168203610171576020939161015a91610bac565b1561016b5750600019905b51908152f35b90610165565b8380fd5b8280fd5b503461017557602036600319011261017557356001600160a01b038116908190036101755782829160a094526005602052205481519181600c0b835260018060401b03808360681c1660208501528260a81c169083015261ffff8160e81c16606083015260f81c6080820152f35b50346101755781600319360112610175576001600160a01b0392903590838216820361022f57602435938416840361022f575060209261022691610bac565b90519015158152f35b80fd5b503461017557602036600319011261017557356001600160a01b0381169081900361017557828291608094526007602052205481519163ffffffff8216835260018060401b038260201c166020840152600180851b038260601c169083015260e01c6060820152f35b5034610175576101003660031901126101755780356001600160a01b03818116929183900361051b576024359181831680840361051757604435948515159182870361051357606435916084359360a43560ff811680910361050f5760e435906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0382116104ff57601b811415806104f4575b6104e4578b8d92608092610335610c44565b958651986020998a80990120610349610b84565b8981519101208651908a8201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f845288830152606082015246888201523060a082015260a0815261039c60c082610b30565b51902091855190898201927fab8e80cad03d9def1f2f6f14831e15fd29eb88f59ac40032be3f8047b5ee33ed84528b888401526060830152878201528b60a08201528c60c082015260c081526103f360e082610b30565b5190208451908882019261190160f01b8452602283015260428201526042815261041e606282610b30565b51902092519283528583015260c4358e830152606082015282805260015afa156104da5789519586169081156104ca5781036104ba5789528390528688208054919060001983146104a757600183019055036104985742101561048a5750906104879291610ced565b51f35b8451630819bdcd60e01b8152fd5b5084516312f55d3b60e21b8152fd5b634e487b7160e01b8a526011855260248afd5b88516310188bcb60e21b81528590fd5b89516310188bcb60e21b81528690fd5b88513d8b823e3d90fd5b8b51639c5b7fcf60e01b81528890fd5b50601c811415610323565b8b5163ed9a019560e01b81528890fd5b8b80fd5b8880fd5b8680fd5b8480fd5b50503461063057816003193601126106305780519180610100936105438582610b30565b81815281602082015281848201528160608201528160808201528160a08201528160c082015260e0015254600160401b60019003908181169060015492839285519261058f8885610b30565b81845260208401968382821c1688528381860192818160801c168452606087019060c01c81526080870192600160681b60019003968795868b16865260a08a0197878c60681c16895260c08b019a64ffffffffff809d60d01c168c5260e0019c60f81c8d528284519e8f928352511690602001525116908b01525116606089015251166080870152511660a0850152511660c08301525160ff1660e0820152f35b5080fd5b503461017557602036600319011261017557356001600160a01b03811690819003610175578252600560209081529181902054905160a89190911c6001600160401b03168152f35b50503461063057816003193601126106305760209051620f42408152f35b50346101755781600319360112610175576001600160a01b0390358181169081900361017157602435918216809203610171578360ff9284926020965260038652828220908252855220541690519015158152f35b505034610630578160031936011261063057602090516305f5e1008152f35b5050346106305781600319360112610630576020905166038d7ea4c680008152f35b503461017557826003193601126101755782917f6355534465763300000000000000000000000000000000000000000000000000935b60ff9081811660208110156107fe5786901a60f81b6001600160f81b031916156107935760010116610766565b9391929490505b60ff809416906107a982610beb565b92805b868116848110156107ed5760208110156107da578791816107d2866001941a9189610c1d565b5301166107ac565b634e487b7160e01b835260328952602483fd5b8651806107fa8882610abf565b0390f35b5093919294905061079a565b5050346106305781600319360112610630576020905160188152f35b505034610630578160031936011261063057517f0000000000000000000000000daf7a2772c84a82d1d46a4b628151e6d7f5b2026001600160a01b03168152602090f35b5034610175578160031936011261017557356001600160a01b038181169391849003610630576024359081168091036106305760209382526006845282822090825283528160018060801b03912054169051908152f35b503461017557602036600319011261017557356001600160a01b038116908190036101755782526002602052908190205490519081906107fa90608081901c906001600160801b031683610b16565b5050346106305781600319360112610630576107fa9061092e610b84565b905191829182610abf565b50346101755760203660031901126101755780356001600160a01b03811690819003610171579282916020948252845220549051908152f35b50346101755781600319360112610175576001600160a01b03903581811690819003610171576024359182168092036101715783526006602090815282842091845252908190205490519081906107fa90608081901c906001600160801b031683610b16565b5034610175578160031936011261017557356001600160a01b0381168103610175576024358015158103610171576104879133610ced565b50503461063057816003193601126106305760209051670de0b6b3a76400008152f35b50346101755781600319360112610175578035906001600160a01b0382168203610171576024356000198103610a7c575050602092506001610a759133610ced565b5160018152f35b610a935750602092610a8e9133610ced565b610a75565b825163749b593960e01b8152fd5b5050346106305781600319360112610630576107fa9061092e610c44565b919091602080825283519081818401526000945b828610610b00575050806040939411610af3575b601f01601f1916010190565b6000838284010152610ae7565b8581018201518487016040015294810194610ad3565b6001600160801b0391821681529116602082015260400190565b601f909101601f19168101906001600160401b03821190821017610b5357604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610b5357601f01601f191660200190565b610b8e6001610b69565b90610b9c6040519283610b30565b60018252600360fc1b6020830152565b6001600160a01b039081169116818114918215610bc857505090565b909150600052600360205260406000209060005260205260ff6040600020541690565b90610bf582610b69565b610c026040519182610b30565b8281528092610c13601f1991610b69565b0190602036910137565b908151811015610c2e570160200190565b634e487b7160e01b600052603260045260246000fd5b7f436f6d706f756e6420555344650000000000000000000000000000000000000060005b60ff908181166020811015610ce45783901a60f81b6001600160f81b03191615610c955760010116610c68565b9290505b60ff80931691610ca883610beb565b9060005b85811685811015610cda576020811015610c2e57869181610cd2856001941a9187610c1d565b530116610cac565b5050509150915090565b50929050610c99565b91909160018060a01b03809116916000918383526003602052604083209416938483526020526040822060ff1981541660ff83151516179055600014610d4c5750600080516020610d6483398151915260206000195b604051908152a3565b6020600080516020610d6483398151915291610d4356fe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212202150e061ff0ec0767acdf061949744a6cfa62ec1dbf1a55f8e044d735b2d99ff64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
436f6d706f756e6420555344650000000000000000000000000000000000000063555344657633000000000000000000000000000000000000000000000000000000000000000000000000000daf7a2772c84a82d1d46a4b628151e6d7f5b202
-----Decoded View---------------
Arg [0] : config (tuple):
Arg [1] : name32 (bytes32): 0x436f6d706f756e64205553446500000000000000000000000000000000000000
Arg [2] : symbol32 (bytes32): 0x6355534465763300000000000000000000000000000000000000000000000000
Arg [1] : assetListFactoryAddress (address): 0x0dAf7A2772C84A82D1D46a4b628151e6D7F5b202
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 436f6d706f756e64205553446500000000000000000000000000000000000000
Arg [1] : 6355534465763300000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000daf7a2772c84a82d1d46a4b628151e6d7f5b202
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MNT
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.