From 77faf4774bbb9da7bd5b48e653709953f0e59da9 Mon Sep 17 00:00:00 2001
From: The3D <emilio@aave.com>
Date: Tue, 21 Jul 2020 10:20:51 +0200
Subject: [PATCH] Fixed configuration library

---
 contracts/libraries/ReserveConfiguration.sol | 38 ++++++++++++--------
 1 file changed, 24 insertions(+), 14 deletions(-)

diff --git a/contracts/libraries/ReserveConfiguration.sol b/contracts/libraries/ReserveConfiguration.sol
index d224305f..030cfb3c 100644
--- a/contracts/libraries/ReserveConfiguration.sol
+++ b/contracts/libraries/ReserveConfiguration.sol
@@ -21,7 +21,7 @@ library ReserveConfiguration {
   uint256 constant LTV_MASK = 0xFFFFFFFF0000;
   uint256 constant LIQUIDATION_THRESHOLD_MASK = 0xFFFF0000FFFF;
   uint256 constant LIQUIDATION_BONUS_MASK = 0x0000FFFFFFFF;
-  uint256 constant LIQUIDATION_BONUS_MASK = 0x00FFFFFFFFFFFF;
+  uint256 constant DECIMALS_MASK = 0x00FFFFFFFFFFFF;
 
   struct Map {
     //bit 0-15: LTV
@@ -31,35 +31,45 @@ library ReserveConfiguration {
     uint256 data;
   }
 
-  function setLTV(ReserveConfiguration.Map _self, uint256 _ltv) internal {
+  function setLTV(ReserveConfiguration.Map storage _self, uint256 _ltv) internal {
     _self.data = (_self.data & LTV_MASK) | _ltv;
   }
 
-  function getLTV(ReserveConfiguration.Map _self) internal view returns (uint256) {
-    return _self.data & !LTV_MASK;
+  function getLTV(ReserveConfiguration.Map storage _self) internal view returns (uint256) {
+    return _self.data & ~LTV_MASK;
   }
 
-  function setLiquidationThreshold(ReserveConfiguration.Map _self, uint256 _threshold) internal {
+  function setLiquidationThreshold(ReserveConfiguration.Map storage _self, uint256 _threshold)
+    internal
+  {
     _self.data = (_self.data & LIQUIDATION_THRESHOLD_MASK) | (_threshold << 16);
   }
 
-  function getLiquidationThreshold(ReserveConfiguration.Map _self) internal view returns (uint256) {
-    return (_self.data & !LIQUIDATION_THRESHOLD_MASK) >> 16;
+  function getLiquidationThreshold(ReserveConfiguration.Map storage _self)
+    internal
+    view
+    returns (uint256)
+  {
+    return (_self.data & ~LIQUIDATION_THRESHOLD_MASK) >> 16;
   }
 
-  function setLiquidationBonus(ReserveConfiguration.Map _self, uint256 _bonus) internal {
+  function setLiquidationBonus(ReserveConfiguration.Map storage _self, uint256 _bonus) internal {
     _self.data = (_self.data & LIQUIDATION_BONUS_MASK) | (_bonus << 32);
   }
 
-  function getLiquidationBonus(ReserveConfiguration.Map _self) internal view returns (uint256) {
-    return (_self.data & !LIQUIDATION_BONUS_MASK) >> 32;
+  function getLiquidationBonus(ReserveConfiguration.Map storage _self)
+    internal
+    view
+    returns (uint256)
+  {
+    return (_self.data & ~LIQUIDATION_BONUS_MASK) >> 32;
   }
 
-  function setDecimals(ReserveConfiguration.Map _self, uint256 _decimals) internal {
-    _self.data = (_self.data & DECIMALS_MASK) | (_ltv << 48);
+  function setDecimals(ReserveConfiguration.Map storage _self, uint256 _decimals) internal {
+    _self.data = (_self.data & DECIMALS_MASK) | (_decimals << 48);
   }
 
-  function getDecimals(ReserveConfiguration.Map _self) internal view returns (uint256) {
-    return (_self.data & !DECIMALS_MASK) >> 48;
+  function getDecimals(ReserveConfiguration.Map storage _self) internal view returns (uint256) {
+    return (_self.data & ~DECIMALS_MASK) >> 48;
   }
 }