mirror of
https://github.com/Instadapp/aave-protocol-v2.git
synced 2024-07-29 21:47:30 +00:00
Merge branch 'master' of gitlab.com:aave-tech/protocol-v2 into 140-setup-mainnet-fork-simulation-environment-based-on-tenderly
This commit is contained in:
commit
23c5d9af29
|
@ -121,7 +121,7 @@ export const strategyREP: IReserveParams = {
|
|||
baseLTVAsCollateral: '3500',
|
||||
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
|
||||
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
|
||||
borrowingEnabled: false,
|
||||
borrowingEnabled: true,
|
||||
};
|
||||
|
||||
export const stablecoinStrategySUSD: IReserveParams = {
|
||||
|
@ -133,7 +133,7 @@ export const stablecoinStrategySUSD: IReserveParams = {
|
|||
baseLTVAsCollateral: '-1',
|
||||
liquidationThreshold: '0',
|
||||
liquidationBonus: '0',
|
||||
borrowingEnabled: false,
|
||||
borrowingEnabled: true,
|
||||
stableBorrowRateEnabled: false,
|
||||
reserveDecimals: '18',
|
||||
};
|
||||
|
@ -176,7 +176,7 @@ export const stablecoinStrategyUSDT: IReserveParams = {
|
|||
baseLTVAsCollateral: '-1',
|
||||
liquidationThreshold: '7000',
|
||||
liquidationBonus: '0',
|
||||
borrowingEnabled: false,
|
||||
borrowingEnabled: true,
|
||||
stableBorrowRateEnabled: true,
|
||||
reserveDecimals: '6',
|
||||
};
|
||||
|
|
|
@ -429,10 +429,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
|||
|
||||
(uint256 returnCode, string memory returnMessage) = abi.decode(result, (uint256, string));
|
||||
|
||||
if (returnCode != 0) {
|
||||
//error found
|
||||
revert(string(abi.encodePacked(returnMessage)));
|
||||
}
|
||||
require(returnCode == 0, string(abi.encodePacked(returnMessage)));
|
||||
}
|
||||
|
||||
struct FlashLoanLocalVars {
|
||||
|
@ -731,13 +728,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev avoids direct transfers of ETH
|
||||
**/
|
||||
receive() external payable {
|
||||
revert();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev initializes a reserve
|
||||
* @param asset the address of the reserve
|
||||
|
|
|
@ -18,7 +18,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
|
||||
uint256 internal _avgStableRate;
|
||||
mapping(address => uint40) internal _timestamps;
|
||||
mapping(address => uint256) internal _usersData;
|
||||
mapping(address => uint256) internal _usersStableRate;
|
||||
uint40 internal _totalSupplyTimestamp;
|
||||
|
||||
constructor(
|
||||
|
@ -59,7 +59,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
* @return the stable rate of user
|
||||
**/
|
||||
function getUserStableRate(address user) external virtual override view returns (uint256) {
|
||||
return _usersData[user];
|
||||
return _usersStableRate[user];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -68,7 +68,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
**/
|
||||
function balanceOf(address account) public virtual override view returns (uint256) {
|
||||
uint256 accountBalance = super.balanceOf(account);
|
||||
uint256 stableRate = _usersData[account];
|
||||
uint256 stableRate = _usersStableRate[account];
|
||||
if (accountBalance == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -117,13 +117,13 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
vars.amountInRay = amount.wadToRay();
|
||||
|
||||
//calculates the new stable rate for the user
|
||||
vars.newStableRate = _usersData[onBehalfOf]
|
||||
vars.newStableRate = _usersStableRate[onBehalfOf]
|
||||
.rayMul(currentBalance.wadToRay())
|
||||
.add(vars.amountInRay.rayMul(rate))
|
||||
.rayDiv(currentBalance.add(amount).wadToRay());
|
||||
|
||||
require(vars.newStableRate < (1 << 128), 'Debt token: stable rate overflow');
|
||||
_usersData[onBehalfOf] = vars.newStableRate;
|
||||
_usersStableRate[onBehalfOf] = vars.newStableRate;
|
||||
|
||||
//updating the user and supply timestamp
|
||||
//solium-disable-next-line
|
||||
|
@ -166,6 +166,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
uint256 previousSupply = totalSupply();
|
||||
uint256 newStableRate = 0;
|
||||
uint256 nextSupply = 0;
|
||||
uint256 userStableRate = _usersStableRate[user];
|
||||
|
||||
//since the total supply and each single user debt accrue separately,
|
||||
//there might be accumulation errors so that the last borrower repaying
|
||||
|
@ -176,14 +177,21 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
|
|||
_totalSupply = 0;
|
||||
} else {
|
||||
nextSupply = _totalSupply = previousSupply.sub(amount);
|
||||
newStableRate = _avgStableRate = _avgStableRate
|
||||
.rayMul(previousSupply.wadToRay())
|
||||
.sub(_usersData[user].rayMul(amount.wadToRay()))
|
||||
.rayDiv(nextSupply.wadToRay());
|
||||
uint256 firstTerm = _avgStableRate.rayMul(previousSupply.wadToRay());
|
||||
uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());
|
||||
|
||||
//for the same reason described above, when the last user is repaying it might
|
||||
//happen that user rate * user balance > avg rate * total supply. In that case,
|
||||
//we simply set the avg rate to 0
|
||||
if (secondTerm >= firstTerm) {
|
||||
newStableRate = _avgStableRate = _totalSupply = 0;
|
||||
} else {
|
||||
newStableRate = _avgStableRate = firstTerm.sub(secondTerm).rayDiv(nextSupply.wadToRay());
|
||||
}
|
||||
}
|
||||
|
||||
if (amount == currentBalance) {
|
||||
_usersData[user] = 0;
|
||||
_usersStableRate[user] = 0;
|
||||
_timestamps[user] = 0;
|
||||
} else {
|
||||
//solium-disable-next-line
|
||||
|
|
|
@ -1285,4 +1285,4 @@
|
|||
"address": "0xaDF23b1cAa6a7B3b077c432794FfF80A4b935cdF"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user