Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
264574 | 53 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract contains unverified libraries: FlashLoanLogic
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:
DefaultReserveInterestRateStrategy
Compiler Version
v0.8.12+commit.f00d7308
ZkSolc Version
v1.5.0
Optimization Enabled:
Yes with Mode 3
Other Settings:
berlin EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol'; import {WadRayMath} from '../libraries/math/WadRayMath.sol'; import {PercentageMath} from '../libraries/math/PercentageMath.sol'; import {DataTypes} from '../libraries/types/DataTypes.sol'; import {Errors} from '../libraries/helpers/Errors.sol'; import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol'; import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol'; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; /** * @title DefaultReserveInterestRateStrategy contract * @author Aave * @notice Implements the calculation of the interest rates depending on the reserve state * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO` * point of usage and another from that one to 100%. * - An instance of this same contract, can't be used across different Aave markets, due to the caching * of the PoolAddressesProvider */ contract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy { using WadRayMath for uint256; using PercentageMath for uint256; /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable OPTIMAL_USAGE_RATIO; /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO; /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable MAX_EXCESS_USAGE_RATIO; /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO; IPoolAddressesProvider public immutable ADDRESSES_PROVIDER; // Base variable borrow rate when usage rate = 0. Expressed in ray uint256 internal immutable _baseVariableBorrowRate; // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray uint256 internal immutable _variableRateSlope1; // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray uint256 internal immutable _variableRateSlope2; // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray uint256 internal immutable _stableRateSlope1; // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray uint256 internal immutable _stableRateSlope2; // Premium on top of `_variableRateSlope1` for base stable borrowing rate uint256 internal immutable _baseStableRateOffset; // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO` uint256 internal immutable _stableRateExcessOffset; /** * @dev Constructor. * @param provider The address of the PoolAddressesProvider contract * @param optimalUsageRatio The optimal usage ratio * @param baseVariableBorrowRate The base variable borrow rate * @param variableRateSlope1 The variable rate slope below optimal usage ratio * @param variableRateSlope2 The variable rate slope above optimal usage ratio * @param stableRateSlope1 The stable rate slope below optimal usage ratio * @param stableRateSlope2 The stable rate slope above optimal usage ratio * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve */ constructor( IPoolAddressesProvider provider, uint256 optimalUsageRatio, uint256 baseVariableBorrowRate, uint256 variableRateSlope1, uint256 variableRateSlope2, uint256 stableRateSlope1, uint256 stableRateSlope2, uint256 baseStableRateOffset, uint256 stableRateExcessOffset, uint256 optimalStableToTotalDebtRatio ) { require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO); require( WadRayMath.RAY >= optimalStableToTotalDebtRatio, Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO ); OPTIMAL_USAGE_RATIO = optimalUsageRatio; MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio; OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio; MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio; ADDRESSES_PROVIDER = provider; _baseVariableBorrowRate = baseVariableBorrowRate; _variableRateSlope1 = variableRateSlope1; _variableRateSlope2 = variableRateSlope2; _stableRateSlope1 = stableRateSlope1; _stableRateSlope2 = stableRateSlope2; _baseStableRateOffset = baseStableRateOffset; _stableRateExcessOffset = stableRateExcessOffset; } /// @inheritdoc IDefaultInterestRateStrategy function getVariableRateSlope1() external view returns (uint256) { return _variableRateSlope1; } /// @inheritdoc IDefaultInterestRateStrategy function getVariableRateSlope2() external view returns (uint256) { return _variableRateSlope2; } /// @inheritdoc IDefaultInterestRateStrategy function getStableRateSlope1() external view returns (uint256) { return _stableRateSlope1; } /// @inheritdoc IDefaultInterestRateStrategy function getStableRateSlope2() external view returns (uint256) { return _stableRateSlope2; } /// @inheritdoc IDefaultInterestRateStrategy function getStableRateExcessOffset() external view returns (uint256) { return _stableRateExcessOffset; } /// @inheritdoc IDefaultInterestRateStrategy function getBaseStableBorrowRate() public view returns (uint256) { return _variableRateSlope1 + _baseStableRateOffset; } /// @inheritdoc IDefaultInterestRateStrategy function getBaseVariableBorrowRate() external view override returns (uint256) { return _baseVariableBorrowRate; } /// @inheritdoc IDefaultInterestRateStrategy function getMaxVariableBorrowRate() external view override returns (uint256) { return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2; } struct CalcInterestRatesLocalVars { uint256 availableLiquidity; uint256 totalDebt; uint256 currentVariableBorrowRate; uint256 currentStableBorrowRate; uint256 currentLiquidityRate; uint256 borrowUsageRatio; uint256 supplyUsageRatio; uint256 stableToTotalDebtRatio; uint256 availableLiquidityPlusDebt; } /// @inheritdoc IReserveInterestRateStrategy function calculateInterestRates( DataTypes.CalculateInterestRatesParams memory params ) public view override returns (uint256, uint256, uint256) { CalcInterestRatesLocalVars memory vars; vars.totalDebt = params.totalStableDebt + params.totalVariableDebt; vars.currentLiquidityRate = 0; vars.currentVariableBorrowRate = _baseVariableBorrowRate; vars.currentStableBorrowRate = getBaseStableBorrowRate(); if (vars.totalDebt != 0) { vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt); vars.availableLiquidity = IERC20(params.reserve).balanceOf(params.aToken) + params.liquidityAdded - params.liquidityTaken; vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt; vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt); vars.supplyUsageRatio = vars.totalDebt.rayDiv( vars.availableLiquidityPlusDebt + params.unbacked ); } if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) { uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv( MAX_EXCESS_USAGE_RATIO ); vars.currentStableBorrowRate += _stableRateSlope1 + _stableRateSlope2.rayMul(excessBorrowUsageRatio); vars.currentVariableBorrowRate += _variableRateSlope1 + _variableRateSlope2.rayMul(excessBorrowUsageRatio); } else { vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv( OPTIMAL_USAGE_RATIO ); vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv( OPTIMAL_USAGE_RATIO ); } if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) { uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio - OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO); vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio); } vars.currentLiquidityRate = _getOverallBorrowRate( params.totalStableDebt, params.totalVariableDebt, vars.currentVariableBorrowRate, params.averageStableBorrowRate ).rayMul(vars.supplyUsageRatio).percentMul( PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor ); return ( vars.currentLiquidityRate, vars.currentStableBorrowRate, vars.currentVariableBorrowRate ); } /** * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable * debt * @param totalStableDebt The total borrowed from the reserve at a stable rate * @param totalVariableDebt The total borrowed from the reserve at a variable rate * @param currentVariableBorrowRate The current variable borrow rate of the reserve * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans * @return The weighted averaged borrow rate */ function _getOverallBorrowRate( uint256 totalStableDebt, uint256 totalVariableDebt, uint256 currentVariableBorrowRate, uint256 currentAverageStableBorrowRate ) internal pure returns (uint256) { uint256 totalDebt = totalStableDebt + totalVariableDebt; if (totalDebt == 0) return 0; uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate); uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate); uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv( totalDebt.wadToRay() ); return overallBorrowRate; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; /** * @title PercentageMath library * @author Aave * @notice Provides functions to perform percentage calculations * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down. */ library PercentageMath { // Maximum percentage factor (100.00%) uint256 internal constant PERCENTAGE_FACTOR = 1e4; // Half percentage factor (50.00%) uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4; /** * @notice Executes a percentage multiplication * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param value The value of which the percentage needs to be calculated * @param percentage The percentage of the value to be calculated * @return result value percentmul percentage */ function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) { // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage assembly { if iszero( or( iszero(percentage), iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage))) ) ) { revert(0, 0) } result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR) } } /** * @notice Executes a percentage division * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param value The value of which the percentage needs to be calculated * @param percentage The percentage of the value to be calculated * @return result value percentdiv percentage */ function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) { // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR assembly { if or( iszero(percentage), iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR)))) ) { revert(0, 0) } result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage) } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; /** * @title WadRayMath library * @author Aave * @notice Provides functions to perform calculations with Wad and Ray units * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers * with 27 digits of precision) * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down. */ library WadRayMath { // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly uint256 internal constant WAD = 1e18; uint256 internal constant HALF_WAD = 0.5e18; uint256 internal constant RAY = 1e27; uint256 internal constant HALF_RAY = 0.5e27; uint256 internal constant WAD_RAY_RATIO = 1e9; /** * @dev Multiplies two wad, rounding half up to the nearest wad * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Wad * @param b Wad * @return c = a*b, in wad */ function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b assembly { if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) { revert(0, 0) } c := div(add(mul(a, b), HALF_WAD), WAD) } } /** * @dev Divides two wad, rounding half up to the nearest wad * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Wad * @param b Wad * @return c = a/b, in wad */ function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - halfB) / WAD assembly { if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) { revert(0, 0) } c := div(add(mul(a, WAD), div(b, 2)), b) } } /** * @notice Multiplies two ray, rounding half up to the nearest ray * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Ray * @param b Ray * @return c = a raymul b */ function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b assembly { if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) { revert(0, 0) } c := div(add(mul(a, b), HALF_RAY), RAY) } } /** * @notice Divides two ray, rounding half up to the nearest ray * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Ray * @param b Ray * @return c = a raydiv b */ function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - halfB) / RAY assembly { if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) { revert(0, 0) } c := div(add(mul(a, RAY), div(b, 2)), b) } } /** * @dev Casts ray down to wad * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Ray * @return b = a converted to wad, rounded half up to the nearest wad */ function rayToWad(uint256 a) internal pure returns (uint256 b) { assembly { b := div(a, WAD_RAY_RATIO) let remainder := mod(a, WAD_RAY_RATIO) if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) { b := add(b, 1) } } } /** * @dev Converts wad up to ray * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Wad * @return b = a converted in ray */ function wadToRay(uint256 a) internal pure returns (uint256 b) { // to avoid overflow, b/WAD_RAY_RATIO == a assembly { b := mul(a, WAD_RAY_RATIO) if iszero(eq(div(b, WAD_RAY_RATIO), a)) { revert(0, 0) } } } }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; import {DataTypes} from '../protocol/libraries/types/DataTypes.sol'; /** * @title IReserveInterestRateStrategy * @author Aave * @notice Interface for the calculation of the interest rates */ interface IReserveInterestRateStrategy { /** * @notice Calculates the interest rates depending on the reserve's state and configurations * @param params The parameters needed to calculate interest rates * @return liquidityRate The liquidity rate expressed in rays * @return stableBorrowRate The stable borrow rate expressed in rays * @return variableBorrowRate The variable borrow rate expressed in rays */ function calculateInterestRates( DataTypes.CalculateInterestRatesParams memory params ) external view returns (uint256, uint256, uint256); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; /** * @title IPoolAddressesProvider * @author Aave * @notice Defines the basic interface for a Pool Addresses Provider. */ interface IPoolAddressesProvider { /** * @dev Emitted when the market identifier is updated. * @param oldMarketId The old id of the market * @param newMarketId The new id of the market */ event MarketIdSet(string indexed oldMarketId, string indexed newMarketId); /** * @dev Emitted when the pool is updated. * @param oldAddress The old address of the Pool * @param newAddress The new address of the Pool */ event PoolUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the pool configurator is updated. * @param oldAddress The old address of the PoolConfigurator * @param newAddress The new address of the PoolConfigurator */ event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the price oracle is updated. * @param oldAddress The old address of the PriceOracle * @param newAddress The new address of the PriceOracle */ event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the ACL manager is updated. * @param oldAddress The old address of the ACLManager * @param newAddress The new address of the ACLManager */ event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the ACL admin is updated. * @param oldAddress The old address of the ACLAdmin * @param newAddress The new address of the ACLAdmin */ event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the price oracle sentinel is updated. * @param oldAddress The old address of the PriceOracleSentinel * @param newAddress The new address of the PriceOracleSentinel */ event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the pool data provider is updated. * @param oldAddress The old address of the PoolDataProvider * @param newAddress The new address of the PoolDataProvider */ event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when a new proxy is created. * @param id The identifier of the proxy * @param proxyAddress The address of the created proxy contract * @param implementationAddress The address of the implementation contract */ event ProxyCreated( bytes32 indexed id, address indexed proxyAddress, address indexed implementationAddress ); /** * @dev Emitted when a new non-proxied contract address is registered. * @param id The identifier of the contract * @param oldAddress The address of the old contract * @param newAddress The address of the new contract */ event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress); /** * @dev Emitted when the implementation of the proxy registered with id is updated * @param id The identifier of the contract * @param proxyAddress The address of the proxy contract * @param oldImplementationAddress The address of the old implementation contract * @param newImplementationAddress The address of the new implementation contract */ event AddressSetAsProxy( bytes32 indexed id, address indexed proxyAddress, address oldImplementationAddress, address indexed newImplementationAddress ); /** * @notice Returns the id of the Aave market to which this contract points to. * @return The market id */ function getMarketId() external view returns (string memory); /** * @notice Associates an id with a specific PoolAddressesProvider. * @dev This can be used to create an onchain registry of PoolAddressesProviders to * identify and validate multiple Aave markets. * @param newMarketId The market id */ function setMarketId(string calldata newMarketId) external; /** * @notice Returns an address by its identifier. * @dev The returned address might be an EOA or a contract, potentially proxied * @dev It returns ZERO if there is no registered address with the given id * @param id The id * @return The address of the registered for the specified id */ function getAddress(bytes32 id) external view returns (address); /** * @notice General function to update the implementation of a proxy registered with * certain `id`. If there is no proxy registered, it will instantiate one and * set as implementation the `newImplementationAddress`. * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit * setter function, in order to avoid unexpected consequences * @param id The id * @param newImplementationAddress The address of the new implementation */ function setAddressAsProxy(bytes32 id, address newImplementationAddress) external; /** * @notice Sets an address for an id replacing the address saved in the addresses map. * @dev IMPORTANT Use this function carefully, as it will do a hard replacement * @param id The id * @param newAddress The address to set */ function setAddress(bytes32 id, address newAddress) external; /** * @notice Returns the address of the Pool proxy. * @return The Pool proxy address */ function getPool() external view returns (address); /** * @notice Updates the implementation of the Pool, or creates a proxy * setting the new `pool` implementation when the function is called for the first time. * @param newPoolImpl The new Pool implementation */ function setPoolImpl(address newPoolImpl) external; /** * @notice Returns the address of the PoolConfigurator proxy. * @return The PoolConfigurator proxy address */ function getPoolConfigurator() external view returns (address); /** * @notice Updates the implementation of the PoolConfigurator, or creates a proxy * setting the new `PoolConfigurator` implementation when the function is called for the first time. * @param newPoolConfiguratorImpl The new PoolConfigurator implementation */ function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external; /** * @notice Returns the address of the price oracle. * @return The address of the PriceOracle */ function getPriceOracle() external view returns (address); /** * @notice Updates the address of the price oracle. * @param newPriceOracle The address of the new PriceOracle */ function setPriceOracle(address newPriceOracle) external; /** * @notice Returns the address of the ACL manager. * @return The address of the ACLManager */ function getACLManager() external view returns (address); /** * @notice Updates the address of the ACL manager. * @param newAclManager The address of the new ACLManager */ function setACLManager(address newAclManager) external; /** * @notice Returns the address of the ACL admin. * @return The address of the ACL admin */ function getACLAdmin() external view returns (address); /** * @notice Updates the address of the ACL admin. * @param newAclAdmin The address of the new ACL admin */ function setACLAdmin(address newAclAdmin) external; /** * @notice Returns the address of the price oracle sentinel. * @return The address of the PriceOracleSentinel */ function getPriceOracleSentinel() external view returns (address); /** * @notice Updates the address of the price oracle sentinel. * @param newPriceOracleSentinel The address of the new PriceOracleSentinel */ function setPriceOracleSentinel(address newPriceOracleSentinel) external; /** * @notice Returns the address of the data provider. * @return The address of the DataProvider */ function getPoolDataProvider() external view returns (address); /** * @notice Updates the address of the data provider. * @param newDataProvider The address of the new DataProvider */ function setPoolDataProvider(address newDataProvider) external; }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; import {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol'; import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; /** * @title IDefaultInterestRateStrategy * @author Aave * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy */ interface IDefaultInterestRateStrategy is IReserveInterestRateStrategy { /** * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates. * @return The optimal usage ratio, expressed in ray. */ function OPTIMAL_USAGE_RATIO() external view returns (uint256); /** * @notice Returns the optimal stable to total debt ratio of the reserve. * @return The optimal stable to total debt ratio, expressed in ray. */ function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256); /** * @notice Returns the excess usage ratio above the optimal. * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations) * @return The max excess usage ratio, expressed in ray. */ function MAX_EXCESS_USAGE_RATIO() external view returns (uint256); /** * @notice Returns the excess stable debt ratio above the optimal. * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations) * @return The max excess stable to total debt ratio, expressed in ray. */ function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256); /** * @notice Returns the address of the PoolAddressesProvider * @return The address of the PoolAddressesProvider contract */ function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider); /** * @notice Returns the variable rate slope below optimal usage ratio * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO * @return The variable rate slope, expressed in ray */ function getVariableRateSlope1() external view returns (uint256); /** * @notice Returns the variable rate slope above optimal usage ratio * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO * @return The variable rate slope, expressed in ray */ function getVariableRateSlope2() external view returns (uint256); /** * @notice Returns the stable rate slope below optimal usage ratio * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO * @return The stable rate slope, expressed in ray */ function getStableRateSlope1() external view returns (uint256); /** * @notice Returns the stable rate slope above optimal usage ratio * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO * @return The stable rate slope, expressed in ray */ function getStableRateSlope2() external view returns (uint256); /** * @notice Returns the stable rate excess offset * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO * @return The stable rate excess offset, expressed in ray */ function getStableRateExcessOffset() external view returns (uint256); /** * @notice Returns the base stable borrow rate * @return The base stable borrow rate, expressed in ray */ function getBaseStableBorrowRate() external view returns (uint256); /** * @notice Returns the base variable borrow rate * @return The base variable borrow rate, expressed in ray */ function getBaseVariableBorrowRate() external view returns (uint256); /** * @notice Returns the maximum variable borrow rate * @return The maximum variable borrow rate, expressed in ray */ function getMaxVariableBorrowRate() external view returns (uint256); }
// SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; /** * @title Errors library * @author Aave * @notice Defines the error messages emitted by the different contracts of the Aave protocol */ library Errors { string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin' string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin' string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin' string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin' string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin' string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge' string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered' string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider' string public constant NOT_CONTRACT = '9'; // 'Address is not a contract' string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator' string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken' string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid' string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function' string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list' string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached' string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets' string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset' string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0' string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium' string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve' string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category' string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee' string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool' string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint' string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn' string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0' string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve' string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen' string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused' string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled' string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled' string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance' string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected' string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0' string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold' string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow' string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed' string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode' string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type' string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed' string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve' string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve' string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0' string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met' string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold' string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated' string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency' string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters' string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded' string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded' string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded' string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded' string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)' string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero' string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero' string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed' string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category' string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed' string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode' string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized' string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero' string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve' string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve' string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve' string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve' string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve' string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve' string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve' string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve' string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve' string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve' string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index' string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address' string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not' string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid' string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration' string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature' string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported' string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero' string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed' string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio' string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio' string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued' string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list' string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match' string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled' string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one' string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0 string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library DataTypes { struct ReserveData { //stores the reserve configuration ReserveConfigurationMap configuration; //the liquidity index. Expressed in ray uint128 liquidityIndex; //the current supply rate. Expressed in ray uint128 currentLiquidityRate; //variable borrow index. Expressed in ray uint128 variableBorrowIndex; //the current variable borrow rate. Expressed in ray uint128 currentVariableBorrowRate; //the current stable borrow rate. Expressed in ray uint128 currentStableBorrowRate; //timestamp of last update uint40 lastUpdateTimestamp; //the id of the reserve. Represents the position in the list of the active reserves uint16 id; //aToken address address aTokenAddress; //stableDebtToken address address stableDebtTokenAddress; //variableDebtToken address address variableDebtTokenAddress; //address of the interest rate strategy address interestRateStrategyAddress; //the current treasury balance, scaled uint128 accruedToTreasury; //the outstanding unbacked aTokens minted through the bridging feature uint128 unbacked; //the outstanding debt borrowed against this asset in isolation mode uint128 isolationModeTotalDebt; } struct ReserveConfigurationMap { //bit 0-15: LTV //bit 16-31: Liq. threshold //bit 32-47: Liq. bonus //bit 48-55: Decimals //bit 56: reserve is active //bit 57: reserve is frozen //bit 58: borrowing is enabled //bit 59: stable rate borrowing enabled //bit 60: asset is paused //bit 61: borrowing in isolation mode is enabled //bit 62: siloed borrowing enabled //bit 63: flashloaning enabled //bit 64-79: reserve factor //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap //bit 152-167 liquidation protocol fee //bit 168-175 eMode category //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals //bit 252-255 unused uint256 data; } struct UserConfigurationMap { /** * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset. * The first bit indicates if an asset is used as collateral by the user, the second whether an * asset is borrowed by the user. */ uint256 data; } struct EModeCategory { // each eMode category has a custom ltv and liquidation threshold uint16 ltv; uint16 liquidationThreshold; uint16 liquidationBonus; // each eMode category may or may not have a custom oracle to override the individual assets price oracles address priceSource; string label; } enum InterestRateMode { NONE, STABLE, VARIABLE } struct ReserveCache { uint256 currScaledVariableDebt; uint256 nextScaledVariableDebt; uint256 currPrincipalStableDebt; uint256 currAvgStableBorrowRate; uint256 currTotalStableDebt; uint256 nextAvgStableBorrowRate; uint256 nextTotalStableDebt; uint256 currLiquidityIndex; uint256 nextLiquidityIndex; uint256 currVariableBorrowIndex; uint256 nextVariableBorrowIndex; uint256 currLiquidityRate; uint256 currVariableBorrowRate; uint256 reserveFactor; ReserveConfigurationMap reserveConfiguration; address aTokenAddress; address stableDebtTokenAddress; address variableDebtTokenAddress; uint40 reserveLastUpdateTimestamp; uint40 stableDebtLastUpdateTimestamp; } struct ExecuteLiquidationCallParams { uint256 reservesCount; uint256 debtToCover; address collateralAsset; address debtAsset; address user; bool receiveAToken; address priceOracle; uint8 userEModeCategory; address priceOracleSentinel; } struct ExecuteSupplyParams { address asset; uint256 amount; address onBehalfOf; uint16 referralCode; } struct ExecuteBorrowParams { address asset; address user; address onBehalfOf; uint256 amount; InterestRateMode interestRateMode; uint16 referralCode; bool releaseUnderlying; uint256 maxStableRateBorrowSizePercent; uint256 reservesCount; address oracle; uint8 userEModeCategory; address priceOracleSentinel; } struct ExecuteRepayParams { address asset; uint256 amount; InterestRateMode interestRateMode; address onBehalfOf; bool useATokens; } struct ExecuteWithdrawParams { address asset; uint256 amount; address to; uint256 reservesCount; address oracle; uint8 userEModeCategory; } struct ExecuteSetUserEModeParams { uint256 reservesCount; address oracle; uint8 categoryId; } struct FinalizeTransferParams { address asset; address from; address to; uint256 amount; uint256 balanceFromBefore; uint256 balanceToBefore; uint256 reservesCount; address oracle; uint8 fromEModeCategory; } struct FlashloanParams { address receiverAddress; address[] assets; uint256[] amounts; uint256[] interestRateModes; address onBehalfOf; bytes params; uint16 referralCode; uint256 flashLoanPremiumToProtocol; uint256 flashLoanPremiumTotal; uint256 maxStableRateBorrowSizePercent; uint256 reservesCount; address addressesProvider; address pool; uint8 userEModeCategory; bool isAuthorizedFlashBorrower; } struct FlashloanSimpleParams { address receiverAddress; address asset; uint256 amount; bytes params; uint16 referralCode; uint256 flashLoanPremiumToProtocol; uint256 flashLoanPremiumTotal; } struct FlashLoanRepaymentParams { uint256 amount; uint256 totalPremium; uint256 flashLoanPremiumToProtocol; address asset; address receiverAddress; uint16 referralCode; } struct CalculateUserAccountDataParams { UserConfigurationMap userConfig; uint256 reservesCount; address user; address oracle; uint8 userEModeCategory; } struct ValidateBorrowParams { ReserveCache reserveCache; UserConfigurationMap userConfig; address asset; address userAddress; uint256 amount; InterestRateMode interestRateMode; uint256 maxStableLoanPercent; uint256 reservesCount; address oracle; uint8 userEModeCategory; address priceOracleSentinel; bool isolationModeActive; address isolationModeCollateralAddress; uint256 isolationModeDebtCeiling; } struct ValidateLiquidationCallParams { ReserveCache debtReserveCache; uint256 totalDebt; uint256 healthFactor; address priceOracleSentinel; } struct CalculateInterestRatesParams { uint256 unbacked; uint256 liquidityAdded; uint256 liquidityTaken; uint256 totalStableDebt; uint256 totalVariableDebt; uint256 averageStableBorrowRate; uint256 reserveFactor; address reserve; address aToken; } struct InitReserveParams { address asset; address aTokenAddress; address stableDebtAddress; address variableDebtAddress; address interestRateStrategyAddress; uint16 reservesCount; uint16 maxNumberReserves; } }
{ "optimizer": { "enabled": true, "mode": "3" }, "evmVersion": "berlin", "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": { "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol": { "BridgeLogic": "0x406aD7Ed13d91BEF165f6E977e281FB7C571CfE5" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol": { "ConfiguratorLogic": "0x6785433E9A02daEc0e30C532284477Cfe66c6c34" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol": { "PoolLogic": "0xc23507911ce966e314EdeF2f28C401bCe0BEd621" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol": { "EModeLogic": "0x0Ad3F00c09E06B2000923D3234A547ced44392E1" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol": { "LiquidationLogic": "0x4fB6c53DE12E42aB3602efF9BaBcB16285d3bF5c" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol": { "SupplyLogic": "0xF99505fD0c50dB554d83A92CaEB7914EaE8d476f" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol": { "FlashLoanLogic": "0xa79d546E536A0CEcb83D8995e35A5a4A33b5c0Da" }, "@zerolendxyz/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol": { "BorrowLogic": "0x22FB836c1CdDA685Ce0911e266f6E21965Ca31a8" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableRateOffset","type":"uint256"},{"internalType":"uint256","name":"stableRateExcessOffset","type":"uint256"},{"internalType":"uint256","name":"optimalStableToTotalDebtRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000159e427ad5c4b2492238482741f4b5ca37ad3e74b4590d634473a21b0d300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000140000000000000000000000000de15bc7060eb299674d652f48b76ba18c1179028000000000000000000000000000000000000000002e87669c308736a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002116545850052128000000000000000000000000000000000000000000000001f04ef12cb04cf1580000000000000000000000000000000000000000000000000422ca8b0a00a425000000000000000000000000000000000000000000000001f04ef12cb04cf158000000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000422ca8b0a00a4250000000000000000000000000000000000000000000000000a56fa5b99019a5c8000000
Deployed Bytecode
0x0001000000000002001a000000000002000000000301001900000060033002700000012c033001970000000102200190000000200000c13d0000008002000039000000400020043f000000040230008c000000470000413d000000000201043b000000e002200270000001360420009c000000490000213d000001400120009c000000910000a13d000001410120009c000000b10000213d000001440120009c000001020000613d000001450120009c000000470000c13d0000000001000416000000000101004b000000470000c13d0000000001000412001200000001001d001100000000001d0000000001000415000000120110008a0000017f0000013d0000020002000039000000400020043f0000000004000416000000000404004b000000470000c13d0000001f043000390000012d044001970000020004400039000000400040043f0000001f0430018f0000000505300272000000330000613d00000005065002100000020006600039000000000701034f000000007807043c0000000002820436000000000862004b0000002f0000c13d000000000204004b000000420000613d0000000502500210000000000121034f00000003044002100000020002200039000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000001400130008c000000470000413d000002000500043d0000012e0150009c0000005a0000a13d0000000001000019000004ae00010430000001370420009c000000a00000a13d000001380120009c000000f50000213d0000013b0120009c0000010b0000613d0000013c0120009c000000470000c13d0000000001000416000000000101004b000000470000c13d0000000001000412000a00000001001d000901000000003d00000000010004150000000a0110008a0000017f0000013d000003200a00043d000003000100043d000002e00200043d000002c00300043d000002a00400043d000002800700043d000002600800043d000002400900043d000002200b00043d000000400d00043d0000012f06d0009c000001860000213d0000004006d00039000000400060043f000000020e000039000000000ced0436000001300600004100000000006c0435000000400600043d000001310fb0009c000001840000413d00000135010000410000000000160435000000040160003900000020020000390000000000210435000000240260003900000000010d04330000000000120435000000000201004b000000860000613d0000004402600039000000000300001900000000042300190000000005c30019000000000505043300000000005404350000002003300039000000000413004b0000007b0000413d000000000313004b000000860000a13d000000000221001900000000000204350000001f01100039000001560110019700000044011000390000012c0210009c0000012c0100804100000060011002100000012c0260009c0000012c060080410000004002600210000000000121019f000004ae00010430000001460120009c000001140000613d000001470120009c000001220000613d000001480120009c000000470000c13d0000000001000416000000000101004b000000470000c13d0000000001000412001600000001001d001501200000003d0000000001000415000000160110008a0000017f0000013d0000013d0420009c0000012b0000613d0000013e0120009c000001650000613d0000013f0120009c000000470000c13d0000000001000416000000000101004b000000470000c13d04ac04640000040f000000400200043d00000000001204350000012c0120009c0000012c0200804100000040012002100000014a011001c7000004ad0001042e000001420120009c0000016e0000613d000001430120009c000000470000c13d0000000001000416000000000101004b000000470000c13d0000014b01000041000000000010043900000000010004120000000400100443000000c001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000400000001001d0000014b01000041000000000010043900000000010004120000000400100443000000a001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d0000000003000412000000010200008a000000040220014f000000000501043b000000000125004b0000015f0000213d000300000005001d0000014b0100004100000000001004390000000400300443000000e001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d00000004030000290000000302300029000000000101043b0000015703100167000000000332004b0000015f0000213d0000000001210019000000aa0000013d000001390120009c000001770000613d0000013a0120009c000000470000c13d0000000001000416000000000101004b000000470000c13d0000000001000412000600000001001d000500600000003d0000000001000415000000060110008a0000017f0000013d0000000001000416000000000101004b000000470000c13d0000000001000412001400000001001d001300a00000003d0000000001000415000000140110008a0000017f0000013d0000000001000416000000000101004b000000470000c13d0000000001000412000c00000001001d000b01600000003d00000000010004150000000c0110008a0000017f0000013d0000000001000416000000000101004b000000470000c13d0000000001000412001a00000001001d001900800000003d00000000010004150000001a0110008a000000050110021004ac04940000040f0000012e01100197000000800010043f0000014901000041000004ad0001042e0000000001000416000000000101004b000000470000c13d0000000001000412001800000001001d001700c00000003d0000000001000415000000180110008a0000017f0000013d000001240230008c000000470000413d0000000002000416000000000202004b000000470000c13d000001a002000039000000400020043f0000000402100370000000000202043b000000800020043f0000002402100370000000000202043b000000a00020043f0000004402100370000000000202043b000000c00020043f0000006402100370000000000202043b000000e00020043f0000008403100370000000000303043b000001000030043f000000a404100370000000000404043b000001200040043f000000c404100370000000000404043b000001400040043f000000e404100370000000000404043b0000012e0540009c000000470000213d000001600040043f0000010401100370000000000101043b0000012e0410009c000000470000213d000001800010043f000002c001000039000000400010043f0000015701300167000001a00000043f000001c00000043f000001e00000043f000002000000043f000002200000043f000002400000043f000002600000043f000002800000043f000002a00000043f000000000112004b000001ec0000a13d000001510100004100000000001004350000001101000039000000040010043f0000014e01000041000004ae000104300000000001000416000000000101004b000000470000c13d0000000001000412000e00000001001d000d00400000003d00000000010004150000000e0110008a0000017f0000013d0000000001000416000000000101004b000000470000c13d0000000001000412001000000001001d000f00200000003d0000000001000415000000100110008a0000017f0000013d0000000001000416000000000101004b000000470000c13d0000000001000412000800000001001d000700e00000003d0000000001000415000000080110008a000000050110021004ac04940000040f000000800010043f0000014901000041000004ad0001042e0000012f0c60009c0000018c0000a13d000001510100004100000000001004350000004101000039000000040010043f0000014e01000041000004ae00010430000000400c6000390000004000c0043f000000000ce60436000001320d0000410000000000dc0435000001310da0009c000001b60000413d000000400100043d00000135020000410000000000210435000000040210003900000020030000390000000000320435000000000206043300000024031000390000000000230435000000000302004b000001ab0000613d0000004403100039000000000400001900000000053400190000000006c40019000000000606043300000000006504350000002004400039000000000524004b000001a00000413d000000000424004b000001ab0000a13d000000000332001900000000000304350000001f02200039000001560220019700000044022000390000012c0320009c0000012c0200804100000060022002100000012c0310009c0000012c010080410000004001100210000000000112019f000004ae000104300000008000b0043f000001330cb00099000000c000c0043f000000a000a0043f000001330da00099000000e000d0043f000001000050043f000001200090043f000001400080043f000001600070043f000001800040043f000001a00030043f000001c00020043f000001e00010043f00000140000004430000016000b0044300000020060000390000018000600443000001a000a00443000000400a000039000001c000a00443000001e000c00443000000600a0000390000020000a004430000022000d00443000000800a0000390000024000a004430000026000500443000000a0050000390000028000500443000002a000900443000000c005000039000002c000500443000002e000800443000000e0050000390000030000500443000003200070044300000100050000390000034000500443000003600040044300000120040000390000038000400443000003a0003004430000014003000039000003c000300443000003e00020044300000160020000390000040000200443000004200010044300000100006004430000000c0100003900000120001004430000013401000041000004ad0001042e0000000001230019000001c00010043f0000014b01000041000000000010043900000000010004120000000400100443000000a001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000001e00010043f0000014b010000410000000000100439000000000100041200000004001004430000014001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000400000001001d0000014b01000041000000000010043900000000010004120000000400100443000000c001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d00000004030000290000015702300167000000000101043b000000000221004b0000015f0000213d0000000001310019000002000010043f000001c00100043d000000000201004b000002cb0000c13d000002400100043d000400000001001d0000014b01000041000000000010043900000000010004120000000400100443000000240000044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000300000001001d000000040110006b000002e50000a13d000002400200043d000400000002001d000000030120006c0000015f0000413d0000014b010000410000000000100439000000000100041200000004001004430000004001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000301043b0001000100300278000000010100008a000000010110014f000001332110012a000200000003001d000000000203004b000000470000613d00000004030000290004000300300072000000040110006c000000470000413d0000014b010000410000000000100439000000000100041200000004001004430000012001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f000000040300002900000133433000d10000000102200190000003ae0000613d00000001053000290004000220500102000000000101043b000300000001001d000100000005001d000000020150006b000002780000213d00000004010000290000015221100129000000030110006c000000470000413d0000014b010000410000000000100439000000000100041200000004001004430000010001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f000000030400002900000004434000b90000015303300041000001334330012a0000000102200190000003ae0000613d0000015702300167000000000101043b000000000221004b0000015f0000213d00000000013100190000015703100167000002000200043d000000000332004b0000015f0000213d0000000001120019000002000010043f0000014b01000041000000000010043900000000010004120000000400100443000000e001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000300000001001d0000000102000029000000020120006b000002ae0000213d00000004010000290000015221100129000000030110006c000000470000413d0000014b01000041000000000010043900000000010004120000000400100443000000c001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f000000030400002900000004434000b90000015303300041000001334330012a0000000102200190000003ae0000613d0000015702300167000000000101043b000000000221004b0000015f0000213d00000000013100190000015703100167000001e00200043d000000000332004b0000015f0000213d000003340000013d00000001021002700000015703200167000001333430012a000000e00300043d000000000434004b000000470000413d00000133433000d1000000000223001900000000211200d9000002800010043f000001600200043d000001800100043d000000400400043d0000014d030000410000000003340436000300000003001d0000012e01100197000400000004001d0000000403400039000000000013043500000000010004140000012e02200197000000040320008c000003af0000c13d0000000003000031000003dc0000013d0000014b010000410000000000100439000000000100041200000004001004430000010001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000000040200006b000002fb0000613d00000004020000290000015232200129000000000212004b000000470000413d00000004211000b900000003030000290002000100300278000000010200008a000000020220014f00040133202001320000015301100041000001332110012a000000000203004b000000470000613d000000040210006b000000470000413d00000133211000d1000000020110002900000003211000fa0000015703100167000002000200043d000000000332004b0000015f0000213d0000000001120019000002000010043f000002400100043d000100000001001d0000014b01000041000000000010043900000000010004120000000400100443000000c001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000101043b000000010200006b000003280000613d00000001020000290000015232200129000000000212004b000000470000413d00000001211000b90000015301100041000001332110012a000000040210006b000000470000413d00000133211000d1000000020110002900000003211000fa0000015703100167000001e00200043d000000000332004b0000015f0000213d0000000001120019000001e00010043f000002800100043d000400000001001d0000014b010000410000000000100439000000000100041200000004001004430000002001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000201043b000300000002001d000000040120006b000003880000a13d0000014b010000410000000000100439000000000100041200000004001004430000006001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000003ae0000613d000000000301043b0001000100300278000000010100008a000000010110014f000001332110012a000200000003001d000000000203004b000000470000613d00000003030000290004000400300071000000040110006c000000470000413d0000014b010000410000000000100439000000000100041200000004001004430000016001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f000000040300002900000133433000d10000000102200190000003ae0000613d000000010330002900000002423000fa000000000101043b000000020330006b0000037f0000213d0000015243200129000000000313004b000000470000413d00000000212100a90000015301100041000001332110012a0000015703100167000002000200043d000000000332004b0000015f0000213d0000000001120019000002000010043f000001000500043d0000015701500167000000e00400043d000000000114004b0000015f0000213d000001e00100043d000000000245001a0000000003000019000004380000c13d000002600200043d000000000402004b000003970000613d0000015254200129000000000434004b000000470000413d000001400400043d000027100540008c0000015f0000213d00000000323200a90000015302200041000001333220012a000027100340008900000000322300a90000138802200039000027103220011a000002200020043f000000400300043d0000004004300039000002000500043d00000000001404350000002001300039000000000051043500000000002304350000012c0130009c0000012c03008041000000400130021000000155011001c7000004ad0001042e000000000001042f00000004040000290000012c0340009c0000012c03000041000000000304401900000040033002100000012c0410009c0000012c01008041000000c001100210000000000131019f0000014e011001c704ac04a70000040f000000000301001900000060033002700000012c03300197000000200430008c000000200500003900000000050340190000001f0450018f00000005055002720000000309000029000003ca0000613d000000000601034f0000000407000029000000006806043c0000000007870436000000000897004b000003c60000c13d000000000604004b000003d90000613d0000000505500210000000000651034f00000004055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000000000003001f0000000102200190000004170000613d0000001f0130003900000156021001970000000401200029000000000221004b000000000200001900000001020040390000014f0410009c000001860000213d0000000102200190000001860000c13d000000400010043f000001500130009c000000470000213d000000200130008c000000470000413d000000a00100043d000001570310016700000004020000290000000002020433000000000332004b0000015f0000213d0000000001210019000000c00200043d000000000321004b0000015f0000413d0000000002210049000001a00020043f000001c00100043d0000015703100167000000000332004b0000015f0000213d000000000221001a00000001042002700000015703400167000001335330012a000002a00020043f000000470000613d000000000313004b000000470000413d00000133531000d1000000000434001900000000452400d9000400000005001d000002400050043f000000800400043d0000015705400167000000000552004b0000015f0000213d000000000224001a00000001042002700000015705400167000001336550012a000000470000613d000000000115004b000000470000413d000000000134001900000000212100d9000002600010043f0000022b0000013d000000400200043d0000001f0430018f0000000505300272000004230000613d00000005065002100000000006620019000000000701034f0000000008020019000000007907043c0000000008980436000000000968004b0000041f0000c13d000000000604004b000004320000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000060013002100000012c0320009c0000012c020080410000004002200210000000000112019f000004ae00010430000001200300043d00000154765000d1000001548760012a000000000557004b000000470000c13d000000000501004b000004420000613d0000015275100129000000000565004b000000470000413d00000000651600a90000015305500041000001336550012a00000154764000d1000001548760012a000000000447004b000000470000c13d000000000403004b0000044e0000613d0000015274300129000000000464004b000000470000413d00000000436300a90000015303300041000001333430012a00000154632000d1000001547630012a000000000226004b000000470000c13d00000001023002700000015706200167000001337660012a000000000703004b000000470000613d0000000004540019000000000546004b000000470000413d00000133544000d1000000000224001900000000233200d9000002600200043d000000000402004b000003940000c13d000003970000013d00010000000000020000014b010000410000000000100439000000000100041200000004001004430000014001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f00000001022001900000048c0000613d000000000101043b000100000001001d0000014b01000041000000000010043900000000010004120000000400100443000000c001000039000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f00000001022001900000048c0000613d00000001030000290000015702300167000000000101043b000000000221004b0000048d0000213d0000000001310019000000000001042d000000000001042f000001510100004100000000001004350000001101000039000000040010043f0000014e01000041000004ae00010430000000000001042f0000014b0200004100000000002004390000000501100270000000000201003100000004002004430000000101010031000000240010044300000000010004140000012c0210009c0000012c01008041000000c0011002100000014c011001c7000080050200003904ac04a70000040f0000000102200190000004a60000613d000000000101043b000000000001042d000000000001042f000004aa002104230000000102000039000000000001042d0000000002000019000000000001042d000004ac00000432000004ad0001042e000004ae00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf38330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033b2e3c9fd0803ce800000138340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000020000000000000000000000000000034000000100000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a589870800000000000000000000000000000000000000000000000000000000bc62690700000000000000000000000000000000000000000000000000000000f420240800000000000000000000000000000000000000000000000000000000f420240900000000000000000000000000000000000000000000000000000000fe5fd69800000000000000000000000000000000000000000000000000000000bc62690800000000000000000000000000000000000000000000000000000000d5cd739100000000000000000000000000000000000000000000000000000000a589870900000000000000000000000000000000000000000000000000000000a9c622f800000000000000000000000000000000000000000000000000000000acd786860000000000000000000000000000000000000000000000000000000034762ca4000000000000000000000000000000000000000000000000000000006fb92588000000000000000000000000000000000000000000000000000000006fb925890000000000000000000000000000000000000000000000000000000080031e370000000000000000000000000000000000000000000000000000000034762ca50000000000000000000000000000000000000000000000000000000054c365c6000000000000000000000000000000000000000000000000000000000542975c000000000000000000000000000000000000000000000000000000000b3429a20000000000000000000000000000000000000000000000000000000014e32da400000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000020000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000070a08231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e487b7100000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff0000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000060000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6d54b8e6d282620e3125a42a2d3c4e257ef196532625d4d326e1f2a0b150d862
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000de15bc7060eb299674d652f48b76ba18c1179028000000000000000000000000000000000000000002e87669c308736a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002116545850052128000000000000000000000000000000000000000000000001f04ef12cb04cf1580000000000000000000000000000000000000000000000000422ca8b0a00a425000000000000000000000000000000000000000000000001f04ef12cb04cf158000000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000422ca8b0a00a4250000000000000000000000000000000000000000000000000a56fa5b99019a5c8000000
-----Decoded View---------------
Arg [0] : provider (address): 0xde15Bc7060Eb299674D652f48b76BA18c1179028
Arg [1] : optimalUsageRatio (uint256): 900000000000000000000000000
Arg [2] : baseVariableBorrowRate (uint256): 0
Arg [3] : variableRateSlope1 (uint256): 40000000000000000000000000
Arg [4] : variableRateSlope2 (uint256): 600000000000000000000000000
Arg [5] : stableRateSlope1 (uint256): 5000000000000000000000000
Arg [6] : stableRateSlope2 (uint256): 600000000000000000000000000
Arg [7] : baseStableRateOffset (uint256): 10000000000000000000000000
Arg [8] : stableRateExcessOffset (uint256): 80000000000000000000000000
Arg [9] : optimalStableToTotalDebtRatio (uint256): 200000000000000000000000000
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000de15bc7060eb299674d652f48b76ba18c1179028
Arg [1] : 000000000000000000000000000000000000000002e87669c308736a04000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000002116545850052128000000
Arg [4] : 000000000000000000000000000000000000000001f04ef12cb04cf158000000
Arg [5] : 0000000000000000000000000000000000000000000422ca8b0a00a425000000
Arg [6] : 000000000000000000000000000000000000000001f04ef12cb04cf158000000
Arg [7] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [8] : 000000000000000000000000000000000000000000422ca8b0a00a4250000000
Arg [9] : 000000000000000000000000000000000000000000a56fa5b99019a5c8000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.