More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 3,035 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 409839696 | 50 days ago | IN | 0 ETH | 0.00000217 | ||||
| Approve | 405263060 | 63 days ago | IN | 0 ETH | 0.00000052 | ||||
| Redeem | 396129059 | 89 days ago | IN | 0 ETH | 0.00000426 | ||||
| Mint | 395705897 | 91 days ago | IN | 0 ETH | 0.00000158 | ||||
| Approve | 393873040 | 96 days ago | IN | 0 ETH | 0.00000032 | ||||
| Approve | 393102836 | 98 days ago | IN | 0 ETH | 0.00000031 | ||||
| Redeem | 389078095 | 110 days ago | IN | 0 ETH | 0.00001468 | ||||
| Redeem | 385475017 | 120 days ago | IN | 0 ETH | 0.00000358 | ||||
| Mint | 385281753 | 121 days ago | IN | 0 ETH | 0.00000245 | ||||
| Redeem | 373552365 | 155 days ago | IN | 0 ETH | 0.00015559 | ||||
| Mint | 372939630 | 156 days ago | IN | 0 ETH | 0.00000255 | ||||
| Redeem | 371647995 | 160 days ago | IN | 0 ETH | 0.00000992 | ||||
| Mint | 371647608 | 160 days ago | IN | 0 ETH | 0.00000179 | ||||
| Redeem | 371434401 | 161 days ago | IN | 0 ETH | 0.00000992 | ||||
| Mint | 371433628 | 161 days ago | IN | 0 ETH | 0.00000163 | ||||
| Redeem | 369944100 | 165 days ago | IN | 0 ETH | 0.00001805 | ||||
| Mint | 369782142 | 166 days ago | IN | 0 ETH | 0.00000162 | ||||
| Mint | 369637538 | 166 days ago | IN | 0 ETH | 0.00001415 | ||||
| Mint | 369439272 | 167 days ago | IN | 0 ETH | 0.00000176 | ||||
| Redeem | 364439048 | 181 days ago | IN | 0 ETH | 0.00000928 | ||||
| Mint | 364409271 | 181 days ago | IN | 0 ETH | 0.00000158 | ||||
| Approve | 345407393 | 236 days ago | IN | 0 ETH | 0.00000033 | ||||
| Approve | 340925856 | 249 days ago | IN | 0 ETH | 0.00000054 | ||||
| Approve | 338970099 | 255 days ago | IN | 0 ETH | 0.00000037 | ||||
| Approve | 336812074 | 261 days ago | IN | 0 ETH | 0.00000033 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72085006 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72077245 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72074866 | 1047 days ago | 0 ETH | ||||
| 72064459 | 1047 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CErc20Delegator
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
import "./CTokenInterfaces.sol";
import "./IGmxRewardRouter.sol";
import "./IStakedGlp.sol";
import "./EIP20Interface.sol";
import "./IERC721Receiver.sol";
/**
* @title Compound's CErc20Delegator Contract
* @notice CTokens which wrap an EIP-20 underlying and delegate to an implementation
* @author Compound
*/
contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterface {
/**
* @notice Construct a new money market
* @param underlying_ The address of the underlying asset
* @param comptroller_ The address of the Comptroller
* @param interestRateModel_ The address of the interest rate model
* @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18
* @param name_ ERC-20 name of this token
* @param symbol_ ERC-20 symbol of this token
* @param decimals_ ERC-20 decimal precision of this token
* @param isGLP_ Wether or not the market being created is for the GLP token
* @param admin_ Address of the administrator of this token
* @param implementation_ The address of the implementation the contract delegates to
* @param becomeImplementationData The encoded args for becomeImplementatioN
*/
constructor(address underlying_,
ComptrollerInterface comptroller_,
InterestRateModel interestRateModel_,
uint initialExchangeRateMantissa_,
string memory name_,
string memory symbol_,
uint8 decimals_,
bool isGLP_,
address payable admin_,
address implementation_,
bytes memory becomeImplementationData) {
// Creator of the contract is admin during initialization
admin = payable(msg.sender);
// First delegate gets to initialize the delegator (i.e. storage contract)
delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,address,uint256,string,string,uint8,bool)",
underlying_,
comptroller_,
interestRateModel_,
initialExchangeRateMantissa_,
name_,
symbol_,
decimals_,
isGLP_));
// // New implementations always get set via the settor (post-initialize)
_setImplementation(implementation_, false, becomeImplementationData);
// Set the proper admin now that initialization is done
admin = admin_;
}
/**
* @notice Called by the admin to update the implementation of the delegator
* @param implementation_ The address of the new implementation for delegation
* @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
* @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
*/
function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData)override public {
require(msg.sender == admin, "CErc20Delegator::_setImplementation: Caller must be admin");
if (allowResign) {
delegateToImplementation(abi.encodeWithSignature("_resignImplementation()"));
}
address oldImplementation = implementation;
implementation = implementation_;
delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData));
emit NewImplementation(oldImplementation, implementation);
}
function proxyType() public pure returns (uint256 proxyTypeId) {
return 2;
}
/**
* @notice Sender supplies assets into the market and receives cTokens in exchange
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param mintAmount The amount of the underlying asset to supply
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function mint(uint mintAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount));
return abi.decode(data, (uint));
}
function compound() override external returns (uint){
bytes memory data = delegateToImplementation(abi.encodeWithSignature("compound()"));
return abi.decode(data, (uint));
}
/**
* @notice Sender redeems cTokens in exchange for the underlying asset
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param redeemTokens The number of cTokens to redeem into underlying
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function redeem(uint redeemTokens) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens));
return abi.decode(data, (uint));
}
/**
* @notice Sender redeems cTokens in exchange for a specified amount of underlying asset
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param redeemAmount The amount of underlying to redeem
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function redeemUnderlying(uint redeemAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount));
return abi.decode(data, (uint));
}
/**
* @notice Redeems cTokens for a user in exchange for a specified amount of underlying asset
* @dev Accrues interest whether or not the operation succeeds, unless reverted
* @param redeemAmount The amount of underlying to redeem
* @param user The user to redeem for
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function redeemUnderlyingForUser(uint redeemAmount, address user) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlyingForUser(uint256,address)", redeemAmount, user));
return abi.decode(data, (uint));
}
/**
* @notice Sender borrows assets from the protocol to their own address
* @param borrowAmount The amount of the underlying asset to borrow
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function borrow(uint borrowAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrow(uint256)", borrowAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender repays their own borrow
* @param repayAmount The amount to repay, or -1 for the full outstanding amount
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function repayBorrow(uint repayAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrow(uint256)", repayAmount));
return abi.decode(data, (uint));
}
/**
* @notice Sender repays a borrow belonging to borrower
* @param borrower the account with the debt being payed off
* @param repayAmount The amount to repay, or -1 for the full outstanding amount
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function repayBorrowBehalf(address borrower, uint repayAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrowBehalf(address,uint256)", borrower, repayAmount));
return abi.decode(data, (uint));
}
/**
* @notice The sender liquidates the borrowers collateral.
* The collateral seized is transferred to the liquidator.
* @param borrower The borrower of this cToken to be liquidated
* @param cTokenCollateral The market in which to seize collateral from the borrower
* @param repayAmount The amount of the underlying borrowed asset to repay
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("liquidateBorrow(address,uint256,address)", borrower, repayAmount, cTokenCollateral));
return abi.decode(data, (uint));
}
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transfer(address dst, uint amount) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount));
return abi.decode(data, (bool));
}
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return Whether or not the transfer succeeded
*/
function transferFrom(address src, address dst, uint256 amount) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount));
return abi.decode(data, (bool));
}
/**
* @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) override external returns (bool) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount));
return abi.decode(data, (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) override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender));
return abi.decode(data, (uint));
}
/**
* @notice Get the token balance of the `owner`
* @param owner The address of the account to query
* @return The number of tokens owned by `owner`
*/
function balanceOf(address owner) override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner));
return abi.decode(data, (uint));
}
/**
* @notice Get the underlying balance of the `owner`
* @dev This also accrues interest in a transaction
* @param owner The address of the account to query
* @return The amount of underlying owned by `owner`
*/
function balanceOfUnderlying(address owner) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("balanceOfUnderlying(address)", owner));
return abi.decode(data, (uint));
}
/**
* @notice Get a snapshot of the account's balances, and the cached exchange rate
* @dev This is used by comptroller to more efficiently perform liquidity checks.
* @param account Address of the account to snapshot
* @return (possible error, token balance, borrow balance, exchange rate mantissa)
*/
function getAccountSnapshot(address account) override external view returns (uint, uint, uint, uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account));
return abi.decode(data, (uint, uint, uint, uint));
}
/**
* @notice Returns the current per-block borrow interest rate for this cToken
* @return The borrow interest rate per block, scaled by 1e18
*/
function borrowRatePerBlock() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowRatePerBlock()"));
return abi.decode(data, (uint));
}
/**
* @notice Returns the current per-block supply interest rate for this cToken
* @return The supply interest rate per block, scaled by 1e18
*/
function supplyRatePerBlock() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("supplyRatePerBlock()"));
return abi.decode(data, (uint));
}
/**
* @notice Returns the current total borrows plus accrued interest
* @return The total borrows with interest
*/
function totalBorrowsCurrent() override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("totalBorrowsCurrent()"));
return abi.decode(data, (uint));
}
/**
* @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex
* @param account The address whose balance should be calculated after updating borrowIndex
* @return The calculated balance
*/
function borrowBalanceCurrent(address account) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrowBalanceCurrent(address)", account));
return abi.decode(data, (uint));
}
/**
* @notice Return the borrow balance of account based on stored data
* @param account The address whose balance should be calculated
* @return The calculated balance
*/
function borrowBalanceStored(address account) override public view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowBalanceStored(address)", account));
return abi.decode(data, (uint));
}
/**
* @notice Accrue interest then return the up-to-date exchange rate
* @return Calculated exchange rate scaled by 1e18
*/
function exchangeRateCurrent() override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("exchangeRateCurrent()"));
return abi.decode(data, (uint));
}
/**
* @notice Calculates the exchange rate from the underlying to the CToken
* @dev This function does not accrue interest before calculating the exchange rate
* @return Calculated exchange rate scaled by 1e18
*/
function exchangeRateStored() override public view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("exchangeRateStored()"));
return abi.decode(data, (uint));
}
/**
* @notice Get cash balance of this cToken in the underlying asset
* @return The quantity of underlying asset owned by this contract
*/
function getCash() override external view returns (uint) {
bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()"));
return abi.decode(data, (uint));
}
/**
* @notice Applies accrued interest to total borrows and reserves.
* @dev This calculates interest accrued from the last checkpointed block
* up to the current block and writes new checkpoint to storage.
*/
function accrueInterest() override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("accrueInterest()"));
return abi.decode(data, (uint));
}
/**
* @notice Transfers collateral tokens (this market) to the liquidator.
* @dev Will fail unless called by another cToken during the process of liquidation.
* Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.
* @param liquidator The account receiving seized collateral
* @param borrower The account having collateral seized
* @param seizeTokens The number of cTokens to seize
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function seize(address liquidator, address borrower, uint seizeTokens) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens));
return abi.decode(data, (uint));
}
/**
* @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock)
* @param token The address of the ERC-20 token to sweep
*/
function sweepToken(EIP20NonStandardInterface token) override external {
delegateToImplementation(abi.encodeWithSignature("sweepToken(address)", token));
}
function depositNFT(address _NFTAddress, uint256 _TokenID) override external {
delegateToImplementation(abi.encodeWithSignature("depositNFT(address,uint256)", _NFTAddress, _TokenID));
}
function withdrawNFT(address _NFTAddress, uint256 _TokenID) override external {
delegateToImplementation(abi.encodeWithSignature("withdrawNFT(address,uint256)", _NFTAddress, _TokenID));
}
/*** Admin Functions ***/
/**
* @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
* @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
* @param newPendingAdmin New pending admin.
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setPendingAdmin(address payable newPendingAdmin) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin));
return abi.decode(data, (uint));
}
/**
* @notice Sets a new comptroller for the market
* @dev Admin function to set a new comptroller
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setComptroller(ComptrollerInterface newComptroller) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setComptroller(address)", newComptroller));
return abi.decode(data, (uint));
}
/**
* @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh
* @dev Admin function to accrue interest and set a new reserve factor
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setReserveFactor(uint newReserveFactorMantissa) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setReserveFactor(uint256)", newReserveFactorMantissa));
return abi.decode(data, (uint));
}
/**
* @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
* @dev Admin function for pending admin to accept role and update admin
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _acceptAdmin() override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()"));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and adds reserves by transferring from admin
* @param addAmount Amount of reserves to add
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _addReserves(uint addAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_addReserves(uint256)", addAmount));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and reduces reserves by transferring to admin
* @param reduceAmount Amount of reduction to reserves
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _reduceReserves(uint reduceAmount) override external returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount));
return abi.decode(data, (uint));
}
/**
* @notice Accrues interest and updates the interest rate model using _setInterestRateModelFresh
* @dev Admin function to accrue interest and update the interest rate model
* @param newInterestRateModel the new interest rate model to use
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setInterestRateModel(InterestRateModel newInterestRateModel) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setInterestRateModel(address)", newInterestRateModel));
return abi.decode(data, (uint));
}
/**
* @notice Updates the glp contract addresses using _setGlpAddresses
* @dev Admin function to set the GLP contract addresses
* @param stakedGLP_ the stakedGLP contract to use
* @param glpRewardRouter_ the rewardrouter contract address to use
* @param glpManager_ the glpManager contract address to use
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setGlpAddresses(IStakedGlp stakedGLP_, IGmxRewardRouter glpRewardRouter_, address glpManager_, address gmxToken_, address stakedGmxTracker_, address sbfGMX_) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setGlpAddresses(address,address,address,address,address,address)", stakedGLP_, glpRewardRouter_, glpManager_,gmxToken_,stakedGmxTracker_,sbfGMX_));
return abi.decode(data, (uint));
}
/**
* @notice Updates the fees for the vault strategy markets
* @dev Admin function to update the fees
* @param withdrawFee_ fee to withdraw funds
* @param managementFee_ fee taken from autocompounded rewards
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setVaultFees(uint256 withdrawFee_, uint256 managementFee_) override public returns (uint){
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setVaultFees(uint256,uint256)", withdrawFee_, managementFee_));
return abi.decode(data, (uint));
}
/**
* @notice Transfers all esGmx assets to the recipient
* @dev Admin function to remove all esGmx assets from the contract
* @param recipient the address to send all the assets to
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _signalTransfer(address recipient) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_signalTransfer(address)", recipient));
return abi.decode(data, (uint));
}
/**
* @notice Toggle wether or not the GLP rewards should be autocompounded
* @dev Admin function to set wether or not GLP rewards should be autocompounded
* @param autocompound_ should the rewards be autocompounded or not
* @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
*/
function _setAutocompoundRewards(bool autocompound_) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setAutocompoundRewards(bool)", autocompound_));
return abi.decode(data, (uint));
}
function _setAutoCompoundBlockThreshold(uint256 autoCompoundBlockThreshold_) override public returns (uint) {
bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setAutoCompoundBlockThreshold(uint256)", autoCompoundBlockThreshold_));
return abi.decode(data, (uint));
}
/**
* @notice Internal method to delegate execution to another contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* @param callee The contract to delegatecall
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateTo(address callee, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returnData) = callee.delegatecall(data);
assembly {
if eq(success, 0) {
revert(add(returnData, 0x20), returndatasize())
}
}
return returnData;
}
/**
* @notice Delegates execution to the implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateToImplementation(bytes memory data) public returns (bytes memory) {
return delegateTo(implementation, data);
}
/**
* @notice Delegates execution to an implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
* There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop.
* @param data The raw data to delegatecall
* @return The returned bytes from the delegatecall
*/
function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) {
(bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data));
assembly {
if eq(success, 0) {
revert(add(returnData, 0x20), returndatasize())
}
}
return abi.decode(returnData, (bytes));
}
/**
* @notice Delegates execution to an implementation contract
* @dev It returns to the external caller whatever the implementation returns or forwards reverts
*/
fallback() external payable {
require(msg.value == 0,"CErc20Delegator:fallback: cannot send value to fallback");
// delegate all other functions to current implementation
(bool success, ) = implementation.delegatecall(msg.data);
assembly {
let free_mem_ptr := mload(0x40)
returndatacopy(free_mem_ptr, 0, returndatasize())
switch success
case 0 { revert(free_mem_ptr, returndatasize()) }
default { return(free_mem_ptr, returndatasize()) }
}
}
function approveGlpRewardRouterWETHSpending() external {
require(msg.sender == admin, "only admin can call approve");
EIP20Interface(WETH).approve(glpManager, type(uint256).max);
}
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
import "./ComptrollerInterface.sol";
import "./InterestRateModel.sol";
import "./EIP20NonStandardInterface.sol";
import "./ErrorReporter.sol";
import "./IGmxRewardRouter.sol";
import "./IStakedGlp.sol";
import "./IRewardTracker.sol";
contract CTokenStorage {
/**
* @dev Guard variable for re-entrancy checks
*/
bool internal _notEntered;
/**
* @notice Is the underlying token GLP
*/
bool public isGLP;
/**
* @notice Wether or not the eth rewards from glp market should be autocompounded
*/
bool public autocompound;
/**
* @notice GLP reward router for claiming rewards
*/
IGmxRewardRouter public glpRewardRouter;
/**
* @notice Staked GLP Adress to call transfer on
*/
IStakedGlp public stakedGLP;
/**
* @notice address of the GMX token
*/
address public gmxToken;
/**
* @notice Address that handles GMX staking
*/
IRewardTracker public stakedGmxTracker;
/**
* @notice address of the Staked GMX token
*/
address public sbfGMX;
/**
* @notice Staked GLP Adress to call transfer on
*/
address public immutable WETH = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
/**
* @notice GLP manager contract to approve transfers on for autocompounding
*/
address public glpManager;
/**
* @notice EIP-20 token name for this token
*/
string public name;
/**
* @notice EIP-20 token symbol for this token
*/
string public symbol;
/**
* @notice EIP-20 token decimals for this token
*/
uint8 public decimals;
// Maximum borrow rate that can ever be applied (.0005% / block)
uint internal constant borrowRateMaxMantissa = 0.0005e16;
// Maximum fraction of interest that can be set aside for reserves
uint internal constant reserveFactorMaxMantissa = 1e18;
/**
* @notice Administrator for this contract
*/
address payable public admin;
/**
* @notice Pending administrator for this contract
*/
address payable public pendingAdmin;
/**
* @notice Contract which oversees inter-cToken operations
*/
ComptrollerInterface public comptroller;
/**
* @notice Model which tells what the current interest rate should be
*/
InterestRateModel public interestRateModel;
// Initial exchange rate used when minting the first CTokens (used when totalSupply = 0)
uint internal initialExchangeRateMantissa;
/**
* @notice Fraction of interest currently set aside for reserves
*/
uint public reserveFactorMantissa;
/**
* @notice Block number that interest was last accrued at
*/
uint public accrualBlockNumber;
/**
* @notice Accumulator of the total earned interest rate since the opening of the market
*/
uint public borrowIndex;
/**
* @notice Total amount of outstanding borrows of the underlying in this market
*/
uint public totalBorrows;
/**
* @notice Total amount of reserves of the underlying held in this market
*/
uint public totalReserves;
/**
* @notice Total number of tokens in circulation
*/
uint public totalSupply;
/**
* @notice Withdraw fee for strategy vaults
*/
uint256 public withdrawFee;
/**
* @notice Management fee for strategy vaults
*/
uint256 public performanceFee;
uint256 public exchangeRateBefore;
uint256 public blocksBetweenRateChange;
// Official record of token balances for each account
mapping (address => uint) internal accountTokens;
uint256 public constant performanceFeeMAX = 3000;
uint256 public constant withdrawFeeMAX = 300;
// Approved token transfer amounts on behalf of others
mapping (address => mapping (address => uint)) internal transferAllowances;
/**
* @notice Container for borrow balance information
* @member principal Total balance (with accrued interest), after applying the most recent balance-changing action
* @member interestIndex Global borrowIndex as of the most recent balance-changing action
*/
struct BorrowSnapshot {
uint principal;
uint interestIndex;
}
// Mapping of account addresses to outstanding borrow balances
mapping(address => BorrowSnapshot) internal accountBorrows;
/**
* @notice Share of seized collateral that is added to reserves
*/
uint public constant protocolSeizeShareMantissa = 2.8e16; //2.8%
// used for calculating interest rate performance of GLP vault market
uint public prevExchangeRate;
uint public glpBlockDelta;
uint256 public autoCompoundBlockThreshold = 7000;
uint public lastGlpDepositAmount;
uint public depositsDuringLastInterval;
}
abstract contract CTokenInterface is CTokenStorage {
/**
* @notice Indicator that this is a CToken contract (for inspection)
*/
bool public constant isCToken = true;
/*** Market Events ***/
/**
* @notice Event emitted when interest is accrued
*/
event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows);
/**
* @notice Event emitted when tokens are minted
*/
event Mint(address minter, uint mintAmount, uint mintTokens);
/**
* @notice Event emitted when tokens are redeemed
*/
event Redeem(address redeemer, uint redeemAmount, uint redeemTokens);
/**
* @notice Event emitted when underlying is borrowed
*/
event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows);
/**
* @notice Event emitted when a borrow is repaid
*/
event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows);
/**
* @notice Event emitted when a borrow is liquidated
*/
event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address cTokenCollateral, uint seizeTokens);
/*** Admin Events ***/
/**
* @notice Event emitted when pendingAdmin is changed
*/
event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);
/**
* @notice Event emitted when pendingAdmin is accepted, which means admin is updated
*/
event NewAdmin(address oldAdmin, address newAdmin);
/**
* @notice Event emitted when comptroller is changed
*/
event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller);
/**
* @notice Event emitted when interestRateModel is changed
*/
event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel);
/**
* @notice Event emitted when the reserve factor is changed
*/
event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa);
/**
* @notice Event emitted when the reserves are added
*/
event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves);
/**
* @notice Event emitted when the reserves are reduced
*/
event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves);
/**
* @notice EIP20 Transfer event
*/
event Transfer(address indexed from, address indexed to, uint amount);
/**
* @notice EIP20 Approval event
*/
event Approval(address indexed owner, address indexed spender, uint amount);
/*** User Interface ***/
function transfer(address dst, uint amount) virtual external returns (bool);
function transferFrom(address src, address dst, uint amount) virtual external returns (bool);
function approve(address spender, uint amount) virtual external returns (bool);
function allowance(address owner, address spender) virtual external view returns (uint);
function balanceOf(address owner) virtual external view returns (uint);
function balanceOfUnderlying(address owner) virtual external returns (uint);
function getAccountSnapshot(address account) virtual external view returns (uint, uint, uint, uint);
function borrowRatePerBlock() virtual external view returns (uint);
function supplyRatePerBlock() virtual external view returns (uint);
function totalBorrowsCurrent() virtual external returns (uint);
function borrowBalanceCurrent(address account) virtual external returns (uint);
function borrowBalanceStored(address account) virtual external view returns (uint);
function exchangeRateCurrent() virtual external returns (uint);
function exchangeRateStored() virtual external view returns (uint);
function getCash() virtual external view returns (uint);
function accrueInterest() virtual external returns (uint);
function seize(address liquidator, address borrower, uint seizeTokens) virtual external returns (uint);
/*** Admin Functions ***/
function _setPendingAdmin(address payable newPendingAdmin) virtual external returns (uint);
function _acceptAdmin() virtual external returns (uint);
function _setComptroller(ComptrollerInterface newComptroller) virtual external returns (uint);
function _setReserveFactor(uint newReserveFactorMantissa) virtual external returns (uint);
function _reduceReserves(uint reduceAmount) virtual external returns (uint);
function _setInterestRateModel(InterestRateModel newInterestRateModel) virtual external returns (uint);
function _setGlpAddresses(IStakedGlp stakedGLP_, IGmxRewardRouter glpRewardRouter_, address glpManager_, address gmxToken_, address stakedGmxTracker_, address sbfGMX_) virtual public returns (uint);
function _signalTransfer(address recipient) virtual public returns (uint);
function _setAutocompoundRewards(bool autocompound_) virtual public returns (uint);
function _setAutoCompoundBlockThreshold(uint256 autoCompoundBlockThreshold_) virtual public returns (uint);
function _setVaultFees(uint256 withdrawFee_, uint256 performanceFee_) virtual public returns (uint);
}
contract CErc20Storage {
/**
* @notice Underlying asset for this CToken
*/
address public underlying;
}
abstract contract CErc20Interface is CErc20Storage {
/*** User Interface ***/
function mint(uint mintAmount) virtual external returns (uint);
function redeem(uint redeemTokens) virtual external returns (uint);
function redeemUnderlying(uint redeemAmount) virtual external returns (uint);
function redeemUnderlyingForUser(uint redeemAmount, address user) virtual external returns (uint);
function borrow(uint borrowAmount) virtual external returns (uint);
function repayBorrow(uint repayAmount) virtual external returns (uint);
function repayBorrowBehalf(address borrower, uint repayAmount) virtual external returns (uint);
function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) virtual external returns (uint);
function sweepToken(EIP20NonStandardInterface token) virtual external;
function depositNFT(address _NFTAddress, uint256 _TokenID) virtual external;
function withdrawNFT(address _NFTAddress, uint256 _TokenID) virtual external;
function compound() virtual external returns (uint);
/*** Admin Functions ***/
function _addReserves(uint addAmount) virtual external returns (uint);
}
contract CDelegationStorage {
/**
* @notice Implementation address for this contract
*/
address public implementation;
}
abstract contract CDelegatorInterface is CDelegationStorage {
/**
* @notice Emitted when implementation is changed
*/
event NewImplementation(address oldImplementation, address newImplementation);
/**
* @notice Called by the admin to update the implementation of the delegator
* @param implementation_ The address of the new implementation for delegation
* @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
* @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
*/
function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) virtual external;
}
abstract contract CDelegateInterface is CDelegationStorage {
/**
* @notice Called by the delegator on a delegate to initialize it for duty
* @dev Should revert if any issues arise which make it unfit for delegation
* @param data The encoded bytes data for any initialization
*/
function _becomeImplementation(bytes memory data) virtual external;
/**
* @notice Called by the delegator on a delegate to forfeit its responsibility
*/
function _resignImplementation() virtual external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
interface IGmxRewardRouter {
function stakedGmxTracker() external view returns (address);
function bonusGmxTracker() external view returns (address);
function feeGmxTracker() external view returns (address);
function stakedGlpTracker() external view returns (address);
function feeGlpTracker() external view returns (address);
function glpManager() external view returns (address);
function handleRewards(
bool _shouldClaimGmx,
bool _shouldStakeGmx,
bool _shouldClaimEsGmx,
bool _shouldStakeEsGmx,
bool _shouldStakeMultiplierPoints,
bool _shouldClaimWeth,
bool _shouldConvertWethToEth
) external;
function signalTransfer(address _receiver) external;
function mintAndStakeGlp(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256) ;
function mintAndStakeGlpETH(uint256 _minUsdg, uint256 _minGlp) external payable returns (uint256);
function stakeGmx(uint256 amount) external;
function unstakeGmx(uint256 amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
interface IStakedGlp {
function allowance(address _owner, address _spender) external view returns (uint256);
function approve(address _spender, uint256 _amount) external returns (bool);
function transfer(address _recipient, uint256 _amount) external returns (bool);
function transferFrom(address _sender, address _recipient, uint256 _amount) external returns (bool);
function balanceOf(address _account) external view returns (uint256);
function totalSupply() external view returns (uint256);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
/**
* @title ERC 20 Token Standard Interface
* https://eips.ethereum.org/EIPS/eip-20
*/
interface EIP20Interface {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
/**
* @notice Get the total number of tokens in circulation
* @return The supply of tokens
*/
function totalSupply() external view returns (uint256);
/**
* @notice Gets the balance of the specified address
* @param owner The address from which the balance will be retrieved
* @return balance The balance
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return success Whether or not the transfer succeeded
*/
function transfer(address dst, uint256 amount) external returns (bool success);
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
* @return success Whether or not the transfer succeeded
*/
function transferFrom(address src, address dst, uint256 amount) external returns (bool success);
/**
* @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 success Whether or not the approval succeeded
*/
function approve(address spender, uint256 amount) external returns (bool success);
/**
* @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 remaining The number of tokens allowed to be spent (-1 means infinite)
*/
function allowance(address owner, address spender) external view returns (uint256 remaining);
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
abstract contract ComptrollerInterface {
/// @notice Indicator that this is a Comptroller contract (for inspection)
bool public constant isComptroller = true;
/*** Assets You Are In ***/
function enterMarkets(address[] calldata cTokens) virtual external returns (uint[] memory);
function exitMarket(address cToken) virtual external returns (uint);
function addToMarketExternal(address cToken, address borrower) virtual external;
/*** Policy Hooks ***/
function mintAllowed(address cToken, address minter, uint mintAmount) virtual external returns (uint);
function mintVerify(address cToken, address minter, uint mintAmount, uint mintTokens) virtual external;
function redeemAllowed(address cToken, address redeemer, uint redeemTokens) virtual external returns (uint);
function redeemVerify(address cToken, address redeemer, uint redeemAmount, uint redeemTokens) virtual external;
function borrowAllowed(address cToken, address borrower, uint borrowAmount) virtual external returns (uint);
function borrowVerify(address cToken, address borrower, uint borrowAmount) virtual external;
function getIsAccountVip(address _account) virtual public view returns (bool);
function repayBorrowAllowed(
address cToken,
address payer,
address borrower,
uint repayAmount) virtual external returns (uint);
function repayBorrowVerify(
address cToken,
address payer,
address borrower,
uint repayAmount,
uint borrowerIndex) virtual external;
function liquidateBorrowAllowed(
address cTokenBorrowed,
address cTokenCollateral,
address liquidator,
address borrower,
uint repayAmount) virtual external returns (uint);
function liquidateBorrowVerify(
address cTokenBorrowed,
address cTokenCollateral,
address liquidator,
address borrower,
uint repayAmount,
uint seizeTokens) virtual external;
function seizeAllowed(
address cTokenCollateral,
address cTokenBorrowed,
address liquidator,
address borrower,
uint seizeTokens) virtual external returns (uint);
function seizeVerify(
address cTokenCollateral,
address cTokenBorrowed,
address liquidator,
address borrower,
uint seizeTokens) virtual external;
function transferAllowed(address cToken, address src, address dst, uint transferTokens) virtual external returns (uint);
function transferVerify(address cToken, address src, address dst, uint transferTokens) virtual external;
/*** Liquidity/Liquidation Calculations ***/
function liquidateCalculateSeizeTokens(
address cTokenBorrowed,
address cTokenCollateral,
uint repayAmount) virtual external view returns (uint, uint);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
/**
* @title Compound's InterestRateModel Interface
* @author Compound
*/
abstract contract InterestRateModel {
/// @notice Indicator that this is an InterestRateModel contract (for inspection)
bool public constant isInterestRateModel = true;
/**
* @notice Calculates the current borrow interest rate per block
* @param cash The total amount of cash the market has
* @param borrows The total amount of borrows the market has outstanding
* @param reserves The total amount of reserves the market has
* @return The borrow rate per block (as a percentage, and scaled by 1e18)
*/
function getBorrowRate(uint cash, uint borrows, uint reserves) virtual external view returns (uint);
/**
* @notice Calculates the current supply interest rate per block
* @param cash The total amount of cash the market has
* @param borrows The total amount of borrows the market has outstanding
* @param reserves The total amount of reserves the market has
* @param reserveFactorMantissa The current reserve factor the market has
* @return The supply rate per block (as a percentage, and scaled by 1e18)
*/
function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) virtual external view returns (uint);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
/**
* @title EIP20NonStandardInterface
* @dev Version of ERC20 with no return values for `transfer` and `transferFrom`
* See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca
*/
interface EIP20NonStandardInterface {
/**
* @notice Get the total number of tokens in circulation
* @return The supply of tokens
*/
function totalSupply() external view returns (uint256);
/**
* @notice Gets the balance of the specified address
* @param owner The address from which the balance will be retrieved
* @return balance The balance
*/
function balanceOf(address owner) external view returns (uint256 balance);
///
/// !!!!!!!!!!!!!!
/// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification
/// !!!!!!!!!!!!!!
///
/**
* @notice Transfer `amount` tokens from `msg.sender` to `dst`
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
*/
function transfer(address dst, uint256 amount) external;
///
/// !!!!!!!!!!!!!!
/// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification
/// !!!!!!!!!!!!!!
///
/**
* @notice Transfer `amount` tokens from `src` to `dst`
* @param src The address of the source account
* @param dst The address of the destination account
* @param amount The number of tokens to transfer
*/
function transferFrom(address src, address dst, uint256 amount) external;
/**
* @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
* @return success Whether or not the approval succeeded
*/
function approve(address spender, uint256 amount) external returns (bool success);
/**
* @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 remaining The number of tokens allowed to be spent
*/
function allowance(address owner, address spender) external view returns (uint256 remaining);
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
}pragma solidity ^0.8.10;
interface IRewardTracker {
function depositBalances(address _account, address _depositToken) external view returns (uint256);
function stakedAmounts(address _account) external returns (uint256);
function updateRewards() external;
function stake(address _depositToken, uint256 _amount) external;
function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount) external;
function unstake(address _depositToken, uint256 _amount) external;
function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external;
function tokensPerInterval() external view returns (uint256);
function claim(address _receiver) external returns (uint256);
function claimForAccount(address _account, address _receiver) external returns (uint256);
function claimable(address _account) external view returns (uint256);
function averageStakedAmounts(address _account) external view returns (uint256);
function cumulativeRewards(address _account) external view returns (uint256);
function isHandler(address addr) external view returns (bool);
function inPrivateTransferMode() external view returns (bool);
function redeemDebtWithTnd(address _account, address _receiver, uint256 _amount) external;
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;
contract ComptrollerErrorReporter {
enum Error {
NO_ERROR,
UNAUTHORIZED,
COMPTROLLER_MISMATCH,
INSUFFICIENT_SHORTFALL,
INSUFFICIENT_LIQUIDITY,
INVALID_CLOSE_FACTOR,
INVALID_COLLATERAL_FACTOR,
INVALID_LIQUIDATION_INCENTIVE,
MARKET_NOT_ENTERED, // no longer possible
MARKET_NOT_LISTED,
MARKET_ALREADY_LISTED,
MATH_ERROR,
NONZERO_BORROW_BALANCE,
PRICE_ERROR,
REJECTION,
SNAPSHOT_ERROR,
TOO_MANY_ASSETS,
TOO_MUCH_REPAY,
CANNOT_BORROW_ASSET
}
enum FailureInfo {
ACCEPT_ADMIN_PENDING_ADMIN_CHECK,
ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK,
EXIT_MARKET_BALANCE_OWED,
EXIT_MARKET_REJECTION,
SET_CLOSE_FACTOR_OWNER_CHECK,
SET_CLOSE_FACTOR_VALIDATION,
SET_COLLATERAL_FACTOR_OWNER_CHECK,
SET_COLLATERAL_FACTOR_NO_EXISTS,
SET_COLLATERAL_FACTOR_VALIDATION,
SET_COLLATERAL_FACTOR_WITHOUT_PRICE,
SET_IMPLEMENTATION_OWNER_CHECK,
SET_LIQUIDATION_INCENTIVE_OWNER_CHECK,
SET_LIQUIDATION_INCENTIVE_VALIDATION,
SET_MAX_ASSETS_OWNER_CHECK,
SET_PENDING_ADMIN_OWNER_CHECK,
SET_PENDING_IMPLEMENTATION_OWNER_CHECK,
SET_PRICE_ORACLE_OWNER_CHECK,
SUPPORT_MARKET_EXISTS,
SUPPORT_MARKET_OWNER_CHECK,
SET_PAUSE_GUARDIAN_OWNER_CHECK
}
/**
* @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary
* contract-specific code that enables us to report opaque error codes from upgradeable contracts.
**/
event Failure(uint error, uint info, uint detail);
/**
* @dev use this when reporting a known error from the money market or a non-upgradeable collaborator
*/
function fail(Error err, FailureInfo info) internal returns (uint) {
emit Failure(uint(err), uint(info), 0);
return uint(err);
}
/**
* @dev use this when reporting an opaque error from an upgradeable collaborator contract
*/
function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) {
emit Failure(uint(err), uint(info), opaqueError);
return uint(err);
}
}
contract TokenErrorReporter {
uint public constant NO_ERROR = 0; // support legacy return codes
error TransferComptrollerRejection(uint256 errorCode);
error TransferNotAllowed();
error TransferNotEnough();
error TransferTooMuch();
error MintComptrollerRejection(uint256 errorCode);
error MintFreshnessCheck();
error RedeemComptrollerRejection(uint256 errorCode);
error RedeemFreshnessCheck();
error RedeemTransferOutNotPossible();
error BorrowComptrollerRejection(uint256 errorCode);
error BorrowFreshnessCheck();
error BorrowCashNotAvailable();
error RepayBorrowComptrollerRejection(uint256 errorCode);
error RepayBorrowFreshnessCheck();
error LiquidateComptrollerRejection(uint256 errorCode);
error LiquidateFreshnessCheck();
error LiquidateCollateralFreshnessCheck();
error LiquidateAccrueBorrowInterestFailed(uint256 errorCode);
error LiquidateAccrueCollateralInterestFailed(uint256 errorCode);
error LiquidateLiquidatorIsBorrower();
error LiquidateCloseAmountIsZero();
error LiquidateCloseAmountIsUintMax();
error LiquidateRepayBorrowFreshFailed(uint256 errorCode);
error LiquidateSeizeComptrollerRejection(uint256 errorCode);
error LiquidateSeizeLiquidatorIsBorrower();
error AcceptAdminPendingAdminCheck();
error SetComptrollerOwnerCheck();
error SetPendingAdminOwnerCheck();
error SetReserveFactorAdminCheck();
error SetReserveFactorFreshCheck();
error SetReserveFactorBoundsCheck();
error AddReservesFactorFreshCheck(uint256 actualAddAmount);
error ReduceReservesAdminCheck();
error ReduceReservesFreshCheck();
error ReduceReservesCashNotAvailable();
error ReduceReservesCashValidation();
error SetInterestRateModelOwnerCheck();
error SetInterestRateModelFreshCheck();
error SetStakedGlpAddressOwnerCheck();
error SignalTransferOwnerCheck();
error SetAutoCompoundOwnerCheck();
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract ComptrollerInterface","name":"comptroller_","type":"address"},{"internalType":"contract InterestRateModel","name":"interestRateModel_","type":"address"},{"internalType":"uint256","name":"initialExchangeRateMantissa_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"bool","name":"isGLP_","type":"bool"},{"internalType":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"cTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":false,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":false,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"autoCompoundBlockThreshold_","type":"uint256"}],"name":"_setAutoCompoundBlockThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"autocompound_","type":"bool"}],"name":"_setAutocompoundRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IStakedGlp","name":"stakedGLP_","type":"address"},{"internalType":"contract IGmxRewardRouter","name":"glpRewardRouter_","type":"address"},{"internalType":"address","name":"glpManager_","type":"address"},{"internalType":"address","name":"gmxToken_","type":"address"},{"internalType":"address","name":"stakedGmxTracker_","type":"address"},{"internalType":"address","name":"sbfGMX_","type":"address"}],"name":"_setGlpAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"withdrawFee_","type":"uint256"},{"internalType":"uint256","name":"managementFee_","type":"uint256"}],"name":"_setVaultFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"_signalTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"approveGlpRewardRouterWETHSpending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoCompoundBlockThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autocompound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksBetweenRateChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_NFTAddress","type":"address"},{"internalType":"uint256","name":"_TokenID","type":"uint256"}],"name":"depositNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositsDuringLastInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRateBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpBlockDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpRewardRouter","outputs":[{"internalType":"contract IGmxRewardRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmxToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastGlpDepositAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract CTokenInterface","name":"cTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFeeMAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevExchangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyType","outputs":[{"internalType":"uint256","name":"proxyTypeId","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"redeemUnderlyingForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbfGMX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedGLP","outputs":[{"internalType":"contract IStakedGlp","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedGmxTracker","outputs":[{"internalType":"contract IRewardTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract EIP20NonStandardInterface","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeMAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_NFTAddress","type":"address"},{"internalType":"uint256","name":"_TokenID","type":"uint256"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040527382af49447d8a07e3bd95bd0d56f35241523fbab1608052611b58601c553480156200002f57600080fd5b5060405162002c4d38038062002c4d83398101604081905262000052916200044f565b60088054610100600160a81b0319163361010002179055604051620000c590839062000091908e908e908e908e908e908e908e908e90602401620005ac565b60408051601f198184030181529190526020810180516001600160e01b0390811663ceeb027960e01b179091526200010b16565b50620000d4826000836200018a565b5050600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200065a9650505050505050565b6060600080846001600160a01b0316846040516200012a919062000620565b600060405180830381855af49150503d806000811462000167576040519150601f19603f3d011682016040523d82523d6000602084013e6200016c565b606091505b5091509150600082141562000182573d60208201fd5b949350505050565b60085461010090046001600160a01b03163314620002145760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840160405180910390fd5b811562000256576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b179091526200025491906200031416565b505b602080546001600160a01b038581166001600160a01b0319831617909255604051911690620002c3906200028f9084906024016200063e565b60408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b179091526200031416565b5060208054604080516001600160a01b038086168252909216928201929092527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b6020546060906200032f906001600160a01b0316836200010b565b92915050565b80516001600160a01b03811681146200034d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003855781810151838201526020016200036b565b8381111562000395576000848401525b50505050565b600082601f830112620003ad57600080fd5b81516001600160401b0380821115620003ca57620003ca62000352565b604051601f8301601f19908116603f01168101908282118183101715620003f557620003f562000352565b816040528381528660208588010111156200040f57600080fd5b6200042284602083016020890162000368565b9695505050505050565b805160ff811681146200034d57600080fd5b805180151581146200034d57600080fd5b60008060008060008060008060008060006101608c8e0312156200047257600080fd5b6200047d8c62000335565b9a506200048d60208d0162000335565b99506200049d60408d0162000335565b60608d015160808e0151919a5098506001600160401b03811115620004c157600080fd5b620004cf8e828f016200039b565b60a08e015190985090506001600160401b03811115620004ee57600080fd5b620004fc8e828f016200039b565b9650506200050d60c08d016200042c565b94506200051d60e08d016200043e565b93506200052e6101008d0162000335565b92506200053f6101208d0162000335565b6101408d01519092506001600160401b038111156200055d57600080fd5b6200056b8e828f016200039b565b9150509295989b509295989b9093969950565b600081518084526200059881602086016020860162000368565b601f01601f19169290920160200192915050565b6001600160a01b0389811682528881166020830152871660408201526060810186905261010060808201819052600090620005ea838201886200057e565b905082810360a08401526200060081876200057e565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082516200063481846020870162000368565b9190910192915050565b6020815260006200065360208301846200057e565b9392505050565b6080516125d06200067d60003960008181610c170152611f8301526125d06000f3fe6080604052600436106104945760003560e01c806378223e9711610260578063bd6d894d11610144578063e9c714f2116100c1578063f851a44011610085578063f851a44014610e8f578063f8f9da2814610eb4578063fa6db1bc14610ec9578063fca7820b14610ee9578063fe9c44ae14610f09578063ff5b0cb414610f1e57610494565b8063e9c714f214610e05578063f2b3abbd14610e1a578063f3fdb15a14610e3a578063f5e3c46214610e5a578063f69e204614610e7a57610494565b8063db006a7511610108578063db006a7514610d79578063dd62ed3e14610d99578063e083133514610db9578063e3cb2e0814610dcf578063e941fa7814610def57610494565b8063bd6d894d14610cce578063bf36d44b14610ce3578063c37f68e214610cf9578063c5ebeaec14610d39578063c66653c114610d5957610494565b8063a04202fb116101dd578063ad5c4648116101a1578063ad5c464814610c05578063ae9d70b014610c39578063b2a02ff114610c4e578063b71d1a0c14610c6e578063bae49e9914610c8e578063bc3b7a1814610cae57610494565b8063a04202fb14610b84578063a0712d6814610b9a578063a6afed9514610bba578063a9059cbb14610bcf578063aa5af0fd14610bef57610494565b806387788782116102245780638778878214610b035780638f840ddd14610b1957806395d89b4114610b2f57806395dd919314610b445780639b5b9b1814610b6457610494565b806378223e9714610a8257806378aa4adf14610a985780637d6232f914610aae578063842e11eb14610ac4578063852a12e314610ae357610494565b80633e941010116103875780635c60da1b116103045780636752e702116102c85780636752e702146109d557806368672231146109f05780636c540baf14610a175780636f307dc314610a2d57806370a0823114610a4d57806373acee9814610a6d57610494565b80635c60da1b1461093f5780635fe3b5671461095f578063601a0bf11461097f5780636054b7371461099f5780636088e93a146109b557610494565b806347bd37181161034b57806347bd3718146108bd5780634fbb9a3e146108d3578063555bcc40146108e957806359603aa0146109095780635b30cf551461091f57610494565b80633e941010146108295780634487152f146108495780634555d5c9146108695780634576b5db1461087d57806346469e711461089d57610494565b806318dda78b1161041557806326d9687c116103d957806326d9687c14610788578063313ce567146107a857806336818b01146107d45780633af9e669146107f45780633b1d21a21461081457610494565b806318dda78b146106e65780631be195601461070657806323b872dd146107285780632608f81814610748578063267822471461076857610494565b80630e7527021161045c5780630e75270214610657578063173b99041461068557806317bfdfbc1461069b57806318160ddd146106bb578063182df0f5146106d157610494565b806306dd74e51461058857806306fdde03146105c55780630933c1ed146105e7578063095ea7b3146106075780630ce4018a14610637575b341561050d5760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6020546040516000916001600160a01b03169061052d9083903690612067565b600060405180830381855af49150503d8060008114610568576040519150601f19603f3d011682016040523d82523d6000602084013e61056d565b606091505b505090506040513d6000823e818015610584573d82f35b3d82fd5b34801561059457600080fd5b506004546105a8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156105d157600080fd5b506105da610f33565b6040516105bc91906120d3565b3480156105f357600080fd5b506105da6106023660046121ab565b610fc1565b34801561061357600080fd5b506106276106223660046121f5565b610fe0565b60405190151581526020016105bc565b34801561064357600080fd5b506003546105a8906001600160a01b031681565b34801561066357600080fd5b50610677610672366004612221565b611052565b6040519081526020016105bc565b34801561069157600080fd5b50610677600d5481565b3480156106a757600080fd5b506106776106b636600461223a565b6110b7565b3480156106c757600080fd5b5061067760125481565b3480156106dd57600080fd5b50610677611104565b3480156106f257600080fd5b50610677610701366004612221565b611157565b34801561071257600080fd5b5061072661072136600461223a565b61119f565b005b34801561073457600080fd5b50610627610743366004612257565b6111ea565b34801561075457600080fd5b506106776107633660046121f5565b611265565b34801561077457600080fd5b506009546105a8906001600160a01b031681565b34801561079457600080fd5b506000546106279062010000900460ff1681565b3480156107b457600080fd5b506008546107c29060ff1681565b60405160ff90911681526020016105bc565b3480156107e057600080fd5b506106776107ef36600461223a565b6112cf565b34801561080057600080fd5b5061067761080f36600461223a565b61131c565b34801561082057600080fd5b50610677611369565b34801561083557600080fd5b50610677610844366004612221565b6113a0565b34801561085557600080fd5b506105da6108643660046121ab565b6113e8565b34801561087557600080fd5b506002610677565b34801561088957600080fd5b5061067761089836600461223a565b6114a6565b3480156108a957600080fd5b506106776108b8366004612298565b6114f3565b3480156108c957600080fd5b5061067760105481565b3480156108df57600080fd5b5061067761012c81565b3480156108f557600080fd5b506107266109043660046122c8565b611544565b34801561091557600080fd5b5061067760165481565b34801561092b57600080fd5b506001546105a8906001600160a01b031681565b34801561094b57600080fd5b506020546105a8906001600160a01b031681565b34801561096b57600080fd5b50600a546105a8906001600160a01b031681565b34801561098b57600080fd5b5061067761099a366004612221565b6116b9565b3480156109ab57600080fd5b50610677601b5481565b3480156109c157600080fd5b506107266109d03660046121f5565b611701565b3480156109e157600080fd5b50610677666379da05b6000081565b3480156109fc57600080fd5b506000546105a890630100000090046001600160a01b031681565b348015610a2357600080fd5b50610677600e5481565b348015610a3957600080fd5b50601f546105a8906001600160a01b031681565b348015610a5957600080fd5b50610677610a6836600461223a565b611755565b348015610a7957600080fd5b506106776117a2565b348015610a8e57600080fd5b50610677601d5481565b348015610aa457600080fd5b50610677601a5481565b348015610aba57600080fd5b50610677610bb881565b348015610ad057600080fd5b5060005461062790610100900460ff1681565b348015610aef57600080fd5b50610677610afe366004612221565b6117d9565b348015610b0f57600080fd5b5061067760145481565b348015610b2557600080fd5b5061067760115481565b348015610b3b57600080fd5b506105da611821565b348015610b5057600080fd5b50610677610b5f36600461223a565b61182e565b348015610b7057600080fd5b50610726610b7f3660046121f5565b61187b565b348015610b9057600080fd5b50610677601c5481565b348015610ba657600080fd5b50610677610bb5366004612221565b6118ca565b348015610bc657600080fd5b50610677611912565b348015610bdb57600080fd5b50610627610bea3660046121f5565b611949565b348015610bfb57600080fd5b50610677600f5481565b348015610c1157600080fd5b506105a87f000000000000000000000000000000000000000000000000000000000000000081565b348015610c4557600080fd5b5061067761199d565b348015610c5a57600080fd5b50610677610c69366004612257565b6119d4565b348015610c7a57600080fd5b50610677610c8936600461223a565b611a46565b348015610c9a57600080fd5b506002546105a8906001600160a01b031681565b348015610cba57600080fd5b50610677610cc936600461232a565b611a93565b348015610cda57600080fd5b50610677611add565b348015610cef57600080fd5b50610677601e5481565b348015610d0557600080fd5b50610d19610d1436600461223a565b611b14565b6040805194855260208501939093529183015260608201526080016105bc565b348015610d4557600080fd5b50610677610d54366004612221565b611b94565b348015610d6557600080fd5b50610677610d74366004612347565b611bdc565b348015610d8557600080fd5b50610677610d94366004612221565b611c30565b348015610da557600080fd5b50610677610db4366004612377565b611c78565b348015610dc557600080fd5b5061067760155481565b348015610ddb57600080fd5b50610677610dea3660046123a5565b611ccd565b348015610dfb57600080fd5b5061067760135481565b348015610e1157600080fd5b50610677611d64565b348015610e2657600080fd5b50610677610e3536600461223a565b611d9b565b348015610e4657600080fd5b50600b546105a8906001600160a01b031681565b348015610e6657600080fd5b50610677610e75366004612427565b611de8565b348015610e8657600080fd5b50610677611e44565b348015610e9b57600080fd5b506008546105a89061010090046001600160a01b031681565b348015610ec057600080fd5b50610677611e7b565b348015610ed557600080fd5b506005546105a8906001600160a01b031681565b348015610ef557600080fd5b50610677610f04366004612221565b611eb2565b348015610f1557600080fd5b50610627600181565b348015610f2a57600080fd5b50610726611efa565b60068054610f4090612469565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6c90612469565b8015610fb95780601f10610f8e57610100808354040283529160200191610fb9565b820191906000526020600020905b815481529060010190602001808311610f9c57829003601f168201915b505050505081565b602054606090610fda906001600160a01b031683611ff5565b92915050565b6040516001600160a01b03831660248201526044810182905260009081906110349060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610fc1565b90508080602001905181019061104a91906124a4565b949350505050565b60008061109a8360405160240161106b91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610fc1565b9050808060200190518101906110b091906124c1565b9392505050565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b179052600090819061113b906113e8565b90508080602001905181019061115191906124c1565b91505090565b60008061109a8360405160240161117091815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166318dda78b60e01b179052610fc1565b6040516001600160a01b03821660248201526111e69060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610fc1565b5050565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906112469060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610fc1565b90508080602001905181019061125c91906124a4565b95945050505050565b6040516001600160a01b03831660248201526044810182905260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610fc1565b90508080602001905181019061104a91906124c1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166336818b0160e01b179052610fc1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090819061113b906113e8565b60008061109a836040516024016113b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610fc1565b6060600080306001600160a01b03168460405160240161140891906120d3565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b1790525161143d91906124da565b600060405180830381855afa9150503d8060008114611478576040519150601f19603f3d011682016040523d82523d6000602084013e61147d565b606091505b50915091506000821415611492573d60208201fd5b8080602001905181019061104a91906124f6565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610fc1565b6000806112b98484604051602401611515929190918252602082015260400190565b60408051601f198184030181529190526020810180516001600160e01b03166346469e7160e01b179052610fc1565b60085461010090046001600160a01b031633146115c95760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e000000000000006064820152608401610504565b8115611603576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261160190610fc1565b505b602080546001600160a01b038581166001600160a01b0319831617909255604051911690611668906116399084906024016120d3565b60408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052610fc1565b5060208054604080516001600160a01b038086168252909216928201929092527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b60008061109a836040516024016116d291815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610fc1565b6040516001600160a01b0383166024820152604481018290526117509060640160408051601f198184030181529190526020810180516001600160e01b0316633044749d60e11b179052610fc1565b505050565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790526113e8565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b179052600090819061113b90610fc1565b60008061109a836040516024016117f291815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610fc1565b60078054610f4090612469565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b1790526113e8565b6040516001600160a01b0383166024820152604481018290526117509060640160408051601f198184030181529190526020810180516001600160e01b031663136b736360e31b179052610fc1565b60008061109a836040516024016118e391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b179052600090819061113b90610fc1565b6040516001600160a01b03831660248201526044810182905260009081906110349060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b179052600090819061113b906113e8565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190611a309060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610fc1565b90508080602001905181019061125c91906124c1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610fc1565b60008061109a83604051602401611aae911515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166317876f4360e31b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b179052600090819061113b90610fc1565b6000806000806000611b6e86604051602401611b3f91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b1790526113e8565b905080806020019051810190611b849190612564565b9450945094509450509193509193565b60008061109a83604051602401611bad91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610fc1565b604051602481018390526001600160a01b038216604482015260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b031663c66653c160e01b179052610fc1565b60008061109a83604051602401611c4991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610fc1565b6040516001600160a01b0380841660248301528216604482015260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b1790526113e8565b6040516001600160a01b03808816602483015280871660448301528086166064830152808516608483015280841660a4830152821660c48201526000908190611d429060e40160408051601f198184030181529190526020810180516001600160e01b0316631c7965c160e31b179052610fc1565b905080806020019051810190611d5891906124c1565b98975050505050505050565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b179052600090819061113b90610fc1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610fc1565b6040516001600160a01b03808516602483015260448201849052821660648201526000908190611a309060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316637b4f102360e11b179052600090819061113b90610fc1565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b179052600090819061113b906113e8565b60008061109a83604051602401611ecb91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610fc1565b60085461010090046001600160a01b03163314611f595760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e2063616c6c20617070726f766500000000006044820152606401610504565b60055460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff291906124a4565b50565b6060600080846001600160a01b03168460405161201291906124da565b600060405180830381855af49150503d806000811461204d576040519150601f19603f3d011682016040523d82523d6000602084013e612052565b606091505b5091509150600082141561104a573d60208201fd5b8183823760009101908152919050565b60005b8381101561209257818101518382015260200161207a565b838111156120a1576000848401525b50505050565b600081518084526120bf816020860160208601612077565b601f01601f19169290920160200192915050565b6020815260006110b060208301846120a7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612125576121256120e6565b604052919050565b600067ffffffffffffffff821115612147576121476120e6565b50601f01601f191660200190565b600082601f83011261216657600080fd5b81356121796121748261212d565b6120fc565b81815284602083860101111561218e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156121bd57600080fd5b813567ffffffffffffffff8111156121d457600080fd5b61104a84828501612155565b6001600160a01b0381168114611ff257600080fd5b6000806040838503121561220857600080fd5b8235612213816121e0565b946020939093013593505050565b60006020828403121561223357600080fd5b5035919050565b60006020828403121561224c57600080fd5b81356110b0816121e0565b60008060006060848603121561226c57600080fd5b8335612277816121e0565b92506020840135612287816121e0565b929592945050506040919091013590565b600080604083850312156122ab57600080fd5b50508035926020909101359150565b8015158114611ff257600080fd5b6000806000606084860312156122dd57600080fd5b83356122e8816121e0565b925060208401356122f8816122ba565b9150604084013567ffffffffffffffff81111561231457600080fd5b61232086828701612155565b9150509250925092565b60006020828403121561233c57600080fd5b81356110b0816122ba565b6000806040838503121561235a57600080fd5b82359150602083013561236c816121e0565b809150509250929050565b6000806040838503121561238a57600080fd5b8235612395816121e0565b9150602083013561236c816121e0565b60008060008060008060c087890312156123be57600080fd5b86356123c9816121e0565b955060208701356123d9816121e0565b945060408701356123e9816121e0565b935060608701356123f9816121e0565b92506080870135612409816121e0565b915060a0870135612419816121e0565b809150509295509295509295565b60008060006060848603121561243c57600080fd5b8335612447816121e0565b925060208401359150604084013561245e816121e0565b809150509250925092565b600181811c9082168061247d57607f821691505b6020821081141561249e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156124b657600080fd5b81516110b0816122ba565b6000602082840312156124d357600080fd5b5051919050565b600082516124ec818460208701612077565b9190910192915050565b60006020828403121561250857600080fd5b815167ffffffffffffffff81111561251f57600080fd5b8201601f8101841361253057600080fd5b805161253e6121748261212d565b81815285602083850101111561255357600080fd5b61125c826020830160208601612077565b6000806000806080858703121561257a57600080fd5b50508251602084015160408501516060909501519196909550909250905056fea264697066735822122012ed3fca8fe956e1df1443ded0b847f0d53277c6ae2a417f81d27815dd327e2464736f6c634300080a0033000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000eed247ba513a8d6f78be9318399f5ed1a4808f8e000000000000000000000000c2933eff32188e4655887cdc9c707a77e1229595000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085abbc0f8681c4fb33b6a3a601ad99e92a32d1ac000000000000000000000000e03e8575f397ff0ae6fc07133797203d73ce915d00000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000474444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004744441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106104945760003560e01c806378223e9711610260578063bd6d894d11610144578063e9c714f2116100c1578063f851a44011610085578063f851a44014610e8f578063f8f9da2814610eb4578063fa6db1bc14610ec9578063fca7820b14610ee9578063fe9c44ae14610f09578063ff5b0cb414610f1e57610494565b8063e9c714f214610e05578063f2b3abbd14610e1a578063f3fdb15a14610e3a578063f5e3c46214610e5a578063f69e204614610e7a57610494565b8063db006a7511610108578063db006a7514610d79578063dd62ed3e14610d99578063e083133514610db9578063e3cb2e0814610dcf578063e941fa7814610def57610494565b8063bd6d894d14610cce578063bf36d44b14610ce3578063c37f68e214610cf9578063c5ebeaec14610d39578063c66653c114610d5957610494565b8063a04202fb116101dd578063ad5c4648116101a1578063ad5c464814610c05578063ae9d70b014610c39578063b2a02ff114610c4e578063b71d1a0c14610c6e578063bae49e9914610c8e578063bc3b7a1814610cae57610494565b8063a04202fb14610b84578063a0712d6814610b9a578063a6afed9514610bba578063a9059cbb14610bcf578063aa5af0fd14610bef57610494565b806387788782116102245780638778878214610b035780638f840ddd14610b1957806395d89b4114610b2f57806395dd919314610b445780639b5b9b1814610b6457610494565b806378223e9714610a8257806378aa4adf14610a985780637d6232f914610aae578063842e11eb14610ac4578063852a12e314610ae357610494565b80633e941010116103875780635c60da1b116103045780636752e702116102c85780636752e702146109d557806368672231146109f05780636c540baf14610a175780636f307dc314610a2d57806370a0823114610a4d57806373acee9814610a6d57610494565b80635c60da1b1461093f5780635fe3b5671461095f578063601a0bf11461097f5780636054b7371461099f5780636088e93a146109b557610494565b806347bd37181161034b57806347bd3718146108bd5780634fbb9a3e146108d3578063555bcc40146108e957806359603aa0146109095780635b30cf551461091f57610494565b80633e941010146108295780634487152f146108495780634555d5c9146108695780634576b5db1461087d57806346469e711461089d57610494565b806318dda78b1161041557806326d9687c116103d957806326d9687c14610788578063313ce567146107a857806336818b01146107d45780633af9e669146107f45780633b1d21a21461081457610494565b806318dda78b146106e65780631be195601461070657806323b872dd146107285780632608f81814610748578063267822471461076857610494565b80630e7527021161045c5780630e75270214610657578063173b99041461068557806317bfdfbc1461069b57806318160ddd146106bb578063182df0f5146106d157610494565b806306dd74e51461058857806306fdde03146105c55780630933c1ed146105e7578063095ea7b3146106075780630ce4018a14610637575b341561050d5760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6020546040516000916001600160a01b03169061052d9083903690612067565b600060405180830381855af49150503d8060008114610568576040519150601f19603f3d011682016040523d82523d6000602084013e61056d565b606091505b505090506040513d6000823e818015610584573d82f35b3d82fd5b34801561059457600080fd5b506004546105a8906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156105d157600080fd5b506105da610f33565b6040516105bc91906120d3565b3480156105f357600080fd5b506105da6106023660046121ab565b610fc1565b34801561061357600080fd5b506106276106223660046121f5565b610fe0565b60405190151581526020016105bc565b34801561064357600080fd5b506003546105a8906001600160a01b031681565b34801561066357600080fd5b50610677610672366004612221565b611052565b6040519081526020016105bc565b34801561069157600080fd5b50610677600d5481565b3480156106a757600080fd5b506106776106b636600461223a565b6110b7565b3480156106c757600080fd5b5061067760125481565b3480156106dd57600080fd5b50610677611104565b3480156106f257600080fd5b50610677610701366004612221565b611157565b34801561071257600080fd5b5061072661072136600461223a565b61119f565b005b34801561073457600080fd5b50610627610743366004612257565b6111ea565b34801561075457600080fd5b506106776107633660046121f5565b611265565b34801561077457600080fd5b506009546105a8906001600160a01b031681565b34801561079457600080fd5b506000546106279062010000900460ff1681565b3480156107b457600080fd5b506008546107c29060ff1681565b60405160ff90911681526020016105bc565b3480156107e057600080fd5b506106776107ef36600461223a565b6112cf565b34801561080057600080fd5b5061067761080f36600461223a565b61131c565b34801561082057600080fd5b50610677611369565b34801561083557600080fd5b50610677610844366004612221565b6113a0565b34801561085557600080fd5b506105da6108643660046121ab565b6113e8565b34801561087557600080fd5b506002610677565b34801561088957600080fd5b5061067761089836600461223a565b6114a6565b3480156108a957600080fd5b506106776108b8366004612298565b6114f3565b3480156108c957600080fd5b5061067760105481565b3480156108df57600080fd5b5061067761012c81565b3480156108f557600080fd5b506107266109043660046122c8565b611544565b34801561091557600080fd5b5061067760165481565b34801561092b57600080fd5b506001546105a8906001600160a01b031681565b34801561094b57600080fd5b506020546105a8906001600160a01b031681565b34801561096b57600080fd5b50600a546105a8906001600160a01b031681565b34801561098b57600080fd5b5061067761099a366004612221565b6116b9565b3480156109ab57600080fd5b50610677601b5481565b3480156109c157600080fd5b506107266109d03660046121f5565b611701565b3480156109e157600080fd5b50610677666379da05b6000081565b3480156109fc57600080fd5b506000546105a890630100000090046001600160a01b031681565b348015610a2357600080fd5b50610677600e5481565b348015610a3957600080fd5b50601f546105a8906001600160a01b031681565b348015610a5957600080fd5b50610677610a6836600461223a565b611755565b348015610a7957600080fd5b506106776117a2565b348015610a8e57600080fd5b50610677601d5481565b348015610aa457600080fd5b50610677601a5481565b348015610aba57600080fd5b50610677610bb881565b348015610ad057600080fd5b5060005461062790610100900460ff1681565b348015610aef57600080fd5b50610677610afe366004612221565b6117d9565b348015610b0f57600080fd5b5061067760145481565b348015610b2557600080fd5b5061067760115481565b348015610b3b57600080fd5b506105da611821565b348015610b5057600080fd5b50610677610b5f36600461223a565b61182e565b348015610b7057600080fd5b50610726610b7f3660046121f5565b61187b565b348015610b9057600080fd5b50610677601c5481565b348015610ba657600080fd5b50610677610bb5366004612221565b6118ca565b348015610bc657600080fd5b50610677611912565b348015610bdb57600080fd5b50610627610bea3660046121f5565b611949565b348015610bfb57600080fd5b50610677600f5481565b348015610c1157600080fd5b506105a87f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181565b348015610c4557600080fd5b5061067761199d565b348015610c5a57600080fd5b50610677610c69366004612257565b6119d4565b348015610c7a57600080fd5b50610677610c8936600461223a565b611a46565b348015610c9a57600080fd5b506002546105a8906001600160a01b031681565b348015610cba57600080fd5b50610677610cc936600461232a565b611a93565b348015610cda57600080fd5b50610677611add565b348015610cef57600080fd5b50610677601e5481565b348015610d0557600080fd5b50610d19610d1436600461223a565b611b14565b6040805194855260208501939093529183015260608201526080016105bc565b348015610d4557600080fd5b50610677610d54366004612221565b611b94565b348015610d6557600080fd5b50610677610d74366004612347565b611bdc565b348015610d8557600080fd5b50610677610d94366004612221565b611c30565b348015610da557600080fd5b50610677610db4366004612377565b611c78565b348015610dc557600080fd5b5061067760155481565b348015610ddb57600080fd5b50610677610dea3660046123a5565b611ccd565b348015610dfb57600080fd5b5061067760135481565b348015610e1157600080fd5b50610677611d64565b348015610e2657600080fd5b50610677610e3536600461223a565b611d9b565b348015610e4657600080fd5b50600b546105a8906001600160a01b031681565b348015610e6657600080fd5b50610677610e75366004612427565b611de8565b348015610e8657600080fd5b50610677611e44565b348015610e9b57600080fd5b506008546105a89061010090046001600160a01b031681565b348015610ec057600080fd5b50610677611e7b565b348015610ed557600080fd5b506005546105a8906001600160a01b031681565b348015610ef557600080fd5b50610677610f04366004612221565b611eb2565b348015610f1557600080fd5b50610627600181565b348015610f2a57600080fd5b50610726611efa565b60068054610f4090612469565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6c90612469565b8015610fb95780601f10610f8e57610100808354040283529160200191610fb9565b820191906000526020600020905b815481529060010190602001808311610f9c57829003601f168201915b505050505081565b602054606090610fda906001600160a01b031683611ff5565b92915050565b6040516001600160a01b03831660248201526044810182905260009081906110349060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610fc1565b90508080602001905181019061104a91906124a4565b949350505050565b60008061109a8360405160240161106b91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610fc1565b9050808060200190518101906110b091906124c1565b9392505050565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b179052600090819061113b906113e8565b90508080602001905181019061115191906124c1565b91505090565b60008061109a8360405160240161117091815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166318dda78b60e01b179052610fc1565b6040516001600160a01b03821660248201526111e69060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610fc1565b5050565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906112469060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610fc1565b90508080602001905181019061125c91906124a4565b95945050505050565b6040516001600160a01b03831660248201526044810182905260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610fc1565b90508080602001905181019061104a91906124c1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166336818b0160e01b179052610fc1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090819061113b906113e8565b60008061109a836040516024016113b991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610fc1565b6060600080306001600160a01b03168460405160240161140891906120d3565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b1790525161143d91906124da565b600060405180830381855afa9150503d8060008114611478576040519150601f19603f3d011682016040523d82523d6000602084013e61147d565b606091505b50915091506000821415611492573d60208201fd5b8080602001905181019061104a91906124f6565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610fc1565b6000806112b98484604051602401611515929190918252602082015260400190565b60408051601f198184030181529190526020810180516001600160e01b03166346469e7160e01b179052610fc1565b60085461010090046001600160a01b031633146115c95760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e000000000000006064820152608401610504565b8115611603576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261160190610fc1565b505b602080546001600160a01b038581166001600160a01b0319831617909255604051911690611668906116399084906024016120d3565b60408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b179052610fc1565b5060208054604080516001600160a01b038086168252909216928201929092527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b60008061109a836040516024016116d291815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610fc1565b6040516001600160a01b0383166024820152604481018290526117509060640160408051601f198184030181529190526020810180516001600160e01b0316633044749d60e11b179052610fc1565b505050565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790526113e8565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b179052600090819061113b90610fc1565b60008061109a836040516024016117f291815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610fc1565b60078054610f4090612469565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b1790526113e8565b6040516001600160a01b0383166024820152604481018290526117509060640160408051601f198184030181529190526020810180516001600160e01b031663136b736360e31b179052610fc1565b60008061109a836040516024016118e391815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b179052600090819061113b90610fc1565b6040516001600160a01b03831660248201526044810182905260009081906110349060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b179052600090819061113b906113e8565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190611a309060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610fc1565b90508080602001905181019061125c91906124c1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610fc1565b60008061109a83604051602401611aae911515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166317876f4360e31b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b179052600090819061113b90610fc1565b6000806000806000611b6e86604051602401611b3f91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b1790526113e8565b905080806020019051810190611b849190612564565b9450945094509450509193509193565b60008061109a83604051602401611bad91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610fc1565b604051602481018390526001600160a01b038216604482015260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b031663c66653c160e01b179052610fc1565b60008061109a83604051602401611c4991815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610fc1565b6040516001600160a01b0380841660248301528216604482015260009081906112b99060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b1790526113e8565b6040516001600160a01b03808816602483015280871660448301528086166064830152808516608483015280841660a4830152821660c48201526000908190611d429060e40160408051601f198184030181529190526020810180516001600160e01b0316631c7965c160e31b179052610fc1565b905080806020019051810190611d5891906124c1565b98975050505050505050565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b179052600090819061113b90610fc1565b6040516001600160a01b0382166024820152600090819061109a9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610fc1565b6040516001600160a01b03808516602483015260448201849052821660648201526000908190611a309060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610fc1565b6040805160048152602481019091526020810180516001600160e01b0316637b4f102360e11b179052600090819061113b90610fc1565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b179052600090819061113b906113e8565b60008061109a83604051602401611ecb91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610fc1565b60085461010090046001600160a01b03163314611f595760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e2063616c6c20617070726f766500000000006044820152606401610504565b60055460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201527f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab19091169063095ea7b3906044016020604051808303816000875af1158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff291906124a4565b50565b6060600080846001600160a01b03168460405161201291906124da565b600060405180830381855af49150503d806000811461204d576040519150601f19603f3d011682016040523d82523d6000602084013e612052565b606091505b5091509150600082141561104a573d60208201fd5b8183823760009101908152919050565b60005b8381101561209257818101518382015260200161207a565b838111156120a1576000848401525b50505050565b600081518084526120bf816020860160208601612077565b601f01601f19169290920160200192915050565b6020815260006110b060208301846120a7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612125576121256120e6565b604052919050565b600067ffffffffffffffff821115612147576121476120e6565b50601f01601f191660200190565b600082601f83011261216657600080fd5b81356121796121748261212d565b6120fc565b81815284602083860101111561218e57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156121bd57600080fd5b813567ffffffffffffffff8111156121d457600080fd5b61104a84828501612155565b6001600160a01b0381168114611ff257600080fd5b6000806040838503121561220857600080fd5b8235612213816121e0565b946020939093013593505050565b60006020828403121561223357600080fd5b5035919050565b60006020828403121561224c57600080fd5b81356110b0816121e0565b60008060006060848603121561226c57600080fd5b8335612277816121e0565b92506020840135612287816121e0565b929592945050506040919091013590565b600080604083850312156122ab57600080fd5b50508035926020909101359150565b8015158114611ff257600080fd5b6000806000606084860312156122dd57600080fd5b83356122e8816121e0565b925060208401356122f8816122ba565b9150604084013567ffffffffffffffff81111561231457600080fd5b61232086828701612155565b9150509250925092565b60006020828403121561233c57600080fd5b81356110b0816122ba565b6000806040838503121561235a57600080fd5b82359150602083013561236c816121e0565b809150509250929050565b6000806040838503121561238a57600080fd5b8235612395816121e0565b9150602083013561236c816121e0565b60008060008060008060c087890312156123be57600080fd5b86356123c9816121e0565b955060208701356123d9816121e0565b945060408701356123e9816121e0565b935060608701356123f9816121e0565b92506080870135612409816121e0565b915060a0870135612419816121e0565b809150509295509295509295565b60008060006060848603121561243c57600080fd5b8335612447816121e0565b925060208401359150604084013561245e816121e0565b809150509250925092565b600181811c9082168061247d57607f821691505b6020821081141561249e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156124b657600080fd5b81516110b0816122ba565b6000602082840312156124d357600080fd5b5051919050565b600082516124ec818460208701612077565b9190910192915050565b60006020828403121561250857600080fd5b815167ffffffffffffffff81111561251f57600080fd5b8201601f8101841361253057600080fd5b805161253e6121748261212d565b81815285602083850101111561255357600080fd5b61125c826020830160208601612077565b6000806000806080858703121561257a57600080fd5b50508251602084015160408501516060909501519196909550909250905056fea264697066735822122012ed3fca8fe956e1df1443ded0b847f0d53277c6ae2a417f81d27815dd327e2464736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1000000000000000000000000eed247ba513a8d6f78be9318399f5ed1a4808f8e000000000000000000000000c2933eff32188e4655887cdc9c707a77e1229595000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085abbc0f8681c4fb33b6a3a601ad99e92a32d1ac000000000000000000000000e03e8575f397ff0ae6fc07133797203d73ce915d00000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000474444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004744441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : underlying_ (address): 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1
Arg [1] : comptroller_ (address): 0xeed247Ba513A8D6f78BE9318399f5eD1a4808F8e
Arg [2] : interestRateModel_ (address): 0xc2933EfF32188e4655887cDC9c707A77E1229595
Arg [3] : initialExchangeRateMantissa_ (uint256): 200000000000000000000000000
Arg [4] : name_ (string): tDAI
Arg [5] : symbol_ (string): tDAI
Arg [6] : decimals_ (uint8): 8
Arg [7] : isGLP_ (bool): False
Arg [8] : admin_ (address): 0x85aBbC0f8681c4fB33B6a3A601AD99E92A32D1ac
Arg [9] : implementation_ (address): 0xE03e8575F397fF0aE6FC07133797203d73CE915d
Arg [10] : becomeImplementationData (bytes): 0x00
-----Encoded View---------------
17 Constructor Arguments found :
Arg [0] : 000000000000000000000000da10009cbd5d07dd0cecc66161fc93d7c9000da1
Arg [1] : 000000000000000000000000eed247ba513a8d6f78be9318399f5ed1a4808f8e
Arg [2] : 000000000000000000000000c2933eff32188e4655887cdc9c707a77e1229595
Arg [3] : 000000000000000000000000000000000000000000a56fa5b99019a5c8000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000085abbc0f8681c4fb33b6a3a601ad99e92a32d1ac
Arg [9] : 000000000000000000000000e03e8575f397ff0ae6fc07133797203d73ce915d
Arg [10] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 7444414900000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 7444414900000000000000000000000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$36.32
Net Worth in ETH
0.015019
Token Allocations
DAI
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ARB | 100.00% | $1 | 36.2515 | $36.32 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.