More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 21226353 | 588 days ago | IN | 0 BTT | 68.5995 | ||||
Redeem | 17285388 | 683 days ago | IN | 0 BTT | 68.6055 | ||||
Redeem | 15623939 | 722 days ago | IN | 0 BTT | 41.1597 | ||||
Mint | 15458505 | 726 days ago | IN | 0 BTT | 49.0191 | ||||
Mint | 15025493 | 737 days ago | IN | 0 BTT | 49.0263 | ||||
Redeem | 14546449 | 748 days ago | IN | 0 BTT | 41.1561 | ||||
Mint | 14440501 | 751 days ago | IN | 0 BTT | 49.0191 | ||||
Mint | 14334386 | 753 days ago | IN | 0 BTT | 49.0155 | ||||
Mint | 14331832 | 753 days ago | IN | 0 BTT | 49.0191 | ||||
Mint | 14331545 | 753 days ago | IN | 0 BTT | 57.9591 | ||||
Redeem | 14331529 | 753 days ago | IN | 0 BTT | 27.0261 | ||||
Mint | 14331510 | 753 days ago | IN | 0 BTT | 63.9384 | ||||
_set Reserve Fac... | 14283157 | 754 days ago | IN | 0 BTT | 21.6492 | ||||
_set Reserve Fac... | 14283135 | 754 days ago | IN | 0 BTT | 21.6492 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CErc20Delegator
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at bttcscan.com on 2022-11-16 */ // Sources flattened with hardhat v2.10.1 https://hardhat.org // File contracts/ComptrollerInterface.sol // SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.10; abstract contract ComptrollerInterface { /// @notice Indicator that this is a Comptroller contract (for inspection) bool public constant isComptroller = true; /*** Assets You Are In ***/ function enterMarkets(address[] calldata cTokens) virtual external returns (uint[] memory); function exitMarket(address cToken) virtual external returns (uint); /*** Policy Hooks ***/ function mintAllowed(address cToken, address minter, uint mintAmount) virtual external returns (uint); function mintVerify(address cToken, address minter, uint mintAmount, uint mintTokens) virtual external; function redeemAllowed(address cToken, address redeemer, uint redeemTokens) virtual external returns (uint); function redeemVerify(address cToken, address redeemer, uint redeemAmount, uint redeemTokens) virtual external; function borrowAllowed(address cToken, address borrower, uint borrowAmount) virtual external returns (uint); function borrowVerify(address cToken, address borrower, uint borrowAmount) virtual external; function repayBorrowAllowed( address cToken, address payer, address borrower, uint repayAmount) virtual external returns (uint); function repayBorrowVerify( address cToken, address payer, address borrower, uint repayAmount, uint borrowerIndex) virtual external; function liquidateBorrowAllowed( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint repayAmount) virtual external returns (uint); function liquidateBorrowVerify( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint repayAmount, uint seizeTokens) virtual external; function seizeAllowed( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint seizeTokens) virtual external returns (uint); function seizeVerify( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint seizeTokens) virtual external; function transferAllowed(address cToken, address src, address dst, uint transferTokens) virtual external returns (uint); function transferVerify(address cToken, address src, address dst, uint transferTokens) virtual external; /*** Liquidity/Liquidation Calculations ***/ function liquidateCalculateSeizeTokens( address cTokenBorrowed, address cTokenCollateral, uint repayAmount) virtual external view returns (uint, uint); } abstract contract InterestRateModel { /// @notice Indicator that this is an InterestRateModel contract (for inspection) bool public constant isInterestRateModel = true; /** * @notice Calculates the current borrow interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @return The borrow rate per block (as a percentage, and scaled by 1e18) */ function getBorrowRate(uint cash, uint borrows, uint reserves) virtual external view returns (uint); /** * @notice Calculates the current supply interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @param reserveFactorMantissa The current reserve factor the market has * @return The supply rate per block (as a percentage, and scaled by 1e18) */ function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) virtual external view returns (uint); } interface EIP20NonStandardInterface { /** * @notice Get the total number of tokens in circulation * @return The supply of tokens */ function totalSupply() external view returns (uint256); /** * @notice Gets the balance of the specified address * @param owner The address from which the balance will be retrieved * @return balance The balance */ function balanceOf(address owner) external view returns (uint256 balance); /// /// !!!!!!!!!!!!!! /// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification /// !!!!!!!!!!!!!! /// /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer */ function transfer(address dst, uint256 amount) external; /// /// !!!!!!!!!!!!!! /// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification /// !!!!!!!!!!!!!! /// /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer */ function transferFrom(address src, address dst, uint256 amount) external; /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved * @return success Whether or not the approval succeeded */ function approve(address spender, uint256 amount) external returns (bool success); /** * @notice Get the current allowance from `owner` for `spender` * @param owner The address of the account which owns the tokens to be spent * @param spender The address of the account which may transfer tokens * @return remaining The number of tokens allowed to be spent */ function allowance(address owner, address spender) external view returns (uint256 remaining); event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); } contract ComptrollerErrorReporter { enum Error { NO_ERROR, UNAUTHORIZED, COMPTROLLER_MISMATCH, INSUFFICIENT_SHORTFALL, INSUFFICIENT_LIQUIDITY, INVALID_CLOSE_FACTOR, INVALID_COLLATERAL_FACTOR, INVALID_LIQUIDATION_INCENTIVE, MARKET_NOT_ENTERED, // no longer possible MARKET_NOT_LISTED, MARKET_ALREADY_LISTED, MATH_ERROR, NONZERO_BORROW_BALANCE, PRICE_ERROR, REJECTION, SNAPSHOT_ERROR, TOO_MANY_ASSETS, TOO_MUCH_REPAY } enum FailureInfo { ACCEPT_ADMIN_PENDING_ADMIN_CHECK, ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK, EXIT_MARKET_BALANCE_OWED, EXIT_MARKET_REJECTION, SET_CLOSE_FACTOR_OWNER_CHECK, SET_CLOSE_FACTOR_VALIDATION, SET_COLLATERAL_FACTOR_OWNER_CHECK, SET_COLLATERAL_FACTOR_NO_EXISTS, SET_COLLATERAL_FACTOR_VALIDATION, SET_COLLATERAL_FACTOR_WITHOUT_PRICE, SET_IMPLEMENTATION_OWNER_CHECK, SET_LIQUIDATION_INCENTIVE_OWNER_CHECK, SET_LIQUIDATION_INCENTIVE_VALIDATION, SET_MAX_ASSETS_OWNER_CHECK, SET_PENDING_ADMIN_OWNER_CHECK, SET_PENDING_IMPLEMENTATION_OWNER_CHECK, SET_PRICE_ORACLE_OWNER_CHECK, SUPPORT_MARKET_EXISTS, SUPPORT_MARKET_OWNER_CHECK, SET_PAUSE_GUARDIAN_OWNER_CHECK } /** * @dev `error` corresponds to enum Error; `info` corresponds to enum FailureInfo, and `detail` is an arbitrary * contract-specific code that enables us to report opaque error codes from upgradeable contracts. **/ event Failure(uint error, uint info, uint detail); /** * @dev use this when reporting a known error from the money market or a non-upgradeable collaborator */ function fail(Error err, FailureInfo info) internal returns (uint) { emit Failure(uint(err), uint(info), 0); return uint(err); } /** * @dev use this when reporting an opaque error from an upgradeable collaborator contract */ function failOpaque(Error err, FailureInfo info, uint opaqueError) internal returns (uint) { emit Failure(uint(err), uint(info), opaqueError); return uint(err); } } contract TokenErrorReporter { uint public constant NO_ERROR = 0; // support legacy return codes error TransferComptrollerRejection(uint256 errorCode); error TransferNotAllowed(); error TransferNotEnough(); error TransferTooMuch(); error MintComptrollerRejection(uint256 errorCode); error MintFreshnessCheck(); error RedeemComptrollerRejection(uint256 errorCode); error RedeemFreshnessCheck(); error RedeemTransferOutNotPossible(); error BorrowComptrollerRejection(uint256 errorCode); error BorrowFreshnessCheck(); error BorrowCashNotAvailable(); error RepayBorrowComptrollerRejection(uint256 errorCode); error RepayBorrowFreshnessCheck(); error LiquidateComptrollerRejection(uint256 errorCode); error LiquidateFreshnessCheck(); error LiquidateCollateralFreshnessCheck(); error LiquidateAccrueBorrowInterestFailed(uint256 errorCode); error LiquidateAccrueCollateralInterestFailed(uint256 errorCode); error LiquidateLiquidatorIsBorrower(); error LiquidateCloseAmountIsZero(); error LiquidateCloseAmountIsUintMax(); error LiquidateRepayBorrowFreshFailed(uint256 errorCode); error LiquidateSeizeComptrollerRejection(uint256 errorCode); error LiquidateSeizeLiquidatorIsBorrower(); error AcceptAdminPendingAdminCheck(); error SetComptrollerOwnerCheck(); error SetPendingAdminOwnerCheck(); error SetReserveFactorAdminCheck(); error SetReserveFactorFreshCheck(); error SetReserveFactorBoundsCheck(); error AddReservesFactorFreshCheck(uint256 actualAddAmount); error ReduceReservesAdminCheck(); error ReduceReservesFreshCheck(); error ReduceReservesCashNotAvailable(); error ReduceReservesCashValidation(); error SetInterestRateModelOwnerCheck(); error SetInterestRateModelFreshCheck(); } 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; // Maximum borrow rate that can ever be applied (.0005% / block) uint internal constant borrowRateMaxMantissa = 0.0005e16; // Maximum fraction of interest that can be set aside for reserves uint internal constant reserveFactorMaxMantissa = 1e18; /** * @notice Administrator for this contract */ address payable public admin; /** * @notice Pending administrator for this contract */ address payable public pendingAdmin; /** * @notice Contract which oversees inter-cToken operations */ ComptrollerInterface public comptroller; /** * @notice Model which tells what the current interest rate should be */ InterestRateModel public interestRateModel; // Initial exchange rate used when minting the first CTokens (used when totalSupply = 0) uint internal initialExchangeRateMantissa; /** * @notice Fraction of interest currently set aside for reserves */ uint public reserveFactorMantissa; /** * @notice Block number that interest was last accrued at */ uint public accrualBlockNumber; /** * @notice Accumulator of the total earned interest rate since the opening of the market */ uint public borrowIndex; /** * @notice Total amount of outstanding borrows of the underlying in this market */ uint public totalBorrows; /** * @notice Total amount of reserves of the underlying held in this market */ uint public totalReserves; /** * @notice Total number of tokens in circulation */ uint public totalSupply; // Official record of token balances for each account mapping (address => uint) internal accountTokens; // Approved token transfer amounts on behalf of others mapping (address => mapping (address => uint)) internal transferAllowances; /** * @notice Container for borrow balance information * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action * @member interestIndex Global borrowIndex as of the most recent balance-changing action */ struct BorrowSnapshot { uint principal; uint interestIndex; } // Mapping of account addresses to outstanding borrow balances mapping(address => BorrowSnapshot) internal accountBorrows; /** * @notice Share of seized collateral that is added to reserves */ uint public constant protocolSeizeShareMantissa = 2.8e16; //2.8% } abstract contract CTokenInterface is CTokenStorage { /** * @notice Indicator that this is a CToken contract (for inspection) */ bool public constant isCToken = true; /*** Market Events ***/ /** * @notice Event emitted when interest is accrued */ event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows); /** * @notice Event emitted when tokens are minted */ event Mint(address minter, uint mintAmount, uint mintTokens); /** * @notice Event emitted when tokens are redeemed */ event Redeem(address redeemer, uint redeemAmount, uint redeemTokens); /** * @notice Event emitted when underlying is borrowed */ event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows); /** * @notice Event emitted when a borrow is repaid */ event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows); /** * @notice Event emitted when a borrow is liquidated */ event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address cTokenCollateral, uint seizeTokens); /*** Admin Events ***/ /** * @notice Event emitted when pendingAdmin is changed */ event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); /** * @notice Event emitted when pendingAdmin is accepted, which means admin is updated */ event NewAdmin(address oldAdmin, address newAdmin); /** * @notice Event emitted when comptroller is changed */ event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller); /** * @notice Event emitted when interestRateModel is changed */ event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel); /** * @notice Event emitted when the reserve factor is changed */ event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa); /** * @notice Event emitted when the reserves are added */ event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves); /** * @notice Event emitted when the reserves are reduced */ event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves); /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /*** User Interface ***/ function transfer(address dst, uint amount) virtual external returns (bool); function transferFrom(address src, address dst, uint amount) virtual external returns (bool); function approve(address spender, uint amount) virtual external returns (bool); function allowance(address owner, address spender) virtual external view returns (uint); function balanceOf(address owner) virtual external view returns (uint); function balanceOfUnderlying(address owner) virtual external returns (uint); function getAccountSnapshot(address account) virtual external view returns (uint, uint, uint, uint); function borrowRatePerBlock() virtual external view returns (uint); function supplyRatePerBlock() virtual external view returns (uint); function totalBorrowsCurrent() virtual external returns (uint); function borrowBalanceCurrent(address account) virtual external returns (uint); function borrowBalanceStored(address account) virtual external view returns (uint); function exchangeRateCurrent() virtual external returns (uint); function exchangeRateStored() virtual external view returns (uint); function getCash() virtual external view returns (uint); function accrueInterest() virtual external returns (uint); function seize(address liquidator, address borrower, uint seizeTokens) virtual external returns (uint); /*** Admin Functions ***/ function _setPendingAdmin(address payable newPendingAdmin) virtual external returns (uint); function _acceptAdmin() virtual external returns (uint); function _setComptroller(ComptrollerInterface newComptroller) virtual external returns (uint); function _setReserveFactor(uint newReserveFactorMantissa) virtual external returns (uint); function _reduceReserves(uint reduceAmount) virtual external returns (uint); function _setInterestRateModel(InterestRateModel newInterestRateModel) virtual external returns (uint); } contract CErc20Storage { /** * @notice Underlying asset for this CToken */ address public underlying; } abstract contract CErc20Interface is CErc20Storage { /*** User Interface ***/ function mint(uint mintAmount) virtual external returns (uint); function redeem(uint redeemTokens) virtual external returns (uint); function redeemUnderlying(uint redeemAmount) virtual external returns (uint); function borrow(uint borrowAmount) virtual external returns (uint); function repayBorrow(uint repayAmount) virtual external returns (uint); function repayBorrowBehalf(address borrower, uint repayAmount) virtual external returns (uint); function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) virtual external returns (uint); function sweepToken(EIP20NonStandardInterface token) virtual external; /*** Admin Functions ***/ function _addReserves(uint addAmount) virtual external returns (uint); } contract CDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } abstract contract CDelegatorInterface is CDelegationStorage { /** * @notice Emitted when implementation is changed */ event NewImplementation(address oldImplementation, address newImplementation); /** * @notice Called by the admin to update the implementation of the delegator * @param implementation_ The address of the new implementation for delegation * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation */ function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) virtual external; } abstract contract CDelegateInterface is CDelegationStorage { /** * @notice Called by the delegator on a delegate to initialize it for duty * @dev Should revert if any issues arise which make it unfit for delegation * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) virtual external; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() virtual external; } contract CErc20Delegator is CTokenInterface, CErc20Interface, CDelegatorInterface { /** * @notice Construct a new money market * @param underlying_ The address of the underlying asset * @param comptroller_ The address of the Comptroller * @param interestRateModel_ The address of the interest rate model * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18 * @param name_ ERC-20 name of this token * @param symbol_ ERC-20 symbol of this token * @param decimals_ ERC-20 decimal precision of this token * @param admin_ Address of the administrator of this token * @param implementation_ The address of the implementation the contract delegates to * @param becomeImplementationData The encoded args for becomeImplementation */ constructor(address underlying_, ComptrollerInterface comptroller_, InterestRateModel interestRateModel_, uint initialExchangeRateMantissa_, string memory name_, string memory symbol_, uint8 decimals_, address payable admin_, address implementation_, bytes memory becomeImplementationData) { // Creator of the contract is admin during initialization admin = payable(msg.sender); // First delegate gets to initialize the delegator (i.e. storage contract) delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,address,uint256,string,string,uint8)", underlying_, comptroller_, interestRateModel_, initialExchangeRateMantissa_, name_, symbol_, decimals_)); // New implementations always get set via the settor (post-initialize) _setImplementation(implementation_, false, becomeImplementationData); // Set the proper admin now that initialization is done admin = admin_; } /** * @notice Called by the admin to update the implementation of the delegator * @param implementation_ The address of the new implementation for delegation * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation */ function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData)override public { require(msg.sender == admin, "CErc20Delegator::_setImplementation: Caller must be admin"); if (allowResign) { delegateToImplementation(abi.encodeWithSignature("_resignImplementation()")); } address oldImplementation = implementation; implementation = implementation_; //delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData)); emit NewImplementation(oldImplementation, implementation); } /** * @notice Sender supplies assets into the market and receives cTokens in exchange * @dev Accrues interest whether or not the operation succeeds, unless reverted * @param mintAmount The amount of the underlying asset to supply * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function mint(uint mintAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("mint(uint256)", mintAmount)); return abi.decode(data, (uint)); } /** * @notice Sender redeems cTokens in exchange for the underlying asset * @dev Accrues interest whether or not the operation succeeds, unless reverted * @param redeemTokens The number of cTokens to redeem into underlying * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function redeem(uint redeemTokens) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeem(uint256)", redeemTokens)); return abi.decode(data, (uint)); } /** * @notice Sender redeems cTokens in exchange for a specified amount of underlying asset * @dev Accrues interest whether or not the operation succeeds, unless reverted * @param redeemAmount The amount of underlying to redeem * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function redeemUnderlying(uint redeemAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("redeemUnderlying(uint256)", redeemAmount)); return abi.decode(data, (uint)); } /** * @notice Sender borrows assets from the protocol to their own address * @param borrowAmount The amount of the underlying asset to borrow * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function borrow(uint borrowAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrow(uint256)", borrowAmount)); return abi.decode(data, (uint)); } /** * @notice Sender repays their own borrow * @param repayAmount The amount to repay, or -1 for the full outstanding amount * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrow(uint repayAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrow(uint256)", repayAmount)); return abi.decode(data, (uint)); } /** * @notice Sender repays a borrow belonging to borrower * @param borrower the account with the debt being payed off * @param repayAmount The amount to repay, or -1 for the full outstanding amount * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function repayBorrowBehalf(address borrower, uint repayAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("repayBorrowBehalf(address,uint256)", borrower, repayAmount)); return abi.decode(data, (uint)); } /** * @notice The sender liquidates the borrowers collateral. * The collateral seized is transferred to the liquidator. * @param borrower The borrower of this cToken to be liquidated * @param cTokenCollateral The market in which to seize collateral from the borrower * @param repayAmount The amount of the underlying borrowed asset to repay * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("liquidateBorrow(address,uint256,address)", borrower, repayAmount, cTokenCollateral)); return abi.decode(data, (uint)); } /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transfer(address dst, uint amount) override external returns (bool) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("transfer(address,uint256)", dst, amount)); return abi.decode(data, (bool)); } /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer * @return Whether or not the transfer succeeded */ function transferFrom(address src, address dst, uint256 amount) override external returns (bool) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("transferFrom(address,address,uint256)", src, dst, amount)); return abi.decode(data, (bool)); } /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved (-1 means infinite) * @return Whether or not the approval succeeded */ function approve(address spender, uint256 amount) override external returns (bool) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("approve(address,uint256)", spender, amount)); return abi.decode(data, (bool)); } /** * @notice Get the current allowance from `owner` for `spender` * @param owner The address of the account which owns the tokens to be spent * @param spender The address of the account which may transfer tokens * @return The number of tokens allowed to be spent (-1 means infinite) */ function allowance(address owner, address spender) override external view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("allowance(address,address)", owner, spender)); return abi.decode(data, (uint)); } /** * @notice Get the token balance of the `owner` * @param owner The address of the account to query * @return The number of tokens owned by `owner` */ function balanceOf(address owner) override external view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("balanceOf(address)", owner)); return abi.decode(data, (uint)); } /** * @notice Get the underlying balance of the `owner` * @dev This also accrues interest in a transaction * @param owner The address of the account to query * @return The amount of underlying owned by `owner` */ function balanceOfUnderlying(address owner) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("balanceOfUnderlying(address)", owner)); return abi.decode(data, (uint)); } /** * @notice Get a snapshot of the account's balances, and the cached exchange rate * @dev This is used by comptroller to more efficiently perform liquidity checks. * @param account Address of the account to snapshot * @return (possible error, token balance, borrow balance, exchange rate mantissa) */ function getAccountSnapshot(address account) override external view returns (uint, uint, uint, uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getAccountSnapshot(address)", account)); return abi.decode(data, (uint, uint, uint, uint)); } /** * @notice Returns the current per-block borrow interest rate for this cToken * @return The borrow interest rate per block, scaled by 1e18 */ function borrowRatePerBlock() override external view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowRatePerBlock()")); return abi.decode(data, (uint)); } /** * @notice Returns the current per-block supply interest rate for this cToken * @return The supply interest rate per block, scaled by 1e18 */ function supplyRatePerBlock() override external view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("supplyRatePerBlock()")); return abi.decode(data, (uint)); } /** * @notice Returns the current total borrows plus accrued interest * @return The total borrows with interest */ function totalBorrowsCurrent() override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("totalBorrowsCurrent()")); return abi.decode(data, (uint)); } /** * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex * @param account The address whose balance should be calculated after updating borrowIndex * @return The calculated balance */ function borrowBalanceCurrent(address account) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("borrowBalanceCurrent(address)", account)); return abi.decode(data, (uint)); } /** * @notice Return the borrow balance of account based on stored data * @param account The address whose balance should be calculated * @return The calculated balance */ function borrowBalanceStored(address account) override public view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("borrowBalanceStored(address)", account)); return abi.decode(data, (uint)); } /** * @notice Accrue interest then return the up-to-date exchange rate * @return Calculated exchange rate scaled by 1e18 */ function exchangeRateCurrent() override public returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("exchangeRateCurrent()")); return abi.decode(data, (uint)); } /** * @notice Calculates the exchange rate from the underlying to the CToken * @dev This function does not accrue interest before calculating the exchange rate * @return Calculated exchange rate scaled by 1e18 */ function exchangeRateStored() override public view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("exchangeRateStored()")); return abi.decode(data, (uint)); } /** * @notice Get cash balance of this cToken in the underlying asset * @return The quantity of underlying asset owned by this contract */ function getCash() override external view returns (uint) { bytes memory data = delegateToViewImplementation(abi.encodeWithSignature("getCash()")); return abi.decode(data, (uint)); } /** * @notice Applies accrued interest to total borrows and reserves. * @dev This calculates interest accrued from the last checkpointed block * up to the current block and writes new checkpoint to storage. */ function accrueInterest() override public returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("accrueInterest()")); return abi.decode(data, (uint)); } /** * @notice Transfers collateral tokens (this market) to the liquidator. * @dev Will fail unless called by another cToken during the process of liquidation. * Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter. * @param liquidator The account receiving seized collateral * @param borrower The account having collateral seized * @param seizeTokens The number of cTokens to seize * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function seize(address liquidator, address borrower, uint seizeTokens) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("seize(address,address,uint256)", liquidator, borrower, seizeTokens)); return abi.decode(data, (uint)); } /** * @notice A public function to sweep accidental ERC-20 transfers to this contract. Tokens are sent to admin (timelock) * @param token The address of the ERC-20 token to sweep */ function sweepToken(EIP20NonStandardInterface token) override external { delegateToImplementation(abi.encodeWithSignature("sweepToken(address)", token)); } /*** Admin Functions ***/ /** * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @param newPendingAdmin New pending admin. * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setPendingAdmin(address payable newPendingAdmin) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setPendingAdmin(address)", newPendingAdmin)); return abi.decode(data, (uint)); } /** * @notice Sets a new comptroller for the market * @dev Admin function to set a new comptroller * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setComptroller(ComptrollerInterface newComptroller) override public returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setComptroller(address)", newComptroller)); return abi.decode(data, (uint)); } /** * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh * @dev Admin function to accrue interest and set a new reserve factor * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setReserveFactor(uint newReserveFactorMantissa) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setReserveFactor(uint256)", newReserveFactorMantissa)); return abi.decode(data, (uint)); } /** * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin * @dev Admin function for pending admin to accept role and update admin * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _acceptAdmin() override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_acceptAdmin()")); return abi.decode(data, (uint)); } /** * @notice Accrues interest and adds reserves by transferring from admin * @param addAmount Amount of reserves to add * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _addReserves(uint addAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_addReserves(uint256)", addAmount)); return abi.decode(data, (uint)); } /** * @notice Accrues interest and reduces reserves by transferring to admin * @param reduceAmount Amount of reduction to reserves * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _reduceReserves(uint reduceAmount) override external returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_reduceReserves(uint256)", reduceAmount)); return abi.decode(data, (uint)); } /** * @notice Accrues interest and updates the interest rate model using _setInterestRateModelFresh * @dev Admin function to accrue interest and update the interest rate model * @param newInterestRateModel the new interest rate model to use * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details) */ function _setInterestRateModel(InterestRateModel newInterestRateModel) override public returns (uint) { bytes memory data = delegateToImplementation(abi.encodeWithSignature("_setInterestRateModel(address)", newInterestRateModel)); return abi.decode(data, (uint)); } /** * @notice Internal method to delegate execution to another contract * @dev It returns to the external caller whatever the implementation returns or forwards reverts * @param callee The contract to delegatecall * @param data The raw data to delegatecall * @return The returned bytes from the delegatecall */ function delegateTo(address callee, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returnData) = callee.delegatecall(data); assembly { if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return returnData; } /** * @notice Delegates execution to the implementation contract * @dev It returns to the external caller whatever the implementation returns or forwards reverts * @param data The raw data to delegatecall * @return The returned bytes from the delegatecall */ function delegateToImplementation(bytes memory data) public returns (bytes memory) { return delegateTo(implementation, data); } /** * @notice Delegates execution to an implementation contract * @dev It returns to the external caller whatever the implementation returns or forwards reverts * There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop. * @param data The raw data to delegatecall * @return The returned bytes from the delegatecall */ function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) { (bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data)); assembly { if eq(success, 0) { revert(add(returnData, 0x20), returndatasize()) } } return abi.decode(returnData, (bytes)); } /** * @notice Delegates execution to an implementation contract * @dev It returns to the external caller whatever the implementation returns or forwards reverts */ fallback() external payable { require(msg.value == 0,"CErc20Delegator:fallback: cannot send value to fallback"); // delegate all other functions to current implementation (bool success, ) = implementation.delegatecall(msg.data); assembly { let free_mem_ptr := mload(0x40) returndatacopy(free_mem_ptr, 0, returndatasize()) switch success case 0 { revert(free_mem_ptr, returndatasize()) } default { return(free_mem_ptr, returndatasize()) } } } }
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":"bytes","name":"becomeImplementationData","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"cTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":false,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":false,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract CTokenInterface","name":"cTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolSeizeShareMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract EIP20NonStandardInterface","name":"token","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002144380380620021448339810160408190526200003491620003c2565b60038054610100600160a81b0319163361010002179055604051620000a590839062000071908d908d908d908d908d908d908d90602401620004fe565b60408051601f198184030181529190526020810180516001600160e01b03908116631a31d46560e01b17909152620000ea16565b50620000b48260008362000169565b5050600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200058595505050505050565b6060600080846001600160a01b03168460405162000109919062000567565b600060405180830381855af49150503d806000811462000146576040519150601f19603f3d011682016040523d82523d6000602084013e6200014b565b606091505b5091509150600082141562000161573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620001f35760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840160405180910390fd5b811562000235576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b179091526200023391906200029816565b505b601280546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b601254606090620002b3906001600160a01b031683620000ea565b92915050565b80516001600160a01b0381168114620002d157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000309578181015183820152602001620002ef565b8381111562000319576000848401525b50505050565b600082601f8301126200033157600080fd5b81516001600160401b03808211156200034e576200034e620002d6565b604051601f8301601f19908116603f01168101908282118183101715620003795762000379620002d6565b816040528381528660208588010111156200039357600080fd5b620003a6846020830160208901620002ec565b9695505050505050565b805160ff81168114620002d157600080fd5b6000806000806000806000806000806101408b8d031215620003e357600080fd5b620003ee8b620002b9565b9950620003fe60208c01620002b9565b98506200040e60408c01620002b9565b60608c015160808d015191995097506001600160401b03808211156200043357600080fd5b620004418e838f016200031f565b975060a08d01519150808211156200045857600080fd5b620004668e838f016200031f565b96506200047660c08e01620003b0565b95506200048660e08e01620002b9565b9450620004976101008e01620002b9565b93506101208d0151915080821115620004af57600080fd5b50620004be8d828e016200031f565b9150509295989b9194979a5092959850565b60008151808452620004ea816020860160208601620002ec565b601f01601f19169290920160200192915050565b6001600160a01b0388811682528781166020830152861660408201526060810185905260e0608082018190526000906200053b90830186620004d0565b82810360a08401526200054f8186620004d0565b91505060ff831660c083015298975050505050505050565b600082516200057b818460208701620002ec565b9190910192915050565b611baf80620005956000396000f3fe6080604052600436106102ff5760003560e01c806370a0823111610190578063bd6d894d116100dc578063f2b3abbd11610095578063f851a4401161006f578063f851a440146109c9578063f8f9da28146109ee578063fca7820b14610a03578063fe9c44ae14610a23576102ff565b8063f2b3abbd14610969578063f3fdb15a14610989578063f5e3c462146109a9576102ff565b8063bd6d894d1461089f578063c37f68e2146108b4578063c5ebeaec146108f4578063db006a7514610914578063dd62ed3e14610934578063e9c714f214610954576102ff565b8063a0712d6811610149578063aa5af0fd11610123578063aa5af0fd14610834578063ae9d70b01461084a578063b2a02ff11461085f578063b71d1a0c1461087f576102ff565b8063a0712d68146107df578063a6afed95146107ff578063a9059cbb14610814576102ff565b806370a082311461073f57806373acee981461075f578063852a12e3146107745780638f840ddd1461079457806395d89b41146107aa57806395dd9193146107bf576102ff565b80633af9e6691161024f578063555bcc4011610208578063601a0bf1116101e2578063601a0bf1146106ce5780636752e702146106ee5780636c540baf146107095780636f307dc31461071f576102ff565b8063555bcc401461066e5780635c60da1b1461068e5780635fe3b567146106ae576102ff565b80633af9e669146105c35780633b1d21a2146105e35780633e941010146105f85780634487152f146106185780634576b5db1461063857806347bd371814610658576102ff565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461051f5780632608f8181461053f578063267822471461055f578063313ce56714610597576102ff565b806318160ddd146104d2578063182df0f5146104e85780631be19560146104fd576102ff565b806306fdde03146103f35780630933c1ed1461041e578063095ea7b31461043e5780630e7527021461046e578063173b99041461049c57806317bfdfbc146104b2575b34156103785760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6012546040516000916001600160a01b0316906103989083903690611729565b600060405180830381855af49150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b505090506040513d6000823e8180156103ef573d82f35b3d82fd5b3480156103ff57600080fd5b50610408610a38565b6040516104159190611795565b60405180910390f35b34801561042a57600080fd5b5061040861043936600461186d565b610ac6565b34801561044a57600080fd5b5061045e6104593660046118ba565b610ae5565b6040519015158152602001610415565b34801561047a57600080fd5b5061048e6104893660046118e6565b610b57565b604051908152602001610415565b3480156104a857600080fd5b5061048e60085481565b3480156104be57600080fd5b5061048e6104cd3660046118ff565b610bbc565b3480156104de57600080fd5b5061048e600d5481565b3480156104f457600080fd5b5061048e610c09565b34801561050957600080fd5b5061051d6105183660046118ff565b610c5c565b005b34801561052b57600080fd5b5061045e61053a36600461191c565b610ca7565b34801561054b57600080fd5b5061048e61055a3660046118ba565b610d22565b34801561056b57600080fd5b5060045461057f906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b3480156105a357600080fd5b506003546105b19060ff1681565b60405160ff9091168152602001610415565b3480156105cf57600080fd5b5061048e6105de3660046118ff565b610d8c565b3480156105ef57600080fd5b5061048e610dd9565b34801561060457600080fd5b5061048e6106133660046118e6565b610e10565b34801561062457600080fd5b5061040861063336600461186d565b610e58565b34801561064457600080fd5b5061048e6106533660046118ff565b610f16565b34801561066457600080fd5b5061048e600b5481565b34801561067a57600080fd5b5061051d61068936600461196b565b610f63565b34801561069a57600080fd5b5060125461057f906001600160a01b031681565b3480156106ba57600080fd5b5060055461057f906001600160a01b031681565b3480156106da57600080fd5b5061048e6106e93660046118e6565b611085565b3480156106fa57600080fd5b5061048e666379da05b6000081565b34801561071557600080fd5b5061048e60095481565b34801561072b57600080fd5b5060115461057f906001600160a01b031681565b34801561074b57600080fd5b5061048e61075a3660046118ff565b6110cd565b34801561076b57600080fd5b5061048e61111a565b34801561078057600080fd5b5061048e61078f3660046118e6565b611151565b3480156107a057600080fd5b5061048e600c5481565b3480156107b657600080fd5b50610408611199565b3480156107cb57600080fd5b5061048e6107da3660046118ff565b6111a6565b3480156107eb57600080fd5b5061048e6107fa3660046118e6565b6111f3565b34801561080b57600080fd5b5061048e61123b565b34801561082057600080fd5b5061045e61082f3660046118ba565b611272565b34801561084057600080fd5b5061048e600a5481565b34801561085657600080fd5b5061048e6112c6565b34801561086b57600080fd5b5061048e61087a36600461191c565b6112fd565b34801561088b57600080fd5b5061048e61089a3660046118ff565b61136f565b3480156108ab57600080fd5b5061048e6113bc565b3480156108c057600080fd5b506108d46108cf3660046118ff565b6113f3565b604080519485526020850193909352918301526060820152608001610415565b34801561090057600080fd5b5061048e61090f3660046118e6565b611473565b34801561092057600080fd5b5061048e61092f3660046118e6565b6114bb565b34801561094057600080fd5b5061048e61094f3660046119cd565b611503565b34801561096057600080fd5b5061048e611558565b34801561097557600080fd5b5061048e6109843660046118ff565b61158f565b34801561099557600080fd5b5060065461057f906001600160a01b031681565b3480156109b557600080fd5b5061048e6109c4366004611a06565b6115dc565b3480156109d557600080fd5b5060035461057f9061010090046001600160a01b031681565b3480156109fa57600080fd5b5061048e611638565b348015610a0f57600080fd5b5061048e610a1e3660046118e6565b61166f565b348015610a2f57600080fd5b5061045e600181565b60018054610a4590611a48565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190611a48565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505081565b601254606090610adf906001600160a01b0316836116b7565b92915050565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610ac6565b905080806020019051810190610b4f9190611a83565b949350505050565b600080610b9f83604051602401610b7091815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610ac6565b905080806020019051810190610bb59190611aa0565b9392505050565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b1790526000908190610c4090610e58565b905080806020019051810190610c569190611aa0565b91505090565b6040516001600160a01b0382166024820152610ca39060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610ac6565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190610d039060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610ac6565b905080806020019051810190610d199190611a83565b95945050505050565b6040516001600160a01b0383166024820152604481018290526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610ac6565b905080806020019051810190610b4f9190611aa0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b1790526000908190610c4090610e58565b600080610b9f83604051602401610e2991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610ac6565b6060600080306001600160a01b031684604051602401610e789190611795565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b17905251610ead9190611ab9565b600060405180830381855afa9150503d8060008114610ee8576040519150601f19603f3d011682016040523d82523d6000602084013e610eed565b606091505b50915091506000821415610f02573d60208201fd5b80806020019051810190610b4f9190611ad5565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610ac6565b60035461010090046001600160a01b03163314610fe85760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840161036f565b8115611022576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261102090610ac6565b505b601280546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b600080610b9f8360405160240161109e91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052610e58565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b1790526000908190610c4090610ac6565b600080610b9f8360405160240161116a91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610ac6565b60028054610a4590611a48565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b179052610e58565b600080610b9f8360405160240161120c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b1790526000908190610c4090610ac6565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b1790526000908190610c4090610e58565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906113599060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610ac6565b905080806020019051810190610d199190611aa0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b1790526000908190610c4090610ac6565b600080600080600061144d8660405160240161141e91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b179052610e58565b9050808060200190518101906114639190611b43565b9450945094509450509193509193565b600080610b9f8360405160240161148c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610ac6565b600080610b9f836040516024016114d491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610ac6565b6040516001600160a01b038084166024830152821660448201526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b179052610e58565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b1790526000908190610c4090610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610ac6565b6040516001600160a01b038085166024830152604482018490528216606482015260009081906113599060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b1790526000908190610c4090610e58565b600080610b9f8360405160240161168891815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610ac6565b6060600080846001600160a01b0316846040516116d49190611ab9565b600060405180830381855af49150503d806000811461170f576040519150601f19603f3d011682016040523d82523d6000602084013e611714565b606091505b50915091506000821415610b4f573d60208201fd5b8183823760009101908152919050565b60005b8381101561175457818101518382015260200161173c565b83811115611763576000848401525b50505050565b60008151808452611781816020860160208601611739565b601f01601f19169290920160200192915050565b602081526000610bb56020830184611769565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117e7576117e76117a8565b604052919050565b600067ffffffffffffffff821115611809576118096117a8565b50601f01601f191660200190565b600082601f83011261182857600080fd5b813561183b611836826117ef565b6117be565b81815284602083860101111561185057600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561187f57600080fd5b813567ffffffffffffffff81111561189657600080fd5b610b4f84828501611817565b6001600160a01b03811681146118b757600080fd5b50565b600080604083850312156118cd57600080fd5b82356118d8816118a2565b946020939093013593505050565b6000602082840312156118f857600080fd5b5035919050565b60006020828403121561191157600080fd5b8135610bb5816118a2565b60008060006060848603121561193157600080fd5b833561193c816118a2565b9250602084013561194c816118a2565b929592945050506040919091013590565b80151581146118b757600080fd5b60008060006060848603121561198057600080fd5b833561198b816118a2565b9250602084013561199b8161195d565b9150604084013567ffffffffffffffff8111156119b757600080fd5b6119c386828701611817565b9150509250925092565b600080604083850312156119e057600080fd5b82356119eb816118a2565b915060208301356119fb816118a2565b809150509250929050565b600080600060608486031215611a1b57600080fd5b8335611a26816118a2565b9250602084013591506040840135611a3d816118a2565b809150509250925092565b600181811c90821680611a5c57607f821691505b60208210811415611a7d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611a9557600080fd5b8151610bb58161195d565b600060208284031215611ab257600080fd5b5051919050565b60008251611acb818460208701611739565b9190910192915050565b600060208284031215611ae757600080fd5b815167ffffffffffffffff811115611afe57600080fd5b8201601f81018413611b0f57600080fd5b8051611b1d611836826117ef565b818152856020838501011115611b3257600080fd5b610d19826020830160208601611739565b60008060008060808587031215611b5957600080fd5b50508251602084015160408501516060909501519196909550909250905056fea26469706673582212209998660d0d661616076553a768c41d02817f34dcea5c05106cd66677e3fb7c4d64736f6c634300080a0033000000000000000000000000935faa2fcec6ab81265b301a30467bbc804b43d30000000000000000000000002ab7be27093355c206b96203fdbbe5a65687b4ea00000000000000000000000016b39d80dd31018760d988b8d8677821498cc4860000000000000000000000000000000000000000000000000000b5e620f48000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a810074d71efb0fd727eeffe0d4570353a695dc0000000000000000000000000cc849aa3849790426d57fabc09e2049fe8e4adaf00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000c4269746c656e64205553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005625553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c806370a0823111610190578063bd6d894d116100dc578063f2b3abbd11610095578063f851a4401161006f578063f851a440146109c9578063f8f9da28146109ee578063fca7820b14610a03578063fe9c44ae14610a23576102ff565b8063f2b3abbd14610969578063f3fdb15a14610989578063f5e3c462146109a9576102ff565b8063bd6d894d1461089f578063c37f68e2146108b4578063c5ebeaec146108f4578063db006a7514610914578063dd62ed3e14610934578063e9c714f214610954576102ff565b8063a0712d6811610149578063aa5af0fd11610123578063aa5af0fd14610834578063ae9d70b01461084a578063b2a02ff11461085f578063b71d1a0c1461087f576102ff565b8063a0712d68146107df578063a6afed95146107ff578063a9059cbb14610814576102ff565b806370a082311461073f57806373acee981461075f578063852a12e3146107745780638f840ddd1461079457806395d89b41146107aa57806395dd9193146107bf576102ff565b80633af9e6691161024f578063555bcc4011610208578063601a0bf1116101e2578063601a0bf1146106ce5780636752e702146106ee5780636c540baf146107095780636f307dc31461071f576102ff565b8063555bcc401461066e5780635c60da1b1461068e5780635fe3b567146106ae576102ff565b80633af9e669146105c35780633b1d21a2146105e35780633e941010146105f85780634487152f146106185780634576b5db1461063857806347bd371814610658576102ff565b806318160ddd116102bc57806323b872dd1161029657806323b872dd1461051f5780632608f8181461053f578063267822471461055f578063313ce56714610597576102ff565b806318160ddd146104d2578063182df0f5146104e85780631be19560146104fd576102ff565b806306fdde03146103f35780630933c1ed1461041e578063095ea7b31461043e5780630e7527021461046e578063173b99041461049c57806317bfdfbc146104b2575b34156103785760405162461bcd60e51b815260206004820152603760248201527f43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f7460448201527f2073656e642076616c756520746f2066616c6c6261636b00000000000000000060648201526084015b60405180910390fd5b6012546040516000916001600160a01b0316906103989083903690611729565b600060405180830381855af49150503d80600081146103d3576040519150601f19603f3d011682016040523d82523d6000602084013e6103d8565b606091505b505090506040513d6000823e8180156103ef573d82f35b3d82fd5b3480156103ff57600080fd5b50610408610a38565b6040516104159190611795565b60405180910390f35b34801561042a57600080fd5b5061040861043936600461186d565b610ac6565b34801561044a57600080fd5b5061045e6104593660046118ba565b610ae5565b6040519015158152602001610415565b34801561047a57600080fd5b5061048e6104893660046118e6565b610b57565b604051908152602001610415565b3480156104a857600080fd5b5061048e60085481565b3480156104be57600080fd5b5061048e6104cd3660046118ff565b610bbc565b3480156104de57600080fd5b5061048e600d5481565b3480156104f457600080fd5b5061048e610c09565b34801561050957600080fd5b5061051d6105183660046118ff565b610c5c565b005b34801561052b57600080fd5b5061045e61053a36600461191c565b610ca7565b34801561054b57600080fd5b5061048e61055a3660046118ba565b610d22565b34801561056b57600080fd5b5060045461057f906001600160a01b031681565b6040516001600160a01b039091168152602001610415565b3480156105a357600080fd5b506003546105b19060ff1681565b60405160ff9091168152602001610415565b3480156105cf57600080fd5b5061048e6105de3660046118ff565b610d8c565b3480156105ef57600080fd5b5061048e610dd9565b34801561060457600080fd5b5061048e6106133660046118e6565b610e10565b34801561062457600080fd5b5061040861063336600461186d565b610e58565b34801561064457600080fd5b5061048e6106533660046118ff565b610f16565b34801561066457600080fd5b5061048e600b5481565b34801561067a57600080fd5b5061051d61068936600461196b565b610f63565b34801561069a57600080fd5b5060125461057f906001600160a01b031681565b3480156106ba57600080fd5b5060055461057f906001600160a01b031681565b3480156106da57600080fd5b5061048e6106e93660046118e6565b611085565b3480156106fa57600080fd5b5061048e666379da05b6000081565b34801561071557600080fd5b5061048e60095481565b34801561072b57600080fd5b5060115461057f906001600160a01b031681565b34801561074b57600080fd5b5061048e61075a3660046118ff565b6110cd565b34801561076b57600080fd5b5061048e61111a565b34801561078057600080fd5b5061048e61078f3660046118e6565b611151565b3480156107a057600080fd5b5061048e600c5481565b3480156107b657600080fd5b50610408611199565b3480156107cb57600080fd5b5061048e6107da3660046118ff565b6111a6565b3480156107eb57600080fd5b5061048e6107fa3660046118e6565b6111f3565b34801561080b57600080fd5b5061048e61123b565b34801561082057600080fd5b5061045e61082f3660046118ba565b611272565b34801561084057600080fd5b5061048e600a5481565b34801561085657600080fd5b5061048e6112c6565b34801561086b57600080fd5b5061048e61087a36600461191c565b6112fd565b34801561088b57600080fd5b5061048e61089a3660046118ff565b61136f565b3480156108ab57600080fd5b5061048e6113bc565b3480156108c057600080fd5b506108d46108cf3660046118ff565b6113f3565b604080519485526020850193909352918301526060820152608001610415565b34801561090057600080fd5b5061048e61090f3660046118e6565b611473565b34801561092057600080fd5b5061048e61092f3660046118e6565b6114bb565b34801561094057600080fd5b5061048e61094f3660046119cd565b611503565b34801561096057600080fd5b5061048e611558565b34801561097557600080fd5b5061048e6109843660046118ff565b61158f565b34801561099557600080fd5b5060065461057f906001600160a01b031681565b3480156109b557600080fd5b5061048e6109c4366004611a06565b6115dc565b3480156109d557600080fd5b5060035461057f9061010090046001600160a01b031681565b3480156109fa57600080fd5b5061048e611638565b348015610a0f57600080fd5b5061048e610a1e3660046118e6565b61166f565b348015610a2f57600080fd5b5061045e600181565b60018054610a4590611a48565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190611a48565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505081565b601254606090610adf906001600160a01b0316836116b7565b92915050565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663095ea7b360e01b179052610ac6565b905080806020019051810190610b4f9190611a83565b949350505050565b600080610b9f83604051602401610b7091815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663073a938160e11b179052610ac6565b905080806020019051810190610bb59190611aa0565b9392505050565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166305eff7ef60e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663182df0f560e01b1790526000908190610c4090610e58565b905080806020019051810190610c569190611aa0565b91505090565b6040516001600160a01b0382166024820152610ca39060440160408051601f198184030181529190526020810180516001600160e01b031662df0cab60e51b179052610ac6565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526000908190610d039060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b179052610ac6565b905080806020019051810190610d199190611a83565b95945050505050565b6040516001600160a01b0383166024820152604481018290526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b03166304c11f0360e31b179052610ac6565b905080806020019051810190610b4f9190611aa0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316633af9e66960e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631d8e90d160e11b1790526000908190610c4090610e58565b600080610b9f83604051602401610e2991815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166303e9410160e41b179052610ac6565b6060600080306001600160a01b031684604051602401610e789190611795565b60408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b17905251610ead9190611ab9565b600060405180830381855afa9150503d8060008114610ee8576040519150601f19603f3d011682016040523d82523d6000602084013e610eed565b606091505b50915091506000821415610f02573d60208201fd5b80806020019051810190610b4f9190611ad5565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316634576b5db60e01b179052610ac6565b60035461010090046001600160a01b03163314610fe85760405162461bcd60e51b815260206004820152603960248201527f43457263323044656c656761746f723a3a5f736574496d706c656d656e74617460448201527f696f6e3a2043616c6c6572206d7573742062652061646d696e00000000000000606482015260840161036f565b8115611022576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b17905261102090610ac6565b505b601280546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a150505050565b600080610b9f8360405160240161109e91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663601a0bf160e01b179052610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b179052610e58565b6040805160048152602481019091526020810180516001600160e01b0316630e759dd360e31b1790526000908190610c4090610ac6565b600080610b9f8360405160240161116a91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663852a12e360e01b179052610ac6565b60028054610a4590611a48565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b03166395dd919360e01b179052610e58565b600080610b9f8360405160240161120c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663140e25ad60e31b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663a6afed9560e01b1790526000908190610c4090610ac6565b6040516001600160a01b0383166024820152604481018290526000908190610b399060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316630ae9d70b60e41b1790526000908190610c4090610e58565b6040516001600160a01b038085166024830152831660448201526064810182905260009081906113599060840160408051601f198184030181529190526020810180516001600160e01b031663b2a02ff160e01b179052610ac6565b905080806020019051810190610d199190611aa0565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b0316632dc7468360e21b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b031663bd6d894d60e01b1790526000908190610c4090610ac6565b600080600080600061144d8660405160240161141e91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166361bfb47160e11b179052610e58565b9050808060200190518101906114639190611b43565b9450945094509450509193509193565b600080610b9f8360405160240161148c91815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663317afabb60e21b179052610ac6565b600080610b9f836040516024016114d491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663db006a7560e01b179052610ac6565b6040516001600160a01b038084166024830152821660448201526000908190610d769060640160408051601f198184030181529190526020810180516001600160e01b0316636eb1769f60e11b179052610e58565b6040805160048152602481019091526020810180516001600160e01b03166374e38a7960e11b1790526000908190610c4090610ac6565b6040516001600160a01b03821660248201526000908190610b9f9060440160408051601f198184030181529190526020810180516001600160e01b031663f2b3abbd60e01b179052610ac6565b6040516001600160a01b038085166024830152604482018490528216606482015260009081906113599060840160408051601f198184030181529190526020810180516001600160e01b0316637af1e23160e11b179052610ac6565b6040805160048152602481019091526020810180516001600160e01b0316631f1f3b4560e31b1790526000908190610c4090610e58565b600080610b9f8360405160240161168891815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663fca7820b60e01b179052610ac6565b6060600080846001600160a01b0316846040516116d49190611ab9565b600060405180830381855af49150503d806000811461170f576040519150601f19603f3d011682016040523d82523d6000602084013e611714565b606091505b50915091506000821415610b4f573d60208201fd5b8183823760009101908152919050565b60005b8381101561175457818101518382015260200161173c565b83811115611763576000848401525b50505050565b60008151808452611781816020860160208601611739565b601f01601f19169290920160200192915050565b602081526000610bb56020830184611769565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117e7576117e76117a8565b604052919050565b600067ffffffffffffffff821115611809576118096117a8565b50601f01601f191660200190565b600082601f83011261182857600080fd5b813561183b611836826117ef565b6117be565b81815284602083860101111561185057600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561187f57600080fd5b813567ffffffffffffffff81111561189657600080fd5b610b4f84828501611817565b6001600160a01b03811681146118b757600080fd5b50565b600080604083850312156118cd57600080fd5b82356118d8816118a2565b946020939093013593505050565b6000602082840312156118f857600080fd5b5035919050565b60006020828403121561191157600080fd5b8135610bb5816118a2565b60008060006060848603121561193157600080fd5b833561193c816118a2565b9250602084013561194c816118a2565b929592945050506040919091013590565b80151581146118b757600080fd5b60008060006060848603121561198057600080fd5b833561198b816118a2565b9250602084013561199b8161195d565b9150604084013567ffffffffffffffff8111156119b757600080fd5b6119c386828701611817565b9150509250925092565b600080604083850312156119e057600080fd5b82356119eb816118a2565b915060208301356119fb816118a2565b809150509250929050565b600080600060608486031215611a1b57600080fd5b8335611a26816118a2565b9250602084013591506040840135611a3d816118a2565b809150509250925092565b600181811c90821680611a5c57607f821691505b60208210811415611a7d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611a9557600080fd5b8151610bb58161195d565b600060208284031215611ab257600080fd5b5051919050565b60008251611acb818460208701611739565b9190910192915050565b600060208284031215611ae757600080fd5b815167ffffffffffffffff811115611afe57600080fd5b8201601f81018413611b0f57600080fd5b8051611b1d611836826117ef565b818152856020838501011115611b3257600080fd5b610d19826020830160208601611739565b60008060008060808587031215611b5957600080fd5b50508251602084015160408501516060909501519196909550909250905056fea26469706673582212209998660d0d661616076553a768c41d02817f34dcea5c05106cd66677e3fb7c4d64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000935faa2fcec6ab81265b301a30467bbc804b43d30000000000000000000000002ab7be27093355c206b96203fdbbe5a65687b4ea00000000000000000000000016b39d80dd31018760d988b8d8677821498cc4860000000000000000000000000000000000000000000000000000b5e620f48000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a810074d71efb0fd727eeffe0d4570353a695dc0000000000000000000000000cc849aa3849790426d57fabc09e2049fe8e4adaf00000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000c4269746c656e64205553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005625553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : underlying_ (address): 0x935faA2FCec6Ab81265B301a30467Bbc804b43d3
Arg [1] : comptroller_ (address): 0x2Ab7bE27093355C206B96203FDbbE5a65687B4ea
Arg [2] : interestRateModel_ (address): 0x16B39D80dd31018760d988B8D8677821498Cc486
Arg [3] : initialExchangeRateMantissa_ (uint256): 200000000000000
Arg [4] : name_ (string): Bitlend USDC
Arg [5] : symbol_ (string): bUSDC
Arg [6] : decimals_ (uint8): 8
Arg [7] : admin_ (address): 0xA810074D71EFB0fD727EeFFE0d4570353a695dc0
Arg [8] : implementation_ (address): 0xCc849AA3849790426d57FABC09e2049Fe8e4ADaF
Arg [9] : becomeImplementationData (bytes): 0x00
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 000000000000000000000000935faa2fcec6ab81265b301a30467bbc804b43d3
Arg [1] : 0000000000000000000000002ab7be27093355c206b96203fdbbe5a65687b4ea
Arg [2] : 00000000000000000000000016b39d80dd31018760d988b8d8677821498cc486
Arg [3] : 0000000000000000000000000000000000000000000000000000b5e620f48000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 000000000000000000000000a810074d71efb0fd727eeffe0d4570353a695dc0
Arg [8] : 000000000000000000000000cc849aa3849790426d57fabc09e2049fe8e4adaf
Arg [9] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [11] : 4269746c656e6420555344430000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [13] : 6255534443000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
21346:23419:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44247:9;:14;44239:81;;;;-1:-1:-1;;;44239:81:0;;216:2:1;44239:81:0;;;198:21:1;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:25;345:18;;;338:53;408:19;;44239:81:0;;;;;;;;;44419:14;;:37;;44401:12;;-1:-1:-1;;;;;44419:14:0;;:37;;44401:12;;44447:8;;44419:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44400:56;;;44519:4;44513:11;44570:16;44567:1;44553:12;44538:49;44610:7;44631:49;;;;44725:16;44711:12;44704:38;44631:49;44661:16;44647:12;44640:38;11254:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43006:141;;;;;;;;;;-1:-1:-1;43006:141:0;;;;;:::i;:::-;;:::i;30558:258::-;;;;;;;;;;-1:-1:-1;30558:258:0;;;;;:::i;:::-;;:::i;:::-;;;3704:14:1;;3697:22;3679:41;;3667:2;3652:18;30558:258:0;3539:187:1;27307:239:0;;;;;;;;;;-1:-1:-1;27307:239:0;;;;;:::i;:::-;;:::i;:::-;;;4062:25:1;;;4050:2;4035:18;27307:239:0;3916:177:1;12477:33:0;;;;;;;;;;;;;;;;34441:252;;;;;;;;;;-1:-1:-1;34441:252:0;;;;;:::i;:::-;;:::i;13122:23::-;;;;;;;;;;;;;;;;35781:224;;;;;;;;;;;;;:::i;37919:169::-;;;;;;;;;;-1:-1:-1;37919:169:0;;;;;:::i;:::-;;:::i;:::-;;29802:286;;;;;;;;;;-1:-1:-1;29802:286:0;;;;;:::i;:::-;;:::i;27873:287::-;;;;;;;;;;-1:-1:-1;27873:287:0;;;;;:::i;:::-;;:::i;11927:35::-;;;;;;;;;;-1:-1:-1;11927:35:0;;;;-1:-1:-1;;;;;11927:35:0;;;;;;-1:-1:-1;;;;;5276:32:1;;;5258:51;;5246:2;5231:18;11927:35:0;5096:219:1;11450:21:0;;;;;;;;;;-1:-1:-1;11450:21:0;;;;;;;;;;;5492:4:1;5480:17;;;5462:36;;5450:2;5435:18;11450:21:0;5320:184:1;32096:246:0;;;;;;;;;;-1:-1:-1;32096:246:0;;;;;:::i;:::-;;:::i;36175:204::-;;;;;;;;;;;;;:::i;40603:237::-;;;;;;;;;;-1:-1:-1;40603:237:0;;;;;:::i;:::-;;:::i;43569:436::-;;;;;;;;;;-1:-1:-1;43569:436:0;;;;;:::i;:::-;;:::i;39030:267::-;;;;;;;;;;-1:-1:-1;39030:267:0;;;;;:::i;:::-;;:::i;12886:24::-;;;;;;;;;;;;;;;;24136:655;;;;;;;;;;-1:-1:-1;24136:655:0;;;;;:::i;:::-;;:::i;20010:29::-;;;;;;;;;;-1:-1:-1;20010:29:0;;;;-1:-1:-1;;;;;20010:29:0;;;12053:39;;;;;;;;;;-1:-1:-1;12053:39:0;;;;-1:-1:-1;;;;;12053:39:0;;;41093:249;;;;;;;;;;-1:-1:-1;41093:249:0;;;;;:::i;:::-;;:::i;14017:56::-;;;;;;;;;;;;14067:6;14017:56;;12600:30;;;;;;;;;;;;;;;;18976:25;;;;;;;;;;-1:-1:-1;18976:25:0;;;;-1:-1:-1;;;;;18976:25:0;;;31605:235;;;;;;;;;;-1:-1:-1;31605:235:0;;;;;:::i;:::-;;:::i;33931:219::-;;;;;;;;;;;;;:::i;26310:251::-;;;;;;;;;;-1:-1:-1;26310:251:0;;;;;:::i;:::-;;:::i;13016:25::-;;;;;;;;;;;;;;;;11350:20;;;;;;;;;;;;;:::i;34902:257::-;;;;;;;;;;-1:-1:-1;34902:257:0;;;;;:::i;:::-;;:::i;25149:223::-;;;;;;;;;;-1:-1:-1;25149:223:0;;;;;:::i;:::-;;:::i;36635:207::-;;;;;;;;;;;;;:::i;29246:249::-;;;;;;;;;;-1:-1:-1;29246:249:0;;;;;:::i;:::-;;:::i;12751:23::-;;;;;;;;;;;;;;;;33559:226;;;;;;;;;;;;;:::i;37403:303::-;;;;;;;;;;-1:-1:-1;37403:303:0;;;;;:::i;:::-;;:::i;38537:268::-;;;;;;;;;;-1:-1:-1;38537:268:0;;;;;:::i;:::-;;:::i;35314:217::-;;;;;;;;;;;;;:::i;32688:293::-;;;;;;;;;;-1:-1:-1;32688:293:0;;;;;:::i;:::-;;:::i;:::-;;;;7442:25:1;;;7498:2;7483:18;;7476:34;;;;7526:18;;;7519:34;7584:2;7569:18;;7562:34;7429:3;7414:19;32688:293:0;7211:391:1;26829:231:0;;;;;;;;;;-1:-1:-1;26829:231:0;;;;;:::i;:::-;;:::i;25723:::-;;;;;;;;;;-1:-1:-1;25723:231:0;;;;;:::i;:::-;;:::i;31146:269::-;;;;;;;;;;-1:-1:-1;31146:269:0;;;;;:::i;:::-;;:::i;40155:205::-;;;;;;;;;;;;;:::i;41711:288::-;;;;;;;;;;-1:-1:-1;41711:288:0;;;;;:::i;:::-;;:::i;12194:42::-;;;;;;;;;;-1:-1:-1;12194:42:0;;;;-1:-1:-1;;;;;12194:42:0;;;28642:343;;;;;;;;;;-1:-1:-1;28642:343:0;;;;;:::i;:::-;;:::i;11816:28::-;;;;;;;;;;-1:-1:-1;11816:28:0;;;;;;;-1:-1:-1;;;;;11816:28:0;;;33157:226;;;;;;;;;;;;;:::i;39600:277::-;;;;;;;;;;-1:-1:-1;39600:277:0;;;;;:::i;:::-;;:::i;14238:36::-;;;;;;;;;;;;14270:4;14238:36;;11254:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43006:141::-;43118:14;;43075:12;;43107:32;;-1:-1:-1;;;;;43118:14:0;43134:4;43107:10;:32::i;:::-;43100:39;43006:141;-1:-1:-1;;43006:141:0:o;30558:258::-;30697:68;;-1:-1:-1;;;;;9571:32:1;;30697:68:0;;;9553:51:1;9620:18;;;9613:34;;;30635:4:0;;;;30672:94;;9526:18:1;;30697:68:0;;;-1:-1:-1;;30697:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30697:68:0;-1:-1:-1;;;30697:68:0;;;30672:24;:94::i;:::-;30652:114;;30795:4;30784:24;;;;;;;;;;;;:::i;:::-;30777:31;30558:258;-1:-1:-1;;;;30558:258:0:o;27307:239::-;27373:4;27390:17;27410:86;27483:11;27435:60;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;27435:60:0;;;;-1:-1:-1;;27435:60:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27435:60:0;-1:-1:-1;;;27435:60:0;;;27410:24;:86::i;:::-;27390:106;;27525:4;27514:24;;;;;;;;;;;;:::i;:::-;27507:31;27307:239;-1:-1:-1;;;27307:239:0:o;34441:252::-;34577:65;;-1:-1:-1;;;;;5276:32:1;;34577:65:0;;;5258:51:1;34515:4:0;;;;34552:91;;5231:18:1;;34577:65:0;;;-1:-1:-1;;34577:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;34577:65:0;-1:-1:-1;;;34577:65:0;;;34552:24;:91::i;35781:224::-;35907:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35907:47:0;-1:-1:-1;;;35907:47:0;;;35841:4;;;;35878:77;;:28;:77::i;:::-;35858:97;;35984:4;35973:24;;;;;;;;;;;;:::i;:::-;35966:31;;;35781:224;:::o;37919:169::-;38026:53;;-1:-1:-1;;;;;5276:32:1;;38026:53:0;;;5258:51:1;38001:79:0;;5231:18:1;;38026:53:0;;;-1:-1:-1;;38026:53:0;;;;;;;;;;;;;;-1:-1:-1;;;;;38026:53:0;-1:-1:-1;;;38026:53:0;;;38001:24;:79::i;:::-;;37919:169;:::o;29802:286::-;29955:82;;-1:-1:-1;;;;;10596:15:1;;;29955:82:0;;;10578:34:1;10648:15;;10628:18;;;10621:43;10680:18;;;10673:34;;;29893:4:0;;;;29930:108;;10513:18:1;;29955:82:0;;;-1:-1:-1;;29955:82:0;;;;;;;;;;;;;;-1:-1:-1;;;;;29955:82:0;-1:-1:-1;;;29955:82:0;;;29930:24;:108::i;:::-;29910:128;;30067:4;30056:24;;;;;;;;;;;;:::i;:::-;30049:31;29802:286;-1:-1:-1;;;;;29802:286:0:o;27873:287::-;28025:84;;-1:-1:-1;;;;;9571:32:1;;28025:84:0;;;9553:51:1;9620:18;;;9613:34;;;27963:4:0;;;;28000:110;;9526:18:1;;28025:84:0;;;-1:-1:-1;;28025:84:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28025:84:0;-1:-1:-1;;;28025:84:0;;;28000:24;:110::i;:::-;27980:130;;28139:4;28128:24;;;;;;;;;;;;:::i;32096:246::-;32229:62;;-1:-1:-1;;;;;5276:32:1;;32229:62:0;;;5258:51:1;32167:4:0;;;;32204:88;;5231:18:1;;32229:62:0;;;-1:-1:-1;;32229:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32229:62:0;-1:-1:-1;;;32229:62:0;;;32204:24;:88::i;36175:204::-;36292:36;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36292:36:0;-1:-1:-1;;;36292:36:0;;;36226:4;;;;36263:66;;:28;:66::i;40603:237::-;40668:4;40685:17;40705:85;40779:9;40730:59;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;40730:59:0;;;;-1:-1:-1;;40730:59:0;;;;;;;;;;;;;;-1:-1:-1;;;;;40730:59:0;-1:-1:-1;;;40730:59:0;;;40705:24;:85::i;43569:436::-;43647:12;43673;43687:23;43722:4;-1:-1:-1;;;;;43714:24:0;43798:4;43739:64;;;;;;;;:::i;:::-;;;;-1:-1:-1;;43739:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;43739:64:0;-1:-1:-1;;;43739:64:0;;;43714:90;;;43739:64;43714:90;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43672:132;;;;43854:1;43845:7;43842:14;43839:99;;;43906:16;43899:4;43887:10;43883:21;43876:47;43839:99;43977:10;43966:31;;;;;;;;;;;;:::i;39030:267::-;39179:67;;-1:-1:-1;;;;;5276:32:1;;39179:67:0;;;5258:51:1;39117:4:0;;;;39154:93;;5231:18:1;;39179:67:0;;;-1:-1:-1;;39179:67:0;;;;;;;;;;;;;;-1:-1:-1;;;;;39179:67:0;-1:-1:-1;;;39179:67:0;;;39154:24;:93::i;24136:655::-;24294:5;;;;;-1:-1:-1;;;;;24294:5:0;24280:10;:19;24272:89;;;;-1:-1:-1;;;24272:89:0;;11838:2:1;24272:89:0;;;11820:21:1;11877:2;11857:18;;;11850:30;11916:34;11896:18;;;11889:62;11987:27;11967:18;;;11960:55;12032:19;;24272:89:0;11636:421:1;24272:89:0;24378:11;24374:120;;;24431:50;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24431:50:0;-1:-1:-1;;;24431:50:0;;;24406:76;;:24;:76::i;:::-;;24374:120;24534:14;;;-1:-1:-1;;;;;24559:32:0;;;-1:-1:-1;;;;;;24559:32:0;;;;;;;24731:52;;;24534:14;;;;12274:34:1;;;12339:2;12324:18;;12317:43;;;;24731:52:0;;12209:18:1;24731:52:0;;;;;;;24261:530;24136:655;;;:::o;41093:249::-;41164:4;41181:17;41201:91;41278:12;41226:65;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;41226:65:0;;;;-1:-1:-1;;41226:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;41226:65:0;-1:-1:-1;;;41226:65:0;;;41201:24;:91::i;31605:235::-;31737:52;;-1:-1:-1;;;;;5276:32:1;;31737:52:0;;;5258:51:1;31671:4:0;;;;31708:82;;5231:18:1;;31737:52:0;;;-1:-1:-1;;31737:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31737:52:0;-1:-1:-1;;;31737:52:0;;;31708:28;:82::i;33931:219::-;34051:48;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34051:48:0;-1:-1:-1;;;34051:48:0;;;33989:4;;;;34026:74;;:24;:74::i;26310:251::-;26382:4;26399:17;26419:92;26497:12;26444:66;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;26444:66:0;;;;-1:-1:-1;;26444:66:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26444:66:0;-1:-1:-1;;;26444:66:0;;;26419:24;:92::i;11350:20::-;;;;;;;:::i;34902:257::-;35044:64;;-1:-1:-1;;;;;5276:32:1;;35044:64:0;;;5258:51:1;34978:4:0;;;;35015:94;;5231:18:1;;35044:64:0;;;-1:-1:-1;;35044:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;35044:64:0;-1:-1:-1;;;35044:64:0;;;35015:28;:94::i;25149:223::-;25207:4;25224:17;25244:78;25310:10;25269:52;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;25269:52:0;;;;-1:-1:-1;;25269:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25269:52:0;-1:-1:-1;;;25269:52:0;;;25244:24;:78::i;36635:207::-;36748:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36748:43:0;-1:-1:-1;;;36748:43:0;;;36686:4;;;;36723:69;;:24;:69::i;29246:249::-;29379:65;;-1:-1:-1;;;;;9571:32:1;;29379:65:0;;;9553:51:1;9620:18;;;9613:34;;;29317:4:0;;;;29354:91;;9526:18:1;;29379:65:0;;;-1:-1:-1;;29379:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;29379:65:0;-1:-1:-1;;;29379:65:0;;;29354:24;:91::i;33559:226::-;33687:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33687:47:0;-1:-1:-1;;;33687:47:0;;;33621:4;;;;33658:77;;:28;:77::i;37403:303::-;37563:92;;-1:-1:-1;;;;;10596:15:1;;;37563:92:0;;;10578:34:1;10648:15;;10628:18;;;10621:43;10680:18;;;10673:34;;;37501:4:0;;;;37538:118;;10513:18:1;;37563:92:0;;;-1:-1:-1;;37563:92:0;;;;;;;;;;;;;;-1:-1:-1;;;;;37563:92:0;-1:-1:-1;;;37563:92:0;;;37538:24;:118::i;:::-;37518:138;;37685:4;37674:24;;;;;;;;;;;;:::i;38537:268::-;38685:69;;-1:-1:-1;;;;;5276:32:1;;38685:69:0;;;5258:51:1;38623:4:0;;;;38660:95;;5231:18:1;;38685:69:0;;;-1:-1:-1;;38685:69:0;;;;;;;;;;;;;;-1:-1:-1;;;;;38685:69:0;-1:-1:-1;;;38685:69:0;;;38660:24;:95::i;35314:217::-;35432:48;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35432:48:0;-1:-1:-1;;;35432:48:0;;;35370:4;;;;35407:74;;:24;:74::i;32688:293::-;32765:4;32771;32777;32783;32800:17;32820:93;32904:7;32849:63;;;;;;;-1:-1:-1;;;;;5276:32:1;;;;5258:51;;5246:2;5231:18;;5096:219;32849:63:0;;;;-1:-1:-1;;32849:63:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32849:63:0;-1:-1:-1;;;32849:63:0;;;32820:28;:93::i;:::-;32800:113;;32942:4;32931:42;;;;;;;;;;;;:::i;:::-;32924:49;;;;;;;;;32688:293;;;;;:::o;26829:231::-;26891:4;26908:17;26928:82;26996:12;26953:56;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;26953:56:0;;;;-1:-1:-1;;26953:56:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26953:56:0;-1:-1:-1;;;26953:56:0;;;26928:24;:82::i;25723:231::-;25785:4;25802:17;25822:82;25890:12;25847:56;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;25847:56:0;;;;-1:-1:-1;;25847:56:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25847:56:0;-1:-1:-1;;;25847:56:0;;;25822:24;:82::i;31146:269::-;31295:69;;-1:-1:-1;;;;;12292:15:1;;;31295:69:0;;;12274:34:1;12344:15;;12324:18;;;12317:43;31229:4:0;;;;31266:99;;12209:18:1;;31295:69:0;;;-1:-1:-1;;31295:69:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31295:69:0;-1:-1:-1;;;31295:69:0;;;31266:28;:99::i;40155:205::-;40268:41;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40268:41:0;-1:-1:-1;;;40268:41:0;;;40206:4;;;;40243:67;;:24;:67::i;41711:288::-;41869:79;;-1:-1:-1;;;;;5276:32:1;;41869:79:0;;;5258:51:1;41807:4:0;;;;41844:105;;5231:18:1;;41869:79:0;;;-1:-1:-1;;41869:79:0;;;;;;;;;;;;;;-1:-1:-1;;;;;41869:79:0;-1:-1:-1;;;41869:79:0;;;41844:24;:105::i;28642:343::-;28826:108;;-1:-1:-1;;;;;13025:15:1;;;28826:108:0;;;13007:34:1;13057:18;;;13050:34;;;13120:15;;13100:18;;;13093:43;28764:4:0;;;;28801:134;;12942:18:1;;28826:108:0;;;-1:-1:-1;;28826:108:0;;;;;;;;;;;;;;-1:-1:-1;;;;;28826:108:0;-1:-1:-1;;;28826:108:0;;;28801:24;:134::i;33157:226::-;33285:47;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33285:47:0;-1:-1:-1;;;33285:47:0;;;33219:4;;;;33256:77;;:28;:77::i;39600:277::-;39685:4;39702:17;39722:105;39801:24;39747:79;;;;;;4062:25:1;;4050:2;4035:18;;3916:177;39747:79:0;;;;-1:-1:-1;;39747:79:0;;;;;;;;;;;;;;-1:-1:-1;;;;;39747:79:0;-1:-1:-1;;;39747:79:0;;;39722:24;:105::i;42359:345::-;42432:12;42458;42472:23;42499:6;-1:-1:-1;;;;;42499:19:0;42519:4;42499:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42457:67;;;;42574:1;42565:7;42562:14;42559:99;;;42626:16;42619:4;42607:10;42603:21;42596:47;438:271:1;621:6;613;608:3;595:33;577:3;647:16;;672:13;;;647:16;438:271;-1:-1:-1;438:271:1:o;714:258::-;786:1;796:113;810:6;807:1;804:13;796:113;;;886:11;;;880:18;867:11;;;860:39;832:2;825:10;796:113;;;927:6;924:1;921:13;918:48;;;962:1;953:6;948:3;944:16;937:27;918:48;;714:258;;;:::o;977:::-;1019:3;1057:5;1051:12;1084:6;1079:3;1072:19;1100:63;1156:6;1149:4;1144:3;1140:14;1133:4;1126:5;1122:16;1100:63;:::i;:::-;1217:2;1196:15;-1:-1:-1;;1192:29:1;1183:39;;;;1224:4;1179:50;;977:258;-1:-1:-1;;977:258:1:o;1240:220::-;1389:2;1378:9;1371:21;1352:4;1409:45;1450:2;1439:9;1435:18;1427:6;1409:45;:::i;1465:127::-;1526:10;1521:3;1517:20;1514:1;1507:31;1557:4;1554:1;1547:15;1581:4;1578:1;1571:15;1597:275;1668:2;1662:9;1733:2;1714:13;;-1:-1:-1;;1710:27:1;1698:40;;1768:18;1753:34;;1789:22;;;1750:62;1747:88;;;1815:18;;:::i;:::-;1851:2;1844:22;1597:275;;-1:-1:-1;1597:275:1:o;1877:186::-;1925:4;1958:18;1950:6;1947:30;1944:56;;;1980:18;;:::i;:::-;-1:-1:-1;2046:2:1;2025:15;-1:-1:-1;;2021:29:1;2052:4;2017:40;;1877:186::o;2068:462::-;2110:5;2163:3;2156:4;2148:6;2144:17;2140:27;2130:55;;2181:1;2178;2171:12;2130:55;2217:6;2204:20;2248:48;2264:31;2292:2;2264:31;:::i;:::-;2248:48;:::i;:::-;2321:2;2312:7;2305:19;2367:3;2360:4;2355:2;2347:6;2343:15;2339:26;2336:35;2333:55;;;2384:1;2381;2374:12;2333:55;2449:2;2442:4;2434:6;2430:17;2423:4;2414:7;2410:18;2397:55;2497:1;2472:16;;;2490:4;2468:27;2461:38;;;;2476:7;2068:462;-1:-1:-1;;;2068:462:1:o;2535:320::-;2603:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:52;;;2672:1;2669;2662:12;2624:52;2712:9;2699:23;2745:18;2737:6;2734:30;2731:50;;;2777:1;2774;2767:12;2731:50;2800:49;2841:7;2832:6;2821:9;2817:22;2800:49;:::i;3083:131::-;-1:-1:-1;;;;;3158:31:1;;3148:42;;3138:70;;3204:1;3201;3194:12;3138:70;3083:131;:::o;3219:315::-;3287:6;3295;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;3403:9;3390:23;3422:31;3447:5;3422:31;:::i;:::-;3472:5;3524:2;3509:18;;;;3496:32;;-1:-1:-1;;;3219:315:1:o;3731:180::-;3790:6;3843:2;3831:9;3822:7;3818:23;3814:32;3811:52;;;3859:1;3856;3849:12;3811:52;-1:-1:-1;3882:23:1;;3731:180;-1:-1:-1;3731:180:1:o;4098:247::-;4157:6;4210:2;4198:9;4189:7;4185:23;4181:32;4178:52;;;4226:1;4223;4216:12;4178:52;4265:9;4252:23;4284:31;4309:5;4284:31;:::i;4635:456::-;4712:6;4720;4728;4781:2;4769:9;4760:7;4756:23;4752:32;4749:52;;;4797:1;4794;4787:12;4749:52;4836:9;4823:23;4855:31;4880:5;4855:31;:::i;:::-;4905:5;-1:-1:-1;4962:2:1;4947:18;;4934:32;4975:33;4934:32;4975:33;:::i;:::-;4635:456;;5027:7;;-1:-1:-1;;;5081:2:1;5066:18;;;;5053:32;;4635:456::o;5789:118::-;5875:5;5868:13;5861:21;5854:5;5851:32;5841:60;;5897:1;5894;5887:12;5912:590;5995:6;6003;6011;6064:2;6052:9;6043:7;6039:23;6035:32;6032:52;;;6080:1;6077;6070:12;6032:52;6119:9;6106:23;6138:31;6163:5;6138:31;:::i;:::-;6188:5;-1:-1:-1;6245:2:1;6230:18;;6217:32;6258:30;6217:32;6258:30;:::i;:::-;6307:7;-1:-1:-1;6365:2:1;6350:18;;6337:32;6392:18;6381:30;;6378:50;;;6424:1;6421;6414:12;6378:50;6447:49;6488:7;6479:6;6468:9;6464:22;6447:49;:::i;:::-;6437:59;;;5912:590;;;;;:::o;7607:388::-;7675:6;7683;7736:2;7724:9;7715:7;7711:23;7707:32;7704:52;;;7752:1;7749;7742:12;7704:52;7791:9;7778:23;7810:31;7835:5;7810:31;:::i;:::-;7860:5;-1:-1:-1;7917:2:1;7902:18;;7889:32;7930:33;7889:32;7930:33;:::i;:::-;7982:7;7972:17;;;7607:388;;;;;:::o;8510:479::-;8610:6;8618;8626;8679:2;8667:9;8658:7;8654:23;8650:32;8647:52;;;8695:1;8692;8685:12;8647:52;8734:9;8721:23;8753:31;8778:5;8753:31;:::i;:::-;8803:5;-1:-1:-1;8855:2:1;8840:18;;8827:32;;-1:-1:-1;8911:2:1;8896:18;;8883:32;8924:33;8883:32;8924:33;:::i;:::-;8976:7;8966:17;;;8510:479;;;;;:::o;8994:380::-;9073:1;9069:12;;;;9116;;;9137:61;;9191:4;9183:6;9179:17;9169:27;;9137:61;9244:2;9236:6;9233:14;9213:18;9210:38;9207:161;;;9290:10;9285:3;9281:20;9278:1;9271:31;9325:4;9322:1;9315:15;9353:4;9350:1;9343:15;9207:161;;8994:380;;;:::o;9658:245::-;9725:6;9778:2;9766:9;9757:7;9753:23;9749:32;9746:52;;;9794:1;9791;9784:12;9746:52;9826:9;9820:16;9845:28;9867:5;9845:28;:::i;9908:184::-;9978:6;10031:2;10019:9;10010:7;10006:23;10002:32;9999:52;;;10047:1;10044;10037:12;9999:52;-1:-1:-1;10070:16:1;;9908:184;-1:-1:-1;9908:184:1:o;10718:274::-;10847:3;10885:6;10879:13;10901:53;10947:6;10942:3;10935:4;10927:6;10923:17;10901:53;:::i;:::-;10970:16;;;;;10718:274;-1:-1:-1;;10718:274:1:o;10997:634::-;11076:6;11129:2;11117:9;11108:7;11104:23;11100:32;11097:52;;;11145:1;11142;11135:12;11097:52;11178:9;11172:16;11211:18;11203:6;11200:30;11197:50;;;11243:1;11240;11233:12;11197:50;11266:22;;11319:4;11311:13;;11307:27;-1:-1:-1;11297:55:1;;11348:1;11345;11338:12;11297:55;11377:2;11371:9;11402:48;11418:31;11446:2;11418:31;:::i;11402:48::-;11473:2;11466:5;11459:17;11513:7;11508:2;11503;11499;11495:11;11491:20;11488:33;11485:53;;;11534:1;11531;11524:12;11485:53;11547:54;11598:2;11593;11586:5;11582:14;11577:2;11573;11569:11;11547:54;:::i;12371:368::-;12468:6;12476;12484;12492;12545:3;12533:9;12524:7;12520:23;12516:33;12513:53;;;12562:1;12559;12552:12;12513:53;-1:-1:-1;;12585:16:1;;12641:2;12626:18;;12620:25;12685:2;12670:18;;12664:25;12729:2;12714:18;;;12708:25;12585:16;;12620:25;;-1:-1:-1;12708:25:1;;-1:-1:-1;12371:368:1;-1:-1:-1;12371:368:1:o
Swarm Source
ipfs://9998660d0d661616076553a768c41d02817f34dcea5c05106cd66677e3fb7c4d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BTTC | 100.00% | $1 | 12 | $12.01 |
[ 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.