Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 16500215 | 669 days ago | IN | 0 ETH | 0.05740204 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CErc20DelegatorKYC
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause // File: contracts/ComptrollerInterface.sol pragma solidity ^0.5.12; interface ComptrollerInterface { /** * @notice Marker function used for light validation when updating the comptroller of a market * @dev Implementations should simply return true. * @return true */ function isComptroller() external view returns (bool); /*** Assets You Are In ***/ function enterMarkets( address[] calldata cTokens ) external returns (uint256[] memory); function exitMarket(address cToken) external returns (uint256); /*** Policy Hooks ***/ function mintAllowed( address cToken, address minter, uint256 mintAmount ) external returns (uint256); function mintVerify( address cToken, address minter, uint256 mintAmount, uint256 mintTokens ) external; function redeemAllowed( address cToken, address redeemer, uint256 redeemTokens ) external returns (uint256); function redeemVerify( address cToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens ) external; function borrowAllowed( address cToken, address borrower, uint256 borrowAmount ) external returns (uint256); function borrowVerify( address cToken, address borrower, uint256 borrowAmount ) external; function repayBorrowAllowed( address cToken, address payer, address borrower, uint256 repayAmount ) external returns (uint256); function repayBorrowVerify( address cToken, address payer, address borrower, uint256 repayAmount, uint256 borrowerIndex ) external; function liquidateBorrowAllowed( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint256 repayAmount ) external returns (uint256); function liquidateBorrowVerify( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint256 repayAmount, uint256 seizeTokens ) external; function seizeAllowed( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens ) external returns (uint256); function seizeVerify( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens ) external; function transferAllowed( address cToken, address src, address dst, uint256 transferTokens ) external returns (uint256); function transferVerify( address cToken, address src, address dst, uint256 transferTokens ) external; /*** Liquidity/Liquidation Calculations ***/ function liquidateCalculateSeizeTokens( address cTokenBorrowed, address cTokenCollateral, uint256 repayAmount ) external view returns (uint256, uint256); } // File: contracts/InterestRateModel.sol pragma solidity ^0.5.12; /** * @title Compound's InterestRateModel Interface * @author Compound */ interface InterestRateModel { /** * @notice Indicator that this is an InterestRateModel contract (for inspection) */ function isInterestRateModel() external pure returns (bool); /** * @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 amnount of reserves the market has * @return The borrow rate per block (as a percentage, and scaled by 1e18) */ function getBorrowRate( uint256 cash, uint256 borrows, uint256 reserves ) external view returns (uint256); /** * @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 amnount 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( uint256 cash, uint256 borrows, uint256 reserves, uint256 reserveFactorMantissa ) external view returns (uint256); } // File: contracts/CTokenInterfaces.sol pragma solidity ^0.5.12; contract CTokenStorage { /** * @dev Guard variable for re-entrancy checks */ bool internal _notEntered; /** * @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; /** * @notice Maximum borrow rate that can ever be applied (.0005% / block) */ uint256 internal constant borrowRateMaxMantissa = 0.0005e16; /** * @notice Maximum fraction of interest that can be set aside for reserves */ uint256 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; /** * @notice Initial exchange rate used when minting the first CTokens (used when totalSupply = 0) */ uint256 internal initialExchangeRateMantissa; /** * @notice Fraction of interest currently set aside for reserves */ uint256 public reserveFactorMantissa; /** * @notice Block number that interest was last accrued at */ uint256 public accrualBlockNumber; /** * @notice Accumulator of the total earned interest rate since the opening of the market */ uint256 public borrowIndex; /** * @notice Total amount of outstanding borrows of the underlying in this market */ uint256 public totalBorrows; /** * @notice Total amount of reserves of the underlying held in this market */ uint256 public totalReserves; /** * @notice Total number of tokens in circulation */ uint256 public totalSupply; /** * @notice Official record of token balances for each account */ mapping(address => uint256) internal accountTokens; /** * @notice Approved token transfer amounts on behalf of others */ mapping(address => mapping(address => uint256)) 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 { uint256 principal; uint256 interestIndex; } /** * @notice Mapping of account addresses to outstanding borrow balances */ mapping(address => BorrowSnapshot) internal accountBorrows; } pragma solidity ^0.5.16; interface ISanctionsList { function isSanctioned(address addr) external view returns (bool); } pragma solidity ^0.5.16; /** * @title IKYCRegistry * @author Ondo Finance * @notice The interface for Ondo's KYC Registry contract */ interface IKYCRegistry { /** * @notice Retrieves KYC status of an account * * @param kycRequirementGroup The KYC group for which we wish to check * @param account The account we wish to retrieve KYC status for * * @return bool Whether the `account` is KYC'd */ function getKYCStatus( uint256 kycRequirementGroup, address account ) external view returns (bool); } pragma solidity ^0.5.16; ///@notice KYC+Sanctions Specific Storage contract OndoKYCStorage { /** * @dev Event for when the KYC registry reference is set * * @param oldRegistry The old registry * @param newRegistry The new registry */ event KYCRegistrySet(address oldRegistry, address newRegistry); /** * @dev Event for when the KYC group for this client is set * * @param oldRequirementGroup The old KYC group * @param newRequirementGroup The new KYC group */ event KYCRequirementGroupSet( uint256 oldRequirementGroup, uint256 newRequirementGroup ); /** * @notice Pointer to sanctions oracle */ ISanctionsList public constant sanctionsList = ISanctionsList(0x40C57923924B5c5c5455c48D93317139ADDaC8fb); /** * @notice Pointer to kycRegistry */ IKYCRegistry public kycRegistry; /** * @notice Reference to KYC requirement group */ uint256 public kycRequirementGroup; } contract CTokenInterface is CTokenStorage, OndoKYCStorage { /** * @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( uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows ); /** * @notice Event emitted when tokens are minted */ event Mint(address minter, uint256 mintAmount, uint256 mintTokens); /** * @notice Event emitted when tokens are redeemed */ event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens); /** * @notice Event emitted when underlying is borrowed */ event Borrow( address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows ); /** * @notice Event emitted when a borrow is repaid */ event RepayBorrow( address payer, address borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows ); /** * @notice Event emitted when a borrow is liquidated */ event LiquidateBorrow( address liquidator, address borrower, uint256 repayAmount, address cTokenCollateral, uint256 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( uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa ); /** * @notice Event emitted when the reserves are added */ event ReservesAdded( address benefactor, uint256 addAmount, uint256 newTotalReserves ); /** * @notice Event emitted when the reserves are reduced */ event ReservesReduced( address admin, uint256 reduceAmount, uint256 newTotalReserves ); /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint256 amount); /** * @notice EIP20 Approval event */ event Approval( address indexed owner, address indexed spender, uint256 amount ); /** * @notice Failure event */ event Failure(uint256 error, uint256 info, uint256 detail); /*** User Interface ***/ function transfer(address dst, uint256 amount) external returns (bool); function transferFrom( address src, address dst, uint256 amount ) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function balanceOfUnderlying(address owner) external returns (uint256); function getAccountSnapshot( address account ) external view returns (uint256, uint256, uint256, uint256); function borrowRatePerBlock() external view returns (uint256); function supplyRatePerBlock() external view returns (uint256); function totalBorrowsCurrent() external returns (uint256); function borrowBalanceCurrent(address account) external returns (uint256); function borrowBalanceStored(address account) public view returns (uint256); function exchangeRateCurrent() public returns (uint256); function exchangeRateStored() public view returns (uint256); function getCash() external view returns (uint256); function accrueInterest() public returns (uint256); function seize( address liquidator, address borrower, uint256 seizeTokens ) external returns (uint256); /*** Admin Functions ***/ function _setPendingAdmin( address payable newPendingAdmin ) external returns (uint256); function _acceptAdmin() external returns (uint256); function _setComptroller( ComptrollerInterface newComptroller ) public returns (uint256); function _setReserveFactor( uint256 newReserveFactorMantissa ) external returns (uint256); function _reduceReserves(uint256 reduceAmount) external returns (uint256); function _setInterestRateModel( InterestRateModel newInterestRateModel ) public returns (uint256); } contract CErc20Storage { /** * @notice Underlying asset for this CToken */ address public underlying; } contract CErc20Interface is CErc20Storage { /*** User Interface ***/ function mint(uint256 mintAmount) external returns (uint256); function redeem(uint256 redeemTokens) external returns (uint256); function redeemUnderlying(uint256 redeemAmount) external returns (uint256); function borrow(uint256 borrowAmount) external returns (uint256); function repayBorrow(uint256 repayAmount) external returns (uint256); function repayBorrowBehalf( address borrower, uint256 repayAmount ) external returns (uint256); function liquidateBorrow( address borrower, uint256 repayAmount, CTokenInterface cTokenCollateral ) external returns (uint256); /*** Admin Functions ***/ function _addReserves(uint256 addAmount) external returns (uint256); } contract CDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } 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 ) public; } 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) public; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public; } // File: contracts/CErc20Delegator.sol pragma solidity ^0.5.12; /** * @title Compound's CErc20Delegator Contract * @notice CTokens which wrap an EIP-20 underlying and delegate to an implementation * @dev Designed to Delegate to KYC/Sanctions CToken Implmentations * @author Compound */ contract CErc20DelegatorKYC 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 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 becomeImplmenetation */ constructor( address underlying_, ComptrollerInterface comptroller_, InterestRateModel interestRateModel_, uint256 initialExchangeRateMantissa_, string memory name_, string memory symbol_, uint8 decimals_, address payable admin_, address implementation_, address kycRegistry_, uint256 kycRequirementGroup_, bytes memory becomeImplementationData ) public { // Creator of the contract is admin during initialization admin = 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,address,uint256)", underlying_, comptroller_, interestRateModel_, initialExchangeRateMantissa_, name_, symbol_, decimals_, kycRegistry_, kycRequirementGroup_ ) ); // 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 ) 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); } /** * @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(uint256 mintAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("mint(uint256)", mintAmount) ); return abi.decode(data, (uint256)); } /** * @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(uint256 redeemTokens) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("redeem(uint256)", redeemTokens) ); return abi.decode(data, (uint256)); } /** * @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(uint256 redeemAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount) ); return abi.decode(data, (uint256)); } /** * @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(uint256 borrowAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("borrow(uint256)", borrowAmount) ); return abi.decode(data, (uint256)); } /** * @notice Sender repays their own borrow * @param repayAmount The amount to repay * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrow(uint256 repayAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("repayBorrow(uint256)", repayAmount) ); return abi.decode(data, (uint256)); } /** * @notice Sender repays a borrow belonging to borrower * @param borrower the account with the debt being payed off * @param repayAmount The amount to repay * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrowBehalf( address borrower, uint256 repayAmount ) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature( "repayBorrowBehalf(address,uint256)", borrower, repayAmount ) ); return abi.decode(data, (uint256)); } /** * @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, uint256 repayAmount, CTokenInterface cTokenCollateral ) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature( "liquidateBorrow(address,uint256,address)", borrower, repayAmount, cTokenCollateral ) ); return abi.decode(data, (uint256)); } /** * @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, uint256 amount) 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 ) 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) 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 ) external view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("allowance(address,address)", owner, spender) ); return abi.decode(data, (uint256)); } /** * @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) external view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("balanceOf(address)", owner) ); return abi.decode(data, (uint256)); } /** * @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) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("balanceOfUnderlying(address)", owner) ); return abi.decode(data, (uint256)); } /** * @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 ) external view returns (uint256, uint256, uint256, uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("getAccountSnapshot(address)", account) ); return abi.decode(data, (uint256, uint256, uint256, uint256)); } /** * @notice Returns the current per-block borrow interest rate for this cToken * @return The borrow interest rate per block, scaled by 1e18 */ function borrowRatePerBlock() external view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("borrowRatePerBlock()") ); return abi.decode(data, (uint256)); } /** * @notice Returns the current per-block supply interest rate for this cToken * @return The supply interest rate per block, scaled by 1e18 */ function supplyRatePerBlock() external view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("supplyRatePerBlock()") ); return abi.decode(data, (uint256)); } /** * @notice Returns the current total borrows plus accrued interest * @return The total borrows with interest */ function totalBorrowsCurrent() external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("totalBorrowsCurrent()") ); return abi.decode(data, (uint256)); } /** * @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) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("borrowBalanceCurrent(address)", account) ); return abi.decode(data, (uint256)); } /** * @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) public view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("borrowBalanceStored(address)", account) ); return abi.decode(data, (uint256)); } /** * @notice Accrue interest then return the up-to-date exchange rate * @return Calculated exchange rate scaled by 1e18 */ function exchangeRateCurrent() public returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("exchangeRateCurrent()") ); return abi.decode(data, (uint256)); } /** * @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() public view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("exchangeRateStored()") ); return abi.decode(data, (uint256)); } /** * @notice Get cash balance of this cToken in the underlying asset * @return The quantity of underlying asset owned by this contract */ function getCash() external view returns (uint256) { bytes memory data = delegateToViewImplementation( abi.encodeWithSignature("getCash()") ); return abi.decode(data, (uint256)); } /** * @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() public returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("accrueInterest()") ); return abi.decode(data, (uint256)); } /** * @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, uint256 seizeTokens ) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature( "seize(address,address,uint256)", liquidator, borrower, seizeTokens ) ); return abi.decode(data, (uint256)); } /*** 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 ) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin) ); return abi.decode(data, (uint256)); } /** * @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 ) public returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("_setComptroller(address)", newComptroller) ); return abi.decode(data, (uint256)); } /** * @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( uint256 newReserveFactorMantissa ) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature( "_setReserveFactor(uint256)", newReserveFactorMantissa ) ); return abi.decode(data, (uint256)); } /** * @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() external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("_acceptAdmin()") ); return abi.decode(data, (uint256)); } /** * @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(uint256 addAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("_addReserves(uint256)", addAmount) ); return abi.decode(data, (uint256)); } /** * @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(uint256 reduceAmount) external returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount) ); return abi.decode(data, (uint256)); } /** * @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 ) public returns (uint256) { bytes memory data = delegateToImplementation( abi.encodeWithSignature( "_setInterestRateModel(address)", newInterestRateModel ) ); return abi.decode(data, (uint256)); } /** * @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 */ function() 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) } } } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 100 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"address","name":"kycRegistry_","type":"address"},{"internalType":"uint256","name":"kycRequirementGroup_","type":"uint256"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"payable":false,"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":"uint256","name":"error","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"info","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"detail","type":"uint256"}],"name":"Failure","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRegistry","type":"address"},{"indexed":false,"internalType":"address","name":"newRegistry","type":"address"}],"name":"KYCRegistrySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRequirementGroup","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRequirementGroup","type":"uint256"}],"name":"KYCRequirementGroupSet","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"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"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"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isCToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kycRegistry","outputs":[{"internalType":"contract IKYCRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kycRequirementGroup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sanctionsList","outputs":[{"internalType":"contract ISanctionsList","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620025bf380380620025bf83398181016040526101808110156200003857600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007457600080fd5b9083019060208201858111156200008a57600080fd5b8251640100000000811182820188101715620000a557600080fd5b82525081516020918201929091019080838360005b83811015620000d4578181015183820152602001620000ba565b50505050905090810190601f168015620001025780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012657600080fd5b9083019060208201858111156200013c57600080fd5b82516401000000008111828201881017156200015757600080fd5b82525081516020918201929091019080838360005b83811015620001865781810151838201526020016200016c565b50505050905090810190601f168015620001b45780820380516001836020036101000a031916815260200191505b5060408181526020830151908301516060840151608085015160a086015160c09096018051949893979296919591949193929184640100000000821115620001fb57600080fd5b9083019060208201858111156200021157600080fd5b82516401000000008111828201881017156200022c57600080fd5b82525081516020918201929091019080838360005b838110156200025b57818101518382015260200162000241565b50505050905090810190601f168015620002895780820380516001836020036101000a031916815260200191505b5060405250505033600360016101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000458848d8d8d8d8d8d8d8b8b604051602401808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b0316815260200187815260200180602001806020018660ff1660ff168152602001856001600160a01b03166001600160a01b03168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156200038357818101518382015260200162000369565b50505050905090810190601f168015620003b15780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b83811015620003e6578181015183820152602001620003cc565b50505050905090810190601f168015620004145780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0390811663503f550360e11b17909152909c50620004a9169a5050505050505050505050565b5062000470846000836001600160e01b036200057016565b5050600380546001600160a01b0390941661010002610100600160a81b0319909416939093179092555062000751975050505050505050565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310620004eb5780518252601f199092019160209182019101620004ca565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146200054d576040519150601f19603f3d011682016040523d82523d6000602084013e62000552565b606091505b5091509150600082141562000568573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620005c05760405162461bcd60e51b8152600401808060200182810382526039815260200180620025866039913960400191505060405180910390fd5b811562000602576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b179091526200060091906200072716565b505b601480546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693620006d8938693909283926064909201919085019080838360005b838110156200066f57818101518382015260200162000655565b50505050905090810190601f1680156200069d5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b179091529093506200072716915050565b50601454604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b6014546060906200074b906001600160a01b0316836001600160e01b03620004a916565b92915050565b611e2580620007616000396000f3fe6080604052600436106102ca5760003560e01c806370a082311161017b578063bd6d894d116100d7578063f2b3abbd11610085578063f2b3abbd14610c83578063f3fdb15a14610cb6578063f5e3c46214610ccb578063f851a44014610d0e578063f8f9da2814610d23578063fca7820b14610d38578063fe9c44ae14610d62576102ca565b8063bd6d894d14610b5c578063c37f68e214610b71578063c5ebeaec14610bca578063db006a7514610bf4578063dd62ed3e14610c1e578063e9c714f214610c59578063ec571c6a14610c6e576102ca565b8063a0712d6811610134578063a0712d6814610a44578063a6afed9514610a6e578063a9059cbb14610a83578063aa5af0fd14610abc578063ae9d70b014610ad1578063b2a02ff114610ae6578063b71d1a0c14610b29576102ca565b806370a082311461097557806373acee98146109a8578063852a12e3146109bd5780638f840ddd146109e757806395d89b41146109fc57806395dd919314610a11576102ca565b80633b1d21a21161022a578063510b751b116101e3578063510b751b14610818578063555bcc401461082d5780635c60da1b146108f75780635fe3b5671461090c578063601a0bf1146109215780636c540baf1461094b5780636f307dc314610960576102ca565b80633b1d21a2146106cb5780633e941010146106e05780634487152f1461070a5780634576b5db146107bb57806347bd3718146107ee5780634b155b9714610803576102ca565b806318160ddd1161028757806318160ddd14610596578063182df0f5146105ab57806323b872dd146105c05780632608f81814610603578063267822471461063c578063313ce5671461066d5780633af9e66914610698576102ca565b806306fdde031461038a5780630933c1ed14610414578063095ea7b3146104c55780630e75270214610512578063173b99041461054e57806317bfdfbc14610563575b34156103075760405162461bcd60e51b8152600401808060200182810382526037815260200180611d816037913960400191505060405180910390fd5b6014546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b505090506040513d6000823e818015610386573d82f35b3d82fd5b34801561039657600080fd5b5061039f610d77565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d95781810151838201526020016103c1565b50505050905090810190601f1680156104065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042057600080fd5b5061039f6004803603602081101561043757600080fd5b810190602081018135600160201b81111561045157600080fd5b82018360208201111561046357600080fd5b803590602001918460018302840111600160201b8311171561048457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e04945050505050565b3480156104d157600080fd5b506104fe600480360360408110156104e857600080fd5b506001600160a01b038135169060200135610e23565b604080519115158252519081900360200190f35b34801561051e57600080fd5b5061053c6004803603602081101561053557600080fd5b5035610e9a565b60408051918252519081900360200190f35b34801561055a57600080fd5b5061053c610f01565b34801561056f57600080fd5b5061053c6004803603602081101561058657600080fd5b50356001600160a01b0316610f07565b3480156105a257600080fd5b5061053c610f59565b3480156105b757600080fd5b5061053c610f5f565b3480156105cc57600080fd5b506104fe600480360360608110156105e357600080fd5b506001600160a01b03813581169160208101359091169060400135610fb6565b34801561060f57600080fd5b5061053c6004803603604081101561062657600080fd5b506001600160a01b038135169060200135611036565b34801561064857600080fd5b5061065161108c565b604080516001600160a01b039092168252519081900360200190f35b34801561067957600080fd5b5061068261109b565b6040805160ff9092168252519081900360200190f35b3480156106a457600080fd5b5061053c600480360360208110156106bb57600080fd5b50356001600160a01b03166110a4565b3480156106d757600080fd5b5061053c6110f6565b3480156106ec57600080fd5b5061053c6004803603602081101561070357600080fd5b503561112e565b34801561071657600080fd5b5061039f6004803603602081101561072d57600080fd5b810190602081018135600160201b81111561074757600080fd5b82018360208201111561075957600080fd5b803590602001918460018302840111600160201b8311171561077a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611175945050505050565b3480156107c757600080fd5b5061053c600480360360208110156107de57600080fd5b50356001600160a01b0316611394565b3480156107fa57600080fd5b5061053c6113e6565b34801561080f57600080fd5b506106516113ec565b34801561082457600080fd5b5061053c6113fb565b34801561083957600080fd5b506108f56004803603606081101561085057600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460018302840111600160201b831117156108b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611401945050505050565b005b34801561090357600080fd5b506106516115a4565b34801561091857600080fd5b506106516115b3565b34801561092d57600080fd5b5061053c6004803603602081101561094457600080fd5b50356115c2565b34801561095757600080fd5b5061053c611609565b34801561096c57600080fd5b5061065161160f565b34801561098157600080fd5b5061053c6004803603602081101561099857600080fd5b50356001600160a01b031661161e565b3480156109b457600080fd5b5061053c611670565b3480156109c957600080fd5b5061053c600480360360208110156109e057600080fd5b50356116a8565b3480156109f357600080fd5b5061053c6116ef565b348015610a0857600080fd5b5061039f6116f5565b348015610a1d57600080fd5b5061053c60048036036020811015610a3457600080fd5b50356001600160a01b031661174d565b348015610a5057600080fd5b5061053c60048036036020811015610a6757600080fd5b503561179f565b348015610a7a57600080fd5b5061053c6117e6565b348015610a8f57600080fd5b506104fe60048036036040811015610aa657600080fd5b506001600160a01b03813516906020013561181e565b348015610ac857600080fd5b5061053c611874565b348015610add57600080fd5b5061053c61187a565b348015610af257600080fd5b5061053c60048036036060811015610b0957600080fd5b506001600160a01b038135811691602081013590911690604001356118b2565b348015610b3557600080fd5b5061053c60048036036020811015610b4c57600080fd5b50356001600160a01b0316611910565b348015610b6857600080fd5b5061053c611962565b348015610b7d57600080fd5b50610ba460048036036020811015610b9457600080fd5b50356001600160a01b031661199a565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610bd657600080fd5b5061053c60048036036020811015610bed57600080fd5b5035611a2c565b348015610c0057600080fd5b5061053c60048036036020811015610c1757600080fd5b5035611a73565b348015610c2a57600080fd5b5061053c60048036036040811015610c4157600080fd5b506001600160a01b0381358116916020013516611aba565b348015610c6557600080fd5b5061053c611b14565b348015610c7a57600080fd5b50610651611b4c565b348015610c8f57600080fd5b5061053c60048036036020811015610ca657600080fd5b50356001600160a01b0316611b64565b348015610cc257600080fd5b50610651611bb6565b348015610cd757600080fd5b5061053c60048036036060811015610cee57600080fd5b506001600160a01b03813581169160208101359160409091013516611bc5565b348015610d1a57600080fd5b50610651611c26565b348015610d2f57600080fd5b5061053c611c3a565b348015610d4457600080fd5b5061053c60048036036020811015610d5b57600080fd5b5035611c72565b348015610d6e57600080fd5b506104fe611cb9565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b820191906000526020600020905b815481529060010190602001808311610ddf57829003601f168201915b505050505081565b601454606090610e1d906001600160a01b031683611cbe565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052600090606090610e7990610e04565b9050808060200190516020811015610e9057600080fd5b5051949350505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663073a938160e11b179052600090606090610ee190610e04565b9050808060200190516020811015610ef857600080fd5b50519392505050565b60085481565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166305eff7ef60e21b179052600090606090610ee190610e04565b600d5481565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b179052600090606090610f9790611175565b9050808060200190516020811015610fae57600080fd5b505191505090565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905260009060609061101490610e04565b905080806020019051602081101561102b57600080fd5b505195945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03166304c11f0360e31b179052600090606090610e7990610e04565b6004546001600160a01b031681565b60035460ff1681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316633af9e66960e01b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090606090610f9790611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b03166303e9410160e41b179052600090606090610ee190610e04565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b838110156111c65781810151838201526020016111ae565b50505050905090810190601f1680156111f35780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b6020831061124e5780518252601f19909201916020918201910161122f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146112ae576040519150601f19603f3d011682016040523d82523d6000602084013e6112b3565b606091505b509150915060008214156112c8573d60208201fd5b8080602001905160208110156112dd57600080fd5b8101908080516040519392919084600160201b8211156112fc57600080fd5b90830190602082018581111561131157600080fd5b8251600160201b81118282018810171561132a57600080fd5b82525081516020918201929091019080838360005b8381101561135757818101518382015260200161133f565b50505050905090810190601f1680156113845780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316634576b5db60e01b179052600090606090610ee190610e04565b600b5481565b6011546001600160a01b031681565b60125481565b60035461010090046001600160a01b0316331461144f5760405162461bcd60e51b8152600401808060200182810382526039815260200180611db86039913960400191505060405180910390fd5b8115611489576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261148790610e04565b505b601480546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693611555938693909283926064909201919085019080838360005b838110156114f35781810151838201526020016114db565b50505050905090810190601f1680156115205780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b1790529250610e04915050565b50601454604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b6014546001600160a01b031681565b6005546001600160a01b031681565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663601a0bf160e01b179052600090606090610ee190610e04565b60095481565b6013546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166370a0823160e01b179052600090606090610ee190611175565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b179052600090606090610f9790610e04565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663852a12e360e01b179052600090606090610ee190610e04565b600c5481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166395dd919360e01b179052600090606090610ee190611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663140e25ad60e31b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b179052600090606090610f9790610e04565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052600090606090610e7990610e04565b600a5481565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b179052600090606090610f9790611175565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663b2a02ff160e01b17905260009060609061101490610e04565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316632dc7468360e21b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b179052600090606090610f9790610e04565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166361bfb47160e11b1790526000908190819081906060906119f290611175565b9050808060200190516080811015611a0957600080fd5b508051602082015160408301516060909301519199909850919650945092505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663317afabb60e21b179052600090606090610ee190610e04565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663db006a7560e01b179052600090606090610ee190610e04565b604080516001600160a01b03808516602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b0316636eb1769f60e11b179052600090606090610e7990611175565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b179052600090606090610f9790610e04565b7340c57923924b5c5c5455c48d93317139addac8fb81565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663f2b3abbd60e01b179052600090606090610ee190610e04565b6006546001600160a01b031681565b604080516001600160a01b0380861660248301526044820185905283166064808301919091528251808303909101815260849091019091526020810180516001600160e01b0316637af1e23160e11b17905260009060609061101490610e04565b60035461010090046001600160a01b031681565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b179052600090606090610f9790611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663fca7820b60e01b179052600090606090610ee190610e04565b600181565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310611cfe5780518252601f199092019160209182019101611cdf565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611d5e576040519150601f19603f3d011682016040523d82523d6000602084013e611d63565b606091505b50915091506000821415611d78573d60208201fd5b94935050505056fe43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636b43457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696ea265627a7a723158200a17f5e710da965a447925e4b643c0c63cc13c9d195998b5e30ffb927be64da064736f6c6343000511003243457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000edafa2563ab47a41c00c17abd46b48be1b9515e9000000000000000000000000cc164d495f3e6e7519c22c64c793bcfdf5d993f6000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000c23e0c653139a31a375d8b01604d62f21da283d300000000000000000000000003cc95468dfc83ff3de851aa8611e795b5d08b91000000000000000000000000730e077730bc25c1c92e2c078e3bab2834775217000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000008466c757820444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000466444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ca5760003560e01c806370a082311161017b578063bd6d894d116100d7578063f2b3abbd11610085578063f2b3abbd14610c83578063f3fdb15a14610cb6578063f5e3c46214610ccb578063f851a44014610d0e578063f8f9da2814610d23578063fca7820b14610d38578063fe9c44ae14610d62576102ca565b8063bd6d894d14610b5c578063c37f68e214610b71578063c5ebeaec14610bca578063db006a7514610bf4578063dd62ed3e14610c1e578063e9c714f214610c59578063ec571c6a14610c6e576102ca565b8063a0712d6811610134578063a0712d6814610a44578063a6afed9514610a6e578063a9059cbb14610a83578063aa5af0fd14610abc578063ae9d70b014610ad1578063b2a02ff114610ae6578063b71d1a0c14610b29576102ca565b806370a082311461097557806373acee98146109a8578063852a12e3146109bd5780638f840ddd146109e757806395d89b41146109fc57806395dd919314610a11576102ca565b80633b1d21a21161022a578063510b751b116101e3578063510b751b14610818578063555bcc401461082d5780635c60da1b146108f75780635fe3b5671461090c578063601a0bf1146109215780636c540baf1461094b5780636f307dc314610960576102ca565b80633b1d21a2146106cb5780633e941010146106e05780634487152f1461070a5780634576b5db146107bb57806347bd3718146107ee5780634b155b9714610803576102ca565b806318160ddd1161028757806318160ddd14610596578063182df0f5146105ab57806323b872dd146105c05780632608f81814610603578063267822471461063c578063313ce5671461066d5780633af9e66914610698576102ca565b806306fdde031461038a5780630933c1ed14610414578063095ea7b3146104c55780630e75270214610512578063173b99041461054e57806317bfdfbc14610563575b34156103075760405162461bcd60e51b8152600401808060200182810382526037815260200180611d816037913960400191505060405180910390fd5b6014546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b505090506040513d6000823e818015610386573d82f35b3d82fd5b34801561039657600080fd5b5061039f610d77565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d95781810151838201526020016103c1565b50505050905090810190601f1680156104065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042057600080fd5b5061039f6004803603602081101561043757600080fd5b810190602081018135600160201b81111561045157600080fd5b82018360208201111561046357600080fd5b803590602001918460018302840111600160201b8311171561048457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e04945050505050565b3480156104d157600080fd5b506104fe600480360360408110156104e857600080fd5b506001600160a01b038135169060200135610e23565b604080519115158252519081900360200190f35b34801561051e57600080fd5b5061053c6004803603602081101561053557600080fd5b5035610e9a565b60408051918252519081900360200190f35b34801561055a57600080fd5b5061053c610f01565b34801561056f57600080fd5b5061053c6004803603602081101561058657600080fd5b50356001600160a01b0316610f07565b3480156105a257600080fd5b5061053c610f59565b3480156105b757600080fd5b5061053c610f5f565b3480156105cc57600080fd5b506104fe600480360360608110156105e357600080fd5b506001600160a01b03813581169160208101359091169060400135610fb6565b34801561060f57600080fd5b5061053c6004803603604081101561062657600080fd5b506001600160a01b038135169060200135611036565b34801561064857600080fd5b5061065161108c565b604080516001600160a01b039092168252519081900360200190f35b34801561067957600080fd5b5061068261109b565b6040805160ff9092168252519081900360200190f35b3480156106a457600080fd5b5061053c600480360360208110156106bb57600080fd5b50356001600160a01b03166110a4565b3480156106d757600080fd5b5061053c6110f6565b3480156106ec57600080fd5b5061053c6004803603602081101561070357600080fd5b503561112e565b34801561071657600080fd5b5061039f6004803603602081101561072d57600080fd5b810190602081018135600160201b81111561074757600080fd5b82018360208201111561075957600080fd5b803590602001918460018302840111600160201b8311171561077a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611175945050505050565b3480156107c757600080fd5b5061053c600480360360208110156107de57600080fd5b50356001600160a01b0316611394565b3480156107fa57600080fd5b5061053c6113e6565b34801561080f57600080fd5b506106516113ec565b34801561082457600080fd5b5061053c6113fb565b34801561083957600080fd5b506108f56004803603606081101561085057600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460018302840111600160201b831117156108b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611401945050505050565b005b34801561090357600080fd5b506106516115a4565b34801561091857600080fd5b506106516115b3565b34801561092d57600080fd5b5061053c6004803603602081101561094457600080fd5b50356115c2565b34801561095757600080fd5b5061053c611609565b34801561096c57600080fd5b5061065161160f565b34801561098157600080fd5b5061053c6004803603602081101561099857600080fd5b50356001600160a01b031661161e565b3480156109b457600080fd5b5061053c611670565b3480156109c957600080fd5b5061053c600480360360208110156109e057600080fd5b50356116a8565b3480156109f357600080fd5b5061053c6116ef565b348015610a0857600080fd5b5061039f6116f5565b348015610a1d57600080fd5b5061053c60048036036020811015610a3457600080fd5b50356001600160a01b031661174d565b348015610a5057600080fd5b5061053c60048036036020811015610a6757600080fd5b503561179f565b348015610a7a57600080fd5b5061053c6117e6565b348015610a8f57600080fd5b506104fe60048036036040811015610aa657600080fd5b506001600160a01b03813516906020013561181e565b348015610ac857600080fd5b5061053c611874565b348015610add57600080fd5b5061053c61187a565b348015610af257600080fd5b5061053c60048036036060811015610b0957600080fd5b506001600160a01b038135811691602081013590911690604001356118b2565b348015610b3557600080fd5b5061053c60048036036020811015610b4c57600080fd5b50356001600160a01b0316611910565b348015610b6857600080fd5b5061053c611962565b348015610b7d57600080fd5b50610ba460048036036020811015610b9457600080fd5b50356001600160a01b031661199a565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610bd657600080fd5b5061053c60048036036020811015610bed57600080fd5b5035611a2c565b348015610c0057600080fd5b5061053c60048036036020811015610c1757600080fd5b5035611a73565b348015610c2a57600080fd5b5061053c60048036036040811015610c4157600080fd5b506001600160a01b0381358116916020013516611aba565b348015610c6557600080fd5b5061053c611b14565b348015610c7a57600080fd5b50610651611b4c565b348015610c8f57600080fd5b5061053c60048036036020811015610ca657600080fd5b50356001600160a01b0316611b64565b348015610cc257600080fd5b50610651611bb6565b348015610cd757600080fd5b5061053c60048036036060811015610cee57600080fd5b506001600160a01b03813581169160208101359160409091013516611bc5565b348015610d1a57600080fd5b50610651611c26565b348015610d2f57600080fd5b5061053c611c3a565b348015610d4457600080fd5b5061053c60048036036020811015610d5b57600080fd5b5035611c72565b348015610d6e57600080fd5b506104fe611cb9565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b820191906000526020600020905b815481529060010190602001808311610ddf57829003601f168201915b505050505081565b601454606090610e1d906001600160a01b031683611cbe565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052600090606090610e7990610e04565b9050808060200190516020811015610e9057600080fd5b5051949350505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663073a938160e11b179052600090606090610ee190610e04565b9050808060200190516020811015610ef857600080fd5b50519392505050565b60085481565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166305eff7ef60e21b179052600090606090610ee190610e04565b600d5481565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b179052600090606090610f9790611175565b9050808060200190516020811015610fae57600080fd5b505191505090565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905260009060609061101490610e04565b905080806020019051602081101561102b57600080fd5b505195945050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03166304c11f0360e31b179052600090606090610e7990610e04565b6004546001600160a01b031681565b60035460ff1681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316633af9e66960e01b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b179052600090606090610f9790611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b03166303e9410160e41b179052600090606090610ee190610e04565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b838110156111c65781810151838201526020016111ae565b50505050905090810190601f1680156111f35780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b6020831061124e5780518252601f19909201916020918201910161122f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146112ae576040519150601f19603f3d011682016040523d82523d6000602084013e6112b3565b606091505b509150915060008214156112c8573d60208201fd5b8080602001905160208110156112dd57600080fd5b8101908080516040519392919084600160201b8211156112fc57600080fd5b90830190602082018581111561131157600080fd5b8251600160201b81118282018810171561132a57600080fd5b82525081516020918201929091019080838360005b8381101561135757818101518382015260200161133f565b50505050905090810190601f1680156113845780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316634576b5db60e01b179052600090606090610ee190610e04565b600b5481565b6011546001600160a01b031681565b60125481565b60035461010090046001600160a01b0316331461144f5760405162461bcd60e51b8152600401808060200182810382526039815260200180611db86039913960400191505060405180910390fd5b8115611489576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261148790610e04565b505b601480546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693611555938693909283926064909201919085019080838360005b838110156114f35781810151838201526020016114db565b50505050905090810190601f1680156115205780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b1790529250610e04915050565b50601454604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b6014546001600160a01b031681565b6005546001600160a01b031681565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663601a0bf160e01b179052600090606090610ee190610e04565b60095481565b6013546001600160a01b031681565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166370a0823160e01b179052600090606090610ee190611175565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b179052600090606090610f9790610e04565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663852a12e360e01b179052600090606090610ee190610e04565b600c5481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610dfc5780601f10610dd157610100808354040283529160200191610dfc565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166395dd919360e01b179052600090606090610ee190611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663140e25ad60e31b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b179052600090606090610f9790610e04565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052600090606090610e7990610e04565b600a5481565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b179052600090606090610f9790611175565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b031663b2a02ff160e01b17905260009060609061101490610e04565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b0316632dc7468360e21b179052600090606090610ee190610e04565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b179052600090606090610f9790610e04565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03166361bfb47160e11b1790526000908190819081906060906119f290611175565b9050808060200190516080811015611a0957600080fd5b508051602082015160408301516060909301519199909850919650945092505050565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663317afabb60e21b179052600090606090610ee190610e04565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663db006a7560e01b179052600090606090610ee190610e04565b604080516001600160a01b03808516602483015283166044808301919091528251808303909101815260649091019091526020810180516001600160e01b0316636eb1769f60e11b179052600090606090610e7990611175565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b179052600090606090610f9790610e04565b7340c57923924b5c5c5455c48d93317139addac8fb81565b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b031663f2b3abbd60e01b179052600090606090610ee190610e04565b6006546001600160a01b031681565b604080516001600160a01b0380861660248301526044820185905283166064808301919091528251808303909101815260849091019091526020810180516001600160e01b0316637af1e23160e11b17905260009060609061101490610e04565b60035461010090046001600160a01b031681565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b179052600090606090610f9790611175565b6040805160248082018490528251808303909101815260449091019091526020810180516001600160e01b031663fca7820b60e01b179052600090606090610ee190610e04565b600181565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310611cfe5780518252601f199092019160209182019101611cdf565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114611d5e576040519150601f19603f3d011682016040523d82523d6000602084013e611d63565b606091505b50915091506000821415611d78573d60208201fd5b94935050505056fe43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636b43457263323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696ea265627a7a723158200a17f5e710da965a447925e4b643c0c63cc13c9d195998b5e30ffb927be64da064736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000edafa2563ab47a41c00c17abd46b48be1b9515e9000000000000000000000000cc164d495f3e6e7519c22c64c793bcfdf5d993f6000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000c23e0c653139a31a375d8b01604d62f21da283d300000000000000000000000003cc95468dfc83ff3de851aa8611e795b5d08b91000000000000000000000000730e077730bc25c1c92e2c078e3bab2834775217000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000008466c757820444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000466444149000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : underlying_ (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : comptroller_ (address): 0xEdafA2563aB47a41C00C17abd46b48be1B9515E9
Arg [2] : interestRateModel_ (address): 0xcC164d495f3e6e7519c22c64C793BcFdf5D993F6
Arg [3] : initialExchangeRateMantissa_ (uint256): 200000000000000000000000000
Arg [4] : name_ (string): Flux DAI
Arg [5] : symbol_ (string): fDAI
Arg [6] : decimals_ (uint8): 8
Arg [7] : admin_ (address): 0xc23E0C653139A31A375d8B01604D62f21da283D3
Arg [8] : implementation_ (address): 0x03cC95468dFc83ff3De851AA8611E795B5d08b91
Arg [9] : kycRegistry_ (address): 0x730e077730BC25c1c92e2c078e3BaB2834775217
Arg [10] : kycRequirementGroup_ (uint256): 1
Arg [11] : becomeImplementationData (bytes): 0x
-----Encoded View---------------
17 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000edafa2563ab47a41c00c17abd46b48be1b9515e9
Arg [2] : 000000000000000000000000cc164d495f3e6e7519c22c64c793bcfdf5d993f6
Arg [3] : 000000000000000000000000000000000000000000a56fa5b99019a5c8000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 000000000000000000000000c23e0c653139a31a375d8b01604d62f21da283d3
Arg [8] : 00000000000000000000000003cc95468dfc83ff3de851aa8611e795b5d08b91
Arg [9] : 000000000000000000000000730e077730bc25c1c92e2c078e3bab2834775217
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [13] : 466c757820444149000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [15] : 6644414900000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999818 | 10 | $10 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.