// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./LendingConfiguration.sol";

abstract contract LendingStorage is LendingConfiguration {
    
    address public baseToken;
    address public lendingPriceSource;
    
    uint64 public supplyKink;
    uint64 public supplyPerSecondInterestRateSlopeLow;
    uint64 public supplyPerSecondInterestRateSlopeHigh;
    uint64 public supplyPerSecondInterestRateBase;
    
    uint64 public borrowKink;
    uint64 public borrowPerSecondInterestRateSlopeLow;
    uint64 public borrowPerSecondInterestRateSlopeHigh;
    uint64 public borrowPerSecondInterestRateBase;
    
    uint64 public storeFrontPriceFactor;
    uint64 public trackingIndexScale;
    uint104 public baseBorrowMin;
    uint104 public targetReserves;
    
    mapping(address => AssetConfig) public assetConfigs;
    address[] public assetList;
    
    struct UserBasic {
        int104 principal;
    }
    mapping(address => UserBasic) public userBasic;
    
    mapping(address => mapping(address => uint256)) public userCollateral;
    
    uint104 public totalSupplyBase;
    uint104 public totalBorrowBase;
    
    uint256 public supplyIndex;
    uint256 public borrowIndex;
    uint256 public lastAccrualTime;
    
    mapping(address => uint256) public collateralReserves;
}