diff --git a/.gitignore b/.gitignore
index 626ee868..e6704cbb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,7 @@ dist/
build/
.vscode
.idea
-types
+/types
deployed-contracts.json
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 47b96e0e..3838193e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,14 +1,26 @@
stages:
- - test
+ - checks
test:
- stage: test
+ stage: checks
tags:
- aave-build-runner
before_script:
- - docker-compose -f docker-compose.test.yml build
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml build
script:
- - docker-compose -f docker-compose.test.yml run contracts-env npm run ci:test
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml run contracts-env npm run ci:test
after_script:
- - docker-compose -f docker-compose.test.yml run contracts-env npm run ci:clean
- - docker-compose -f docker-compose.test.yml down
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml run contracts-env npm run ci:clean
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml down
+
+deploy-mainnet-fork:
+ tags:
+ - aave-build-runner
+ stage: checks
+ before_script:
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml build
+ script:
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml run contracts-env npm run aave:fork:main
+ after_script:
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml run contracts-env npm run ci:clean
+ - docker-compose -p ${CI_JOB_ID} -f docker-compose.test.yml down
diff --git a/Dockerfile b/Dockerfile
index c354ddf5..d16d99b7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ethereum/solc:0.6.8 as build-deps
+FROM ethereum/solc:0.6.12 as build-deps
FROM node:14
COPY --from=build-deps /usr/bin/solc /usr/bin/solc
diff --git a/buidler.config.ts b/buidler.config.ts
index 6e15ca7f..3823dc00 100644
--- a/buidler.config.ts
+++ b/buidler.config.ts
@@ -49,7 +49,7 @@ const getCommonNetworkConfig = (networkName: eEthereumNetwork, networkId: number
const buidlerConfig: any = {
solc: {
- version: '0.6.8',
+ version: '0.6.12',
optimizer: {enabled: true, runs: 200},
evmVersion: 'istanbul',
},
diff --git a/contracts/dependencies/openzeppelin/contracts/Address.sol b/contracts/dependencies/openzeppelin/contracts/Address.sol
index be5026db..3e0c92ac 100644
--- a/contracts/dependencies/openzeppelin/contracts/Address.sol
+++ b/contracts/dependencies/openzeppelin/contracts/Address.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
/**
* @dev Collection of functions related to the address type
diff --git a/contracts/dependencies/openzeppelin/contracts/Context.sol b/contracts/dependencies/openzeppelin/contracts/Context.sol
index fb4afa42..cfce1bfc 100644
--- a/contracts/dependencies/openzeppelin/contracts/Context.sol
+++ b/contracts/dependencies/openzeppelin/contracts/Context.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: MIT
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
/*
* @dev Provides information about the current execution context, including the
diff --git a/contracts/dependencies/openzeppelin/contracts/IERC20.sol b/contracts/dependencies/openzeppelin/contracts/IERC20.sol
index af94806b..3d69bffc 100644
--- a/contracts/dependencies/openzeppelin/contracts/IERC20.sol
+++ b/contracts/dependencies/openzeppelin/contracts/IERC20.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
diff --git a/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol b/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol
index db0fbb98..3f4cd13b 100644
--- a/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol
+++ b/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {IERC20} from './IERC20.sol';
diff --git a/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol b/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol
index b543f016..0a27559b 100644
--- a/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol
+++ b/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
import {IERC20} from './IERC20.sol';
import {SafeMath} from './SafeMath.sol';
diff --git a/contracts/dependencies/openzeppelin/contracts/SafeMath.sol b/contracts/dependencies/openzeppelin/contracts/SafeMath.sol
index 0b251214..80f7d679 100644
--- a/contracts/dependencies/openzeppelin/contracts/SafeMath.sol
+++ b/contracts/dependencies/openzeppelin/contracts/SafeMath.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
diff --git a/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol
index 6acd1bd2..3d5b346a 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './BaseAdminUpgradeabilityProxy.sol';
diff --git a/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol
index fb446a3f..dd84184c 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './UpgradeabilityProxy.sol';
diff --git a/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol
index a60ad10c..8fb368f5 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './Proxy.sol';
import '../contracts/Address.sol';
diff --git a/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol
index 2643b4af..c5d089ba 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './BaseAdminUpgradeabilityProxy.sol';
import './InitializableUpgradeabilityProxy.sol';
diff --git a/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol
index 1bc49d59..2efafecd 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './BaseUpgradeabilityProxy.sol';
diff --git a/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol
index 268861c2..f6444485 100644
--- a/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol
+++ b/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './BaseUpgradeabilityProxy.sol';
diff --git a/contracts/deployments/ATokensAndRatesHelper.sol b/contracts/deployments/ATokensAndRatesHelper.sol
index a44d5071..37b8353b 100644
--- a/contracts/deployments/ATokensAndRatesHelper.sol
+++ b/contracts/deployments/ATokensAndRatesHelper.sol
@@ -1,16 +1,18 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {LendingPool} from '../lendingpool/LendingPool.sol';
-import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol';
-import {LendingPoolConfigurator} from '../lendingpool/LendingPoolConfigurator.sol';
-import {AToken} from '../tokenization/AToken.sol';
+import {LendingPool} from '../protocol/lendingpool/LendingPool.sol';
+import {
+ LendingPoolAddressesProvider
+} from '../protocol/configuration/LendingPoolAddressesProvider.sol';
+import {LendingPoolConfigurator} from '../protocol/lendingpool/LendingPoolConfigurator.sol';
+import {AToken} from '../protocol/tokenization/AToken.sol';
import {
DefaultReserveInterestRateStrategy
-} from '../lendingpool/DefaultReserveInterestRateStrategy.sol';
+} from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol';
import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
-import {StringLib} from '../libraries/helpers/StringLib.sol';
+import {StringLib} from './StringLib.sol';
contract ATokensAndRatesHelper is Ownable {
address payable private pool;
@@ -31,7 +33,7 @@ contract ATokensAndRatesHelper is Ownable {
function initDeployment(
address[] calldata tokens,
string[] calldata symbols,
- uint256[5][] calldata rates,
+ uint256[6][] calldata rates,
address incentivesController
) external onlyOwner {
require(tokens.length == symbols.length, 't Arrays not same length');
@@ -55,7 +57,8 @@ contract ATokensAndRatesHelper is Ownable {
rates[i][1],
rates[i][2],
rates[i][3],
- rates[i][4]
+ rates[i][4],
+ rates[i][5]
)
)
);
@@ -105,16 +108,16 @@ contract ATokensAndRatesHelper is Ownable {
}
}
- function enableBorrowingOnReserves(address[] calldata tokens, bool[] calldata stableBorrows)
+ function enableBorrowingOnReserves(address[] calldata tokens, bool[] calldata stableBorrowingEnabled)
external
onlyOwner
{
- require(stableBorrows.length == tokens.length);
+ require(stableBorrowingEnabled.length == tokens.length);
for (uint256 i = 0; i < tokens.length; i++) {
LendingPoolConfigurator(poolConfigurator).enableBorrowingOnReserve(
tokens[i],
- stableBorrows[i]
+ stableBorrowingEnabled[i]
);
}
}
diff --git a/contracts/deployments/StableAndVariableTokensHelper.sol b/contracts/deployments/StableAndVariableTokensHelper.sol
index 9722424e..8f76bbe1 100644
--- a/contracts/deployments/StableAndVariableTokensHelper.sol
+++ b/contracts/deployments/StableAndVariableTokensHelper.sol
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {StableDebtToken} from '../tokenization/StableDebtToken.sol';
-import {VariableDebtToken} from '../tokenization/VariableDebtToken.sol';
+import {StableDebtToken} from '../protocol/tokenization/StableDebtToken.sol';
+import {VariableDebtToken} from '../protocol/tokenization/VariableDebtToken.sol';
import {LendingRateOracle} from '../mocks/oracle/LendingRateOracle.sol';
import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
-import {StringLib} from '../libraries/helpers/StringLib.sol';
+import {StringLib} from './StringLib.sol';
contract StableAndVariableTokensHelper is Ownable {
address payable private pool;
diff --git a/contracts/libraries/helpers/StringLib.sol b/contracts/deployments/StringLib.sol
similarity index 89%
rename from contracts/libraries/helpers/StringLib.sol
rename to contracts/deployments/StringLib.sol
index fd4584a0..235213b8 100644
--- a/contracts/libraries/helpers/StringLib.sol
+++ b/contracts/deployments/StringLib.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
library StringLib {
function concat(string memory a, string memory b) internal pure returns (string memory) {
diff --git a/contracts/flashloan/base/FlashLoanReceiverBase.sol b/contracts/flashloan/base/FlashLoanReceiverBase.sol
index 01cfb3fc..27e82ee2 100644
--- a/contracts/flashloan/base/FlashLoanReceiverBase.sol
+++ b/contracts/flashloan/base/FlashLoanReceiverBase.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
diff --git a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol
index af9e384f..19618eac 100644
--- a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol
+++ b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
* @title IFlashLoanReceiver interface
diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol
index 83f1769c..c049bd77 100644
--- a/contracts/interfaces/IAaveIncentivesController.sol
+++ b/contracts/interfaces/IAaveIncentivesController.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
interface IAaveIncentivesController {
diff --git a/contracts/interfaces/IChainlinkAggregator.sol b/contracts/interfaces/IChainlinkAggregator.sol
index b25b688d..4b75788d 100644
--- a/contracts/interfaces/IChainlinkAggregator.sol
+++ b/contracts/interfaces/IChainlinkAggregator.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IChainlinkAggregator {
function latestAnswer() external view returns (int256);
diff --git a/contracts/interfaces/IExchangeAdapter.sol b/contracts/interfaces/IExchangeAdapter.sol
index 1bc0dcdf..59989cd0 100644
--- a/contracts/interfaces/IExchangeAdapter.sol
+++ b/contracts/interfaces/IExchangeAdapter.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
diff --git a/contracts/interfaces/ILendingPool.sol b/contracts/interfaces/ILendingPool.sol
index 17be5799..d445579a 100644
--- a/contracts/interfaces/ILendingPool.sol
+++ b/contracts/interfaces/ILendingPool.sol
@@ -1,20 +1,19 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
-
-import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
-import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';
-
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
+import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
+
+
interface ILendingPool {
/**
- * @dev emitted on deposit
- * @param reserve the address of the reserve
- * @param user the address of the user
- * @param amount the amount to be deposited
- * @param referral the referral number of the action
+ * @dev Emitted on deposit()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The address initiating the deposit
+ * @param onBehalfOf The beneficiary of the deposit, receiving the aTokens
+ * @param amount The amount deposited
+ * @param referral The referral code used
**/
event Deposit(
address indexed reserve,
@@ -25,22 +24,24 @@ interface ILendingPool {
);
/**
- * @dev emitted during a withdraw action.
- * @param reserve the address of the reserve
- * @param user the address of the user
- * @param to address that will receive the underlying
- * @param amount the amount to be withdrawn
+ * @dev Emitted on withdraw()
+ * @param reserve The address of the underlyng asset being withdrawn
+ * @param user The address initiating the withdrawal, owner of aTokens
+ * @param to Address that will receive the underlying
+ * @param amount The amount to be withdrawn
**/
event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);
/**
- * @dev emitted on borrow
- * @param reserve the address of the reserve
- * @param user the address of the user
- * @param amount the amount to be deposited
- * @param borrowRateMode the rate mode, can be either 1-stable or 2-variable
- * @param borrowRate the rate at which the user has borrowed
- * @param referral the referral number of the action
+ * @dev Emitted on borrow() and flashLoan() when debt needs to be opened
+ * @param reserve The address of the underlying asset being borrowed
+ * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just
+ * initiator of the transaction on flashLoan()
+ * @param onBehalfOf The address that will be getting the debt
+ * @param amount The amount borrowed out
+ * @param borrowRateMode The rate mode: 1 for Stable, 2 for Variable
+ * @param borrowRate The numeric rate at which the user has borrowed
+ * @param referral The referral code used
**/
event Borrow(
address indexed reserve,
@@ -51,12 +52,13 @@ interface ILendingPool {
uint256 borrowRate,
uint16 indexed referral
);
+
/**
- * @dev emitted on repay
- * @param reserve the address of the reserve
- * @param user the address of the user for which the repay has been executed
- * @param repayer the address of the user that has performed the repay action
- * @param amount the amount repaid
+ * @dev Emitted on repay()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The beneficiary of the repayment, getting his debt reduced
+ * @param repayer The address of the user initiating the repay(), providing the funds
+ * @param amount The amount repaid
**/
event Repay(
address indexed reserve,
@@ -64,41 +66,44 @@ interface ILendingPool {
address indexed repayer,
uint256 amount
);
+
/**
- * @dev emitted when a user performs a rate swap
- * @param reserve the address of the reserve
- * @param user the address of the user executing the swap
+ * @dev Emitted on swapBorrowRateMode()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The address of the user swapping his rate mode
+ * @param rateMode The rate mode that the user wants to swap to
**/
event Swap(address indexed reserve, address indexed user, uint256 rateMode);
/**
- * @dev emitted when a user enables a reserve as collateral
- * @param reserve the address of the reserve
- * @param user the address of the user
+ * @dev Emitted on setUserUseReserveAsCollateral()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The address of the user enabling the usage as collateral
**/
event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);
/**
- * @dev emitted when a user disables a reserve as collateral
- * @param reserve the address of the reserve
- * @param user the address of the user
+ * @dev Emitted on setUserUseReserveAsCollateral()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The address of the user enabling the usage as collateral
**/
event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
/**
- * @dev emitted when the stable rate of a user gets rebalanced
- * @param reserve the address of the reserve
- * @param user the address of the user for which the rebalance has been executed
+ * @dev Emitted on rebalanceStableBorrowRate()
+ * @param reserve The address of the underlying asset of the reserve
+ * @param user The address of the user for which the rebalance has been executed
**/
event RebalanceStableBorrowRate(address indexed reserve, address indexed user);
+
/**
- * @dev emitted when a flashloan is executed
- * @param target the address of the flashLoanReceiver
- * @param initiator the address initiating the flash loan
- * @param asset the address of the asset being flashborrowed
- * @param amount the amount requested
- * @param premium the total fee on the amount
- * @param referralCode the referral code of the caller
+ * @dev Emitted on flashLoan()
+ * @param target The address of the flash loan receiver contract
+ * @param initiator The address initiating the flash loan
+ * @param asset The address of the asset being flash borrowed
+ * @param amount The amount flash borrowed
+ * @param premium The fee flash borrowed
+ * @param referralCode The referral code used
**/
event FlashLoan(
address indexed target,
@@ -120,23 +125,23 @@ interface ILendingPool {
event Unpaused();
/**
- * @dev emitted when a borrower is liquidated. Thos evemt is emitted directly by the LendingPool
- * but it's declared here as the LendingPoolCollateralManager
- * is executed using a delegateCall().
+ * @dev Emitted when a borrower is liquidated. This event is emitted by the LendingPool via
+ * LendingPoolCollateral manager using a DELEGATECALL
* This allows to have the events in the generated ABI for LendingPool.
- * @param collateral the address of the collateral being liquidated
- * @param principal the address of the reserve
- * @param user the address of the user being liquidated
- * @param purchaseAmount the total amount liquidated
- * @param liquidatedCollateralAmount the amount of collateral being liquidated
- * @param liquidator the address of the liquidator
- * @param receiveAToken true if the liquidator wants to receive aTokens, false otherwise
+ * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
+ * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
+ * @param user The address of the borrower getting liquidated
+ * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
+ * @param liquidatedCollateralAmount The amount of collateral received by the liiquidator
+ * @param liquidator The address of the liquidator
+ * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants
+ * to receive the underlying collateral asset directly
**/
event LiquidationCall(
- address indexed collateral,
- address indexed principal,
+ address indexed collateralAsset,
+ address indexed debtAsset,
address indexed user,
- uint256 purchaseAmount,
+ uint256 debtToCover,
uint256 liquidatedCollateralAmount,
address liquidator,
bool receiveAToken
@@ -147,12 +152,12 @@ interface ILendingPool {
* in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal,
* the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it
* gets added to the LendingPool ABI
- * @param reserve the address of the reserve
- * @param liquidityRate the new liquidity rate
- * @param stableBorrowRate the new stable borrow rate
- * @param variableBorrowRate the new variable borrow rate
- * @param liquidityIndex the new liquidity index
- * @param variableBorrowIndex the new variable borrow index
+ * @param reserve The address of the underlying asset of the reserve
+ * @param liquidityRate The new liquidity rate
+ * @param stableBorrowRate The new stable borrow rate
+ * @param variableBorrowRate The new variable borrow rate
+ * @param liquidityIndex The new liquidity index
+ * @param variableBorrowIndex The new variable borrow index
**/
event ReserveDataUpdated(
address indexed reserve,
@@ -164,40 +169,56 @@ interface ILendingPool {
);
/**
- * @dev deposits The underlying asset into the reserve. A corresponding amount of the overlying asset (aTokens)
- * is minted.
- * @param reserve the address of the reserve
- * @param amount the amount to be deposited
- * @param referralCode integrators are assigned a referral code and can potentially receive rewards.
+ * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.
+ * - E.g. User deposits 100 USDC and gets in return 100 aUSDC
+ * @param asset The address of the underlying asset to deposit
+ * @param amount The amount to be deposited
+ * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user
+ * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens
+ * is a different wallet
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
**/
function deposit(
- address reserve,
+ address asset,
uint256 amount,
address onBehalfOf,
uint16 referralCode
) external;
/**
- * @dev withdraws the assets of user.
- * @param reserve the address of the reserve
- * @param amount the underlying amount to be redeemed
- * @param to address that will receive the underlying
+ * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned
+ * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC
+ * @param asset The address of the underlying asset to withdraw
+ * @param amount The underlying amount to be withdrawn
+ * - Send the value type(uint256).max in order to withdraw the whole aToken balance
+ * @param to Address that will receive the underlying, same as msg.sender if the user
+ * wants to receive it on his own wallet, or a different address if the beneficiary is a
+ * different wallet
**/
function withdraw(
- address reserve,
+ address asset,
uint256 amount,
address to
) external;
/**
- * @dev Allows users to borrow a specific amount of the reserve currency, provided that the borrower
- * already deposited enough collateral.
- * @param reserve the address of the reserve
- * @param amount the amount to be borrowed
- * @param interestRateMode the interest rate mode at which the user wants to borrow. Can be 0 (STABLE) or 1 (VARIABLE)
+ * @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower
+ * already deposited enough collateral, or he was given enough allowance by a credit delegator on the
+ * corresponding debt token (StableDebtToken or VariableDebtToken)
+ * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet
+ * and 100 stable/variable debt tokens, depending on the `interestRateMode`
+ * @param asset The address of the underlying asset to borrow
+ * @param amount The amount to be borrowed
+ * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
+ * @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself
+ * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator
+ * if he has been given credit delegation allowance
**/
function borrow(
- address reserve,
+ address asset,
uint256 amount,
uint256 interestRateMode,
uint16 referralCode,
@@ -205,73 +226,86 @@ interface ILendingPool {
) external;
/**
- * @notice repays a borrow on the specific reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).
- * @dev the target user is defined by onBehalfOf. If there is no repayment on behalf of another account,
- * onBehalfOf must be equal to msg.sender.
- * @param reserve the address of the reserve on which the user borrowed
- * @param amount the amount to repay, or uint256(-1) if the user wants to repay everything
- * @param onBehalfOf the address for which msg.sender is repaying.
+ * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned
+ * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address
+ * @param asset The address of the borrowed underlying asset previously borrowed
+ * @param amount The amount to repay
+ * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`
+ * @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
+ * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the
+ * user calling the function if he wants to reduce/remove his own debt, or the address of any other
+ * other borrower whose debt should be removed
**/
function repay(
- address reserve,
+ address asset,
uint256 amount,
uint256 rateMode,
address onBehalfOf
) external;
/**
- * @dev borrowers can user this function to swap between stable and variable borrow rate modes.
- * @param reserve the address of the reserve on which the user borrowed
- * @param rateMode the rate mode that the user wants to swap
+ * @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa
+ * @param asset The address of the underlying asset borrowed
+ * @param rateMode The rate mode that the user wants to swap to
**/
- function swapBorrowRateMode(address reserve, uint256 rateMode) external;
+ function swapBorrowRateMode(address asset, uint256 rateMode) external;
/**
- * @dev rebalances the stable interest rate of a user if current liquidity rate > user stable rate.
- * this is regulated by Aave to ensure that the protocol is not abused, and the user is paying a fair
- * rate. Anyone can call this function.
- * @param reserve the address of the reserve
- * @param user the address of the user to be rebalanced
+ * @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.
+ * - Users can be rebalanced if the following conditions are satisfied:
+ * 1. Usage ratio is above 95%
+ * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been
+ * borrowed at a stable rate and depositors are not earning enough
+ * @param asset The address of the underlying asset borrowed
+ * @param user The address of the user to be rebalanced
**/
- function rebalanceStableBorrowRate(address reserve, address user) external;
+ function rebalanceStableBorrowRate(address asset, address user) external;
/**
- * @dev allows depositors to enable or disable a specific deposit as collateral.
- * @param reserve the address of the reserve
- * @param useAsCollateral true if the user wants to user the deposit as collateral, false otherwise.
+ * @dev Allows depositors to enable/disable a specific deposited asset as collateral
+ * @param asset The address of the underlying asset deposited
+ * @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise
**/
- function setUserUseReserveAsCollateral(address reserve, bool useAsCollateral) external;
+ function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;
/**
- * @dev users can invoke this function to liquidate an undercollateralized position.
- * @param reserve the address of the collateral to liquidated
- * @param reserve the address of the principal reserve
- * @param user the address of the borrower
- * @param purchaseAmount the amount of principal that the liquidator wants to repay
- * @param receiveAToken true if the liquidators wants to receive the aTokens, false if
- * he wants to receive the underlying asset directly
+ * @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1
+ * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives
+ * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk
+ * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
+ * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
+ * @param user The address of the borrower getting liquidated
+ * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
+ * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants
+ * to receive the underlying collateral asset directly
**/
function liquidationCall(
- address collateral,
- address reserve,
+ address collateralAsset,
+ address debtAsset,
address user,
- uint256 purchaseAmount,
+ uint256 debtToCover,
bool receiveAToken
) external;
/**
- * @dev allows smartcontracts to access the liquidity of the pool within one transaction,
- * as long as the amount taken plus a fee is returned. NOTE There are security concerns for developers of flashloan receiver contracts
- * that must be kept into consideration. For further details please visit https://developers.aave.com
- * @param receiver The address of the contract receiving the funds. The receiver should implement the IFlashLoanReceiver interface.
- * @param assets the address of the principal reserve
- * @param amounts the amount requested for this flashloan
- * @param modes the flashloan borrow modes
- * @param params a bytes array to be sent to the flashloan executor
- * @param referralCode the referral code of the caller
+ * @dev Allows smartcontracts to access the liquidity of the pool within one transaction,
+ * as long as the amount taken plus a fee is returned.
+ * IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration.
+ * For further details please visit https://developers.aave.com
+ * @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface
+ * @param assets The addresses of the assets being flash-borrowed
+ * @param amounts The amounts amounts being flash-borrowed
+ * @param modes Types of the debt to open if the flash loan is not returned:
+ * 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver
+ * 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
+ * 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
+ * @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2
+ * @param params Variadic packed params to pass to the receiver as extra information
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
**/
function flashLoan(
- address receiver,
+ address receiverAddress,
address[] calldata assets,
uint256[] calldata amounts,
uint256[] calldata modes,
@@ -280,24 +314,28 @@ interface ILendingPool {
uint16 referralCode
) external;
+ /**
+ * @dev Returns the user account data across all the reserves
+ * @param user The address of the user
+ * @return totalCollateralETH the total collateral in ETH of the user
+ * @return totalDebtETH the total debt in ETH of the user
+ * @return availableBorrowsETH the borrowing power left of the user
+ * @return currentLiquidationThreshold the liquidation threshold of the user
+ * @return ltv the loan to value of the user
+ * @return healthFactor the current health factor of the user
+ **/
function getUserAccountData(address user)
external
view
returns (
uint256 totalCollateralETH,
- uint256 totalBorrowsETH,
+ uint256 totalDebtETH,
uint256 availableBorrowsETH,
uint256 currentLiquidationThreshold,
uint256 ltv,
uint256 healthFactor
);
- /**
- * @dev initializes a reserve
- * @param reserve the address of the reserve
- * @param aTokenAddress the address of the overlying aToken contract
- * @param interestRateStrategyAddress the address of the interest rate strategy contract
- **/
function initReserve(
address reserve,
address aTokenAddress,
@@ -306,29 +344,51 @@ interface ILendingPool {
address interestRateStrategyAddress
) external;
- /**
- * @dev updates the address of the interest rate strategy contract
- * @param reserve the address of the reserve
- * @param rateStrategyAddress the address of the interest rate strategy contract
- **/
-
function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress)
external;
function setConfiguration(address reserve, uint256 configuration) external;
- function getConfiguration(address reserve)
+ /**
+ * @dev Returns the configuration of the reserve
+ * @param asset The address of the underlying asset of the reserve
+ * @return The configuration of the reserve
+ **/
+ function getConfiguration(address asset)
external
view
- returns (ReserveConfiguration.Map memory);
+ returns (DataTypes.ReserveConfigurationMap memory);
- function getUserConfiguration(address user) external view returns (UserConfiguration.Map memory);
+ /**
+ * @dev Returns the configuration of the user across all the reserves
+ * @param user The user address
+ * @return The configuration of the user
+ **/
+ function getUserConfiguration(address user)
+ external
+ view
+ returns (DataTypes.UserConfigurationMap memory);
- function getReserveNormalizedIncome(address reserve) external view returns (uint256);
+ /**
+ * @dev Returns the normalized income normalized income of the reserve
+ * @param asset The address of the underlying asset of the reserve
+ * @return The reserve's normalized income
+ */
+ function getReserveNormalizedIncome(address asset) external view returns (uint256);
- function getReserveNormalizedVariableDebt(address reserve) external view returns (uint256);
+ /**
+ * @dev Returns the normalized variable debt per unit of asset
+ * @param asset The address of the underlying asset of the reserve
+ * @return The reserve normalized variable debt
+ */
+ function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);
- function getReserveData(address asset) external view returns (ReserveLogic.ReserveData memory);
+ /**
+ * @dev Returns the state and configuration of the reserve
+ * @param asset The address of the underlying asset of the reserve
+ * @return The state of the reserve
+ **/
+ function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);
function finalizeTransfer(
address asset,
@@ -343,14 +403,7 @@ interface ILendingPool {
function getAddressesProvider() external view returns (ILendingPoolAddressesProvider);
- /**
- * @dev Set the _pause state
- * @param val the boolean value to set the current pause state of LendingPool
- */
function setPause(bool val) external;
- /**
- * @dev Returns if the LendingPool is paused
- */
function paused() external view returns (bool);
}
diff --git a/contracts/interfaces/ILendingPoolAddressesProvider.sol b/contracts/interfaces/ILendingPoolAddressesProvider.sol
index c1a7ab78..e54973c1 100644
--- a/contracts/interfaces/ILendingPoolAddressesProvider.sol
+++ b/contracts/interfaces/ILendingPoolAddressesProvider.sol
@@ -1,32 +1,27 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
-@title ILendingPoolAddressesProvider interface
-@notice provides the interface to fetch the Aave protocol address
- */
-
+ * @title LendingPoolAddressesProvider contract
+ * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
+ * - Acting also as factory of proxies and admin of those, so with right to change its implementations
+ * - Owned by the Aave Governance
+ * @author Aave
+ **/
interface ILendingPoolAddressesProvider {
event LendingPoolUpdated(address indexed newAddress);
event ConfigurationAdminUpdated(address indexed newAddress);
event EmergencyAdminUpdated(address indexed newAddress);
event LendingPoolConfiguratorUpdated(address indexed newAddress);
event LendingPoolCollateralManagerUpdated(address indexed newAddress);
- event EthereumAddressUpdated(address indexed newAddress);
event PriceOracleUpdated(address indexed newAddress);
event LendingRateOracleUpdated(address indexed newAddress);
event ProxyCreated(bytes32 id, address indexed newAddress);
event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);
- function setAddress(
- bytes32 id,
- address newAddress
- ) external;
+ function setAddress(bytes32 id, address newAddress) external;
- function setAddressAsProxy(
- bytes32 id,
- address impl
- ) external;
+ function setAddressAsProxy(bytes32 id, address impl) external;
function getAddress(bytes32 id) external view returns (address);
diff --git a/contracts/interfaces/ILendingPoolAddressesProviderRegistry.sol b/contracts/interfaces/ILendingPoolAddressesProviderRegistry.sol
index 87c0c651..89f0c61e 100644
--- a/contracts/interfaces/ILendingPoolAddressesProviderRegistry.sol
+++ b/contracts/interfaces/ILendingPoolAddressesProviderRegistry.sol
@@ -1,9 +1,13 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
- * @title ILendingPoolAddressesProvider interface
- * @notice provides the interface to fetch the LendingPoolCore address
+ * @title LendingPoolAddressesProviderRegistry contract
+ * @dev Main registry of LendingPoolAddressesProvider of multiple Aave protocol's markets
+ * - Used for indexing purposes of Aave protocol's markets
+ * - The id assigned to a LendingPoolAddressesProvider refers to the market it is connected with,
+ * for example with `0` for the Aave main market and `1` for the next created
+ * @author Aave
**/
interface ILendingPoolAddressesProviderRegistry {
event AddressesProviderRegistered(address indexed newAddress);
@@ -11,8 +15,6 @@ interface ILendingPoolAddressesProviderRegistry {
function getAddressesProvidersList() external view returns (address[] memory);
- function isAddressesProviderRegistered(address provider) external view returns (uint256);
-
function getAddressesProviderIdByAddress(address addressesProvider)
external
view
diff --git a/contracts/interfaces/ILendingPoolCollateralManager.sol b/contracts/interfaces/ILendingPoolCollateralManager.sol
new file mode 100644
index 00000000..785fb68b
--- /dev/null
+++ b/contracts/interfaces/ILendingPoolCollateralManager.sol
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity 0.6.12;
+
+/**
+ * @title ILendingPoolCollateralManager interface
+ * @author Aave
+ * @notice Defines the actions involving management of collateral in the protocol.
+ **/
+interface ILendingPoolCollateralManager {
+ /**
+ * @dev emitted when a borrower is liquidated
+ * @param collateral the address of the collateral being liquidated
+ * @param principal the address of the reserve
+ * @param user the address of the user being liquidated
+ * @param debtToCover the total amount liquidated
+ * @param liquidatedCollateralAmount the amount of collateral being liquidated
+ * @param liquidator the address of the liquidator
+ * @param receiveAToken true if the liquidator wants to receive aTokens, false otherwise
+ **/
+ event LiquidationCall(
+ address indexed collateral,
+ address indexed principal,
+ address indexed user,
+ uint256 debtToCover,
+ uint256 liquidatedCollateralAmount,
+ address liquidator,
+ bool receiveAToken
+ );
+
+ /**
+ * @dev emitted when a user disables a reserve as collateral
+ * @param reserve the address of the reserve
+ * @param user the address of the user
+ **/
+ event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
+
+ /**
+ * @dev users can invoke this function to liquidate an undercollateralized position.
+ * @param collateral the address of the collateral to liquidated
+ * @param principal the address of the principal reserve
+ * @param user the address of the borrower
+ * @param debtToCover the amount of principal that the liquidator wants to repay
+ * @param receiveAToken true if the liquidators wants to receive the aTokens, false if
+ * he wants to receive the underlying asset directly
+ **/
+ function liquidationCall(
+ address collateral,
+ address principal,
+ address user,
+ uint256 debtToCover,
+ bool receiveAToken
+ ) external returns (uint256, string memory);
+}
diff --git a/contracts/interfaces/ILendingRateOracle.sol b/contracts/interfaces/ILendingRateOracle.sol
index a3fd1407..3d9dfabf 100644
--- a/contracts/interfaces/ILendingRateOracle.sol
+++ b/contracts/interfaces/ILendingRateOracle.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
* @title ILendingRateOracle interface
diff --git a/contracts/interfaces/IPriceOracle.sol b/contracts/interfaces/IPriceOracle.sol
index a6452d78..4eea4a9c 100644
--- a/contracts/interfaces/IPriceOracle.sol
+++ b/contracts/interfaces/IPriceOracle.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/************
@title IPriceOracle interface
diff --git a/contracts/interfaces/IPriceOracleGetter.sol b/contracts/interfaces/IPriceOracleGetter.sol
index fdb64279..d6f37035 100644
--- a/contracts/interfaces/IPriceOracleGetter.sol
+++ b/contracts/interfaces/IPriceOracleGetter.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
* @title IPriceOracleGetter interface
diff --git a/contracts/interfaces/IReserveInterestRateStrategy.sol b/contracts/interfaces/IReserveInterestRateStrategy.sol
index e04edbe5..430145e3 100644
--- a/contracts/interfaces/IReserveInterestRateStrategy.sol
+++ b/contracts/interfaces/IReserveInterestRateStrategy.sol
@@ -1,27 +1,16 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
-@title IReserveInterestRateStrategyInterface interface
-@notice Interface for the calculation of the interest rates.
-*/
-
+ * @title IReserveInterestRateStrategyInterface interface
+ * @dev Interface for the calculation of the interest rates
+ * @author Aave
+ */
interface IReserveInterestRateStrategy {
- /**
- * @dev returns the base variable borrow rate, in rays
- */
function baseVariableBorrowRate() external view returns (uint256);
- /**
- * @dev returns the maximum variable borrow rate
- */
function getMaxVariableBorrowRate() external view returns (uint256);
- /**
- * @dev calculates the liquidity, stable, and variable rates depending on the current utilization rate
- * and the base parameters
- *
- */
function calculateInterestRates(
address reserve,
uint256 utilizationRate,
diff --git a/contracts/interfaces/IUniswapExchange.sol b/contracts/interfaces/IUniswapExchange.sol
index 8a7927fd..cdac92d1 100644
--- a/contracts/interfaces/IUniswapExchange.sol
+++ b/contracts/interfaces/IUniswapExchange.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IUniswapExchange {
event TokenPurchase(
diff --git a/contracts/lendingpool/LendingPoolCollateralManager.sol b/contracts/lendingpool/LendingPoolCollateralManager.sol
deleted file mode 100644
index bf207110..00000000
--- a/contracts/lendingpool/LendingPoolCollateralManager.sol
+++ /dev/null
@@ -1,340 +0,0 @@
-// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
-
-import {SafeMath} from '../dependencies/openzeppelin/contracts//SafeMath.sol';
-import {IERC20} from '../dependencies/openzeppelin/contracts//IERC20.sol';
-import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
-import {IAToken} from '../tokenization/interfaces/IAToken.sol';
-import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
-import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
-import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';
-import {GenericLogic} from '../libraries/logic/GenericLogic.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
-import {Helpers} from '../libraries/helpers/Helpers.sol';
-import {WadRayMath} from '../libraries/math/WadRayMath.sol';
-import {PercentageMath} from '../libraries/math/PercentageMath.sol';
-import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
-import {Errors} from '../libraries/helpers/Errors.sol';
-import {ValidationLogic} from '../libraries/logic/ValidationLogic.sol';
-import {LendingPoolStorage} from './LendingPoolStorage.sol';
-
-/**
- * @title LendingPoolCollateralManager contract
- * @author Aave
- * @notice Implements actions involving management of collateral in the protocol.
- * @notice this contract will be ran always through delegatecall
- * @dev LendingPoolCollateralManager inherits VersionedInitializable from OpenZeppelin to have the same storage layout as LendingPool
- **/
-contract LendingPoolCollateralManager is VersionedInitializable, LendingPoolStorage {
- using SafeERC20 for IERC20;
- using SafeMath for uint256;
- using WadRayMath for uint256;
- using PercentageMath for uint256;
-
- // IMPORTANT The storage layout of the LendingPool is reproduced here because this contract
- // is gonna be used through DELEGATECALL
-
- uint256 internal constant LIQUIDATION_CLOSE_FACTOR_PERCENT = 5000;
-
- /**
- * @dev emitted when a borrower is liquidated
- * @param collateral the address of the collateral being liquidated
- * @param principal the address of the reserve
- * @param user the address of the user being liquidated
- * @param purchaseAmount the total amount liquidated
- * @param liquidatedCollateralAmount the amount of collateral being liquidated
- * @param liquidator the address of the liquidator
- * @param receiveAToken true if the liquidator wants to receive aTokens, false otherwise
- **/
- event LiquidationCall(
- address indexed collateral,
- address indexed principal,
- address indexed user,
- uint256 purchaseAmount,
- uint256 liquidatedCollateralAmount,
- address liquidator,
- bool receiveAToken
- );
-
- /**
- * @dev emitted when a user disables a reserve as collateral
- * @param reserve the address of the reserve
- * @param user the address of the user
- **/
- event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
-
- struct LiquidationCallLocalVars {
- uint256 userCollateralBalance;
- uint256 userStableDebt;
- uint256 userVariableDebt;
- uint256 maxPrincipalAmountToLiquidate;
- uint256 actualAmountToLiquidate;
- uint256 liquidationRatio;
- uint256 maxAmountCollateralToLiquidate;
- uint256 userStableRate;
- uint256 maxCollateralToLiquidate;
- uint256 principalAmountNeeded;
- uint256 healthFactor;
- IAToken collateralAtoken;
- bool isCollateralEnabled;
- ReserveLogic.InterestRateMode borrowRateMode;
- address principalAToken;
- uint256 errorCode;
- string errorMsg;
- }
-
- struct AvailableCollateralToLiquidateLocalVars {
- uint256 userCompoundedBorrowBalance;
- uint256 liquidationBonus;
- uint256 collateralPrice;
- uint256 principalCurrencyPrice;
- uint256 maxAmountCollateralToLiquidate;
- uint256 principalDecimals;
- uint256 collateralDecimals;
- }
-
- /**
- * @dev as the contract extends the VersionedInitializable contract to match the state
- * of the LendingPool contract, the getRevision() function is needed.
- */
- function getRevision() internal override pure returns (uint256) {
- return 0;
- }
-
- /**
- * @dev users can invoke this function to liquidate an undercollateralized position.
- * @param collateral the address of the collateral to liquidated
- * @param principal the address of the principal reserve
- * @param user the address of the borrower
- * @param purchaseAmount the amount of principal that the liquidator wants to repay
- * @param receiveAToken true if the liquidators wants to receive the aTokens, false if
- * he wants to receive the underlying asset directly
- **/
- function liquidationCall(
- address collateral,
- address principal,
- address user,
- uint256 purchaseAmount,
- bool receiveAToken
- ) external returns (uint256, string memory) {
- ReserveLogic.ReserveData storage collateralReserve = _reserves[collateral];
- ReserveLogic.ReserveData storage principalReserve = _reserves[principal];
- UserConfiguration.Map storage userConfig = _usersConfig[user];
-
- LiquidationCallLocalVars memory vars;
-
- (, , , , vars.healthFactor) = GenericLogic.calculateUserAccountData(
- user,
- _reserves,
- userConfig,
- _reservesList,
- _reservesCount,
- _addressesProvider.getPriceOracle()
- );
-
- //if the user hasn't borrowed the specific currency defined by asset, it cannot be liquidated
- (vars.userStableDebt, vars.userVariableDebt) = Helpers.getUserCurrentDebt(
- user,
- principalReserve
- );
-
- (vars.errorCode, vars.errorMsg) = ValidationLogic.validateLiquidationCall(
- collateralReserve,
- principalReserve,
- userConfig,
- vars.healthFactor,
- vars.userStableDebt,
- vars.userVariableDebt
- );
-
- if (Errors.CollateralManagerErrors(vars.errorCode) != Errors.CollateralManagerErrors.NO_ERROR) {
- return (vars.errorCode, vars.errorMsg);
- }
-
- vars.collateralAtoken = IAToken(collateralReserve.aTokenAddress);
-
- vars.userCollateralBalance = vars.collateralAtoken.balanceOf(user);
-
- vars.maxPrincipalAmountToLiquidate = vars.userStableDebt.add(vars.userVariableDebt).percentMul(
- LIQUIDATION_CLOSE_FACTOR_PERCENT
- );
-
- vars.actualAmountToLiquidate = purchaseAmount > vars.maxPrincipalAmountToLiquidate
- ? vars.maxPrincipalAmountToLiquidate
- : purchaseAmount;
-
- (
- vars.maxCollateralToLiquidate,
- vars.principalAmountNeeded
- ) = _calculateAvailableCollateralToLiquidate(
- collateralReserve,
- principalReserve,
- collateral,
- principal,
- vars.actualAmountToLiquidate,
- vars.userCollateralBalance
- );
-
- //if principalAmountNeeded < vars.ActualAmountToLiquidate, there isn't enough
- //of collateral to cover the actual amount that is being liquidated, hence we liquidate
- //a smaller amount
-
- if (vars.principalAmountNeeded < vars.actualAmountToLiquidate) {
- vars.actualAmountToLiquidate = vars.principalAmountNeeded;
- }
-
- //if liquidator reclaims the underlying asset, we make sure there is enough available collateral in the reserve
- if (!receiveAToken) {
- uint256 currentAvailableCollateral = IERC20(collateral).balanceOf(
- address(vars.collateralAtoken)
- );
- if (currentAvailableCollateral < vars.maxCollateralToLiquidate) {
- return (
- uint256(Errors.CollateralManagerErrors.NOT_ENOUGH_LIQUIDITY),
- Errors.LPCM_NOT_ENOUGH_LIQUIDITY_TO_LIQUIDATE
- );
- }
- }
-
- //update the principal reserve
- principalReserve.updateState();
-
- if (vars.userVariableDebt >= vars.actualAmountToLiquidate) {
- IVariableDebtToken(principalReserve.variableDebtTokenAddress).burn(
- user,
- vars.actualAmountToLiquidate,
- principalReserve.variableBorrowIndex
- );
- } else {
- //if the user does not have variable debt, no need to try to burn variable
- //debt tokens
- if (vars.userVariableDebt > 0) {
- IVariableDebtToken(principalReserve.variableDebtTokenAddress).burn(
- user,
- vars.userVariableDebt,
- principalReserve.variableBorrowIndex
- );
- }
- IStableDebtToken(principalReserve.stableDebtTokenAddress).burn(
- user,
- vars.actualAmountToLiquidate.sub(vars.userVariableDebt)
- );
- }
-
- principalReserve.updateInterestRates(
- principal,
- principalReserve.aTokenAddress,
- vars.actualAmountToLiquidate,
- 0
- );
-
- //if liquidator reclaims the aToken, he receives the equivalent atoken amount
- if (receiveAToken) {
- vars.collateralAtoken.transferOnLiquidation(user, msg.sender, vars.maxCollateralToLiquidate);
- } else {
- //otherwise receives the underlying asset
-
- //updating collateral reserve
- collateralReserve.updateState();
- collateralReserve.updateInterestRates(
- collateral,
- address(vars.collateralAtoken),
- 0,
- vars.maxCollateralToLiquidate
- );
-
- //burn the equivalent amount of atoken
- vars.collateralAtoken.burn(
- user,
- msg.sender,
- vars.maxCollateralToLiquidate,
- collateralReserve.liquidityIndex
- );
- }
-
- //if the collateral being liquidated is equal to the user balance,
- //we set the currency as not being used as collateral anymore
-
- if (vars.maxCollateralToLiquidate == vars.userCollateralBalance) {
- userConfig.setUsingAsCollateral(collateralReserve.id, false);
- emit ReserveUsedAsCollateralDisabled(collateral, user);
- }
-
- //transfers the principal currency to the aToken
- IERC20(principal).safeTransferFrom(
- msg.sender,
- principalReserve.aTokenAddress,
- vars.actualAmountToLiquidate
- );
-
- emit LiquidationCall(
- collateral,
- principal,
- user,
- vars.actualAmountToLiquidate,
- vars.maxCollateralToLiquidate,
- msg.sender,
- receiveAToken
- );
-
- return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.LPCM_NO_ERRORS);
- }
-
- /**
- * @dev calculates how much of a specific collateral can be liquidated, given
- * a certain amount of principal currency. This function needs to be called after
- * all the checks to validate the liquidation have been performed, otherwise it might fail.
- * @param collateralAddress the collateral to be liquidated
- * @param principalAddress the principal currency to be liquidated
- * @param purchaseAmount the amount of principal being liquidated
- * @param userCollateralBalance the collatera balance for the specific collateral asset of the user being liquidated
- * @return collateralAmount the maximum amount that is possible to liquidated given all the liquidation constraints (user balance, close factor)
- * @return principalAmountNeeded the purchase amount
- **/
- function _calculateAvailableCollateralToLiquidate(
- ReserveLogic.ReserveData storage collateralReserve,
- ReserveLogic.ReserveData storage principalReserve,
- address collateralAddress,
- address principalAddress,
- uint256 purchaseAmount,
- uint256 userCollateralBalance
- ) internal view returns (uint256, uint256) {
- uint256 collateralAmount = 0;
- uint256 principalAmountNeeded = 0;
- IPriceOracleGetter oracle = IPriceOracleGetter(_addressesProvider.getPriceOracle());
-
- AvailableCollateralToLiquidateLocalVars memory vars;
-
- vars.collateralPrice = oracle.getAssetPrice(collateralAddress);
- vars.principalCurrencyPrice = oracle.getAssetPrice(principalAddress);
-
- (, , vars.liquidationBonus, vars.collateralDecimals, ) = collateralReserve
- .configuration
- .getParams();
- vars.principalDecimals = principalReserve.configuration.getDecimals();
-
- //this is the maximum possible amount of the selected collateral that can be liquidated, given the
- //max amount of principal currency that is available for liquidation.
- vars.maxAmountCollateralToLiquidate = vars
- .principalCurrencyPrice
- .mul(purchaseAmount)
- .mul(10**vars.collateralDecimals)
- .percentMul(vars.liquidationBonus)
- .div(vars.collateralPrice.mul(10**vars.principalDecimals));
-
- if (vars.maxAmountCollateralToLiquidate > userCollateralBalance) {
- collateralAmount = userCollateralBalance;
- principalAmountNeeded = vars
- .collateralPrice
- .mul(collateralAmount)
- .mul(10**vars.principalDecimals)
- .div(vars.principalCurrencyPrice.mul(10**vars.collateralDecimals))
- .percentDiv(vars.liquidationBonus);
- } else {
- collateralAmount = vars.maxAmountCollateralToLiquidate;
- principalAmountNeeded = purchaseAmount;
- }
- return (collateralAmount, principalAmountNeeded);
- }
-}
diff --git a/contracts/libraries/helpers/Helpers.sol b/contracts/libraries/helpers/Helpers.sol
deleted file mode 100644
index ba8be90c..00000000
--- a/contracts/libraries/helpers/Helpers.sol
+++ /dev/null
@@ -1,40 +0,0 @@
-// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
-
-import {DebtTokenBase} from '../../tokenization/base/DebtTokenBase.sol';
-import {ReserveLogic} from '../logic/ReserveLogic.sol';
-
-/**
- * @title Helpers library
- * @author Aave
- * @notice Implements calculation helpers.
- */
-library Helpers {
- /**
- * @dev fetches the user current stable and variable debt balances
- * @param user the user
- * @param reserve the reserve object
- * @return the stable and variable debt balance
- **/
- function getUserCurrentDebt(address user, ReserveLogic.ReserveData storage reserve)
- internal
- view
- returns (uint256, uint256)
- {
- return (
- DebtTokenBase(reserve.stableDebtTokenAddress).balanceOf(user),
- DebtTokenBase(reserve.variableDebtTokenAddress).balanceOf(user)
- );
- }
-
- function getUserCurrentDebtMemory(address user, ReserveLogic.ReserveData memory reserve)
- internal
- view
- returns (uint256, uint256)
- {
- return (
- DebtTokenBase(reserve.stableDebtTokenAddress).balanceOf(user),
- DebtTokenBase(reserve.variableDebtTokenAddress).balanceOf(user)
- );
- }
-}
diff --git a/contracts/misc/AaveOracle.sol b/contracts/misc/AaveOracle.sol
index 91168d13..b34d16b8 100644
--- a/contracts/misc/AaveOracle.sol
+++ b/contracts/misc/AaveOracle.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
diff --git a/contracts/misc/AaveProtocolDataProvider.sol b/contracts/misc/AaveProtocolDataProvider.sol
index ca8e8d85..d9b476af 100644
--- a/contracts/misc/AaveProtocolDataProvider.sol
+++ b/contracts/misc/AaveProtocolDataProvider.sol
@@ -1,20 +1,19 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
-import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
-import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
-import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
-import 'hardhat/console.sol';
+import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';
+import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';
+import {IStableDebtToken} from '../protocol/tokenization/interfaces/IStableDebtToken.sol';
+import {IVariableDebtToken} from '../protocol/tokenization/interfaces/IVariableDebtToken.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
contract AaveProtocolDataProvider {
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;
address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
@@ -56,7 +55,7 @@ contract AaveProtocolDataProvider {
address[] memory reserves = pool.getReservesList();
TokenData[] memory aTokens = new TokenData[](reserves.length);
for (uint256 i = 0; i < reserves.length; i++) {
- ReserveLogic.ReserveData memory reserveData = pool.getReserveData(reserves[i]);
+ DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);
aTokens[i] = TokenData({
symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),
tokenAddress: reserveData.aTokenAddress
@@ -81,10 +80,8 @@ contract AaveProtocolDataProvider {
bool isFrozen
)
{
- ReserveConfiguration.Map memory configuration = ILendingPool(
- ADDRESSES_PROVIDER.getLendingPool()
- )
- .getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory configuration =
+ ILendingPool(ADDRESSES_PROVIDER.getLendingPool()).getConfiguration(asset);
(ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor) = configuration
.getParamsMemory();
@@ -111,8 +108,8 @@ contract AaveProtocolDataProvider {
uint40 lastUpdateTimestamp
)
{
- ReserveLogic.ReserveData memory reserve = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
- .getReserveData(asset);
+ DataTypes.ReserveData memory reserve =
+ ILendingPool(ADDRESSES_PROVIDER.getLendingPool()).getReserveData(asset);
return (
IERC20Detailed(asset).balanceOf(reserve.aTokenAddress),
@@ -143,11 +140,11 @@ contract AaveProtocolDataProvider {
bool usageAsCollateralEnabled
)
{
- ReserveLogic.ReserveData memory reserve = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
- .getReserveData(asset);
+ DataTypes.ReserveData memory reserve =
+ ILendingPool(ADDRESSES_PROVIDER.getLendingPool()).getReserveData(asset);
- UserConfiguration.Map memory userConfig = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
- .getUserConfiguration(user);
+ DataTypes.UserConfigurationMap memory userConfig =
+ ILendingPool(ADDRESSES_PROVIDER.getLendingPool()).getUserConfiguration(user);
currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);
currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);
@@ -171,8 +168,8 @@ contract AaveProtocolDataProvider {
address variableDebtTokenAddress
)
{
- ReserveLogic.ReserveData memory reserve = ILendingPool(ADDRESSES_PROVIDER.getLendingPool())
- .getReserveData(asset);
+ DataTypes.ReserveData memory reserve =
+ ILendingPool(ADDRESSES_PROVIDER.getLendingPool()).getReserveData(asset);
return (
reserve.aTokenAddress,
diff --git a/contracts/misc/UiPoolDataProvider.sol b/contracts/misc/UiPoolDataProvider.sol
index ff731fff..f0e2c2d5 100644
--- a/contracts/misc/UiPoolDataProvider.sol
+++ b/contracts/misc/UiPoolDataProvider.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
@@ -7,22 +7,22 @@ import {IUiPoolDataProvider} from './interfaces/IUiPoolDataProvider.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';
-import {IAToken} from '../tokenization/interfaces/IAToken.sol';
-import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
-import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
+import {IAToken} from '../protocol/tokenization/interfaces/IAToken.sol';
+import {IVariableDebtToken} from '../protocol/tokenization/interfaces/IVariableDebtToken.sol';
+import {IStableDebtToken} from '../protocol/tokenization/interfaces/IStableDebtToken.sol';
-import {WadRayMath} from '../libraries/math/WadRayMath.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
-import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
+import {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';
+import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';
+import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';
import {
DefaultReserveInterestRateStrategy
-} from '../lendingpool/DefaultReserveInterestRateStrategy.sol';
+} from '../protocol/lendingpool/DefaultReserveInterestRateStrategy.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
contract UiPoolDataProvider is IUiPoolDataProvider {
using WadRayMath for uint256;
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
address public constant MOCK_USD_ADDRESS = 0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96;
@@ -46,8 +46,8 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
function getReservesData(ILendingPoolAddressesProvider provider, address user)
external
- override
view
+ override
returns (
AggregatedReserveData[] memory,
UserReserveData[] memory,
@@ -57,21 +57,19 @@ contract UiPoolDataProvider is IUiPoolDataProvider {
ILendingPool lendingPool = ILendingPool(provider.getLendingPool());
IPriceOracleGetter oracle = IPriceOracleGetter(provider.getPriceOracle());
address[] memory reserves = lendingPool.getReservesList();
- UserConfiguration.Map memory userConfig = lendingPool.getUserConfiguration(user);
+ DataTypes.UserConfigurationMap memory userConfig = lendingPool.getUserConfiguration(user);
AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length);
- UserReserveData[] memory userReservesData = new UserReserveData[](
- user != address(0) ? reserves.length : 0
- );
+ UserReserveData[] memory userReservesData =
+ new UserReserveData[](user != address(0) ? reserves.length : 0);
for (uint256 i = 0; i < reserves.length; i++) {
AggregatedReserveData memory reserveData = reservesData[i];
reserveData.underlyingAsset = reserves[i];
// reserve current state
- ReserveLogic.ReserveData memory baseData = lendingPool.getReserveData(
- reserveData.underlyingAsset
- );
+ DataTypes.ReserveData memory baseData =
+ lendingPool.getReserveData(reserveData.underlyingAsset);
reserveData.liquidityIndex = baseData.liquidityIndex;
reserveData.variableBorrowIndex = baseData.variableBorrowIndex;
reserveData.liquidityRate = baseData.currentLiquidityRate;
diff --git a/contracts/misc/WETHGateway.sol b/contracts/misc/WETHGateway.sol
index a976bb0e..ee8261b0 100644
--- a/contracts/misc/WETHGateway.sol
+++ b/contracts/misc/WETHGateway.sol
@@ -1,21 +1,21 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {IWETH} from './interfaces/IWETH.sol';
import {IWETHGateway} from './interfaces/IWETHGateway.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
-import {IAToken} from '../tokenization/interfaces/IAToken.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
-import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
-import {Helpers} from '../libraries/helpers/Helpers.sol';
+import {IAToken} from '../protocol/tokenization/interfaces/IAToken.sol';
+import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';
+import {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';
+import {Helpers} from '../protocol/libraries/helpers/Helpers.sol';
import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
contract WETHGateway is IWETHGateway, Ownable {
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
IWETH internal immutable WETH;
ILendingPool internal immutable POOL;
@@ -40,7 +40,7 @@ contract WETHGateway is IWETHGateway, Ownable {
* @param onBehalfOf address of the user who will receive the aTokens representing the deposit
* @param referralCode integrators are assigned a referral code and can potentially receive rewards.
**/
- function depositETH(address onBehalfOf, uint16 referralCode) external override payable {
+ function depositETH(address onBehalfOf, uint16 referralCode) external payable override {
WETH.deposit{value: msg.value}();
POOL.deposit(address(WETH), msg.value, onBehalfOf, referralCode);
}
@@ -74,16 +74,14 @@ contract WETHGateway is IWETHGateway, Ownable {
uint256 amount,
uint256 rateMode,
address onBehalfOf
- ) external override payable {
- (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebtMemory(
- onBehalfOf,
- POOL.getReserveData(address(WETH))
- );
+ ) external payable override {
+ (uint256 stableDebt, uint256 variableDebt) =
+ Helpers.getUserCurrentDebtMemory(onBehalfOf, POOL.getReserveData(address(WETH)));
- uint256 paybackAmount = ReserveLogic.InterestRateMode(rateMode) ==
- ReserveLogic.InterestRateMode.STABLE
- ? stableDebt
- : variableDebt;
+ uint256 paybackAmount =
+ DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE
+ ? stableDebt
+ : variableDebt;
if (amount < paybackAmount) {
paybackAmount = amount;
diff --git a/contracts/misc/WalletBalanceProvider.sol b/contracts/misc/WalletBalanceProvider.sol
index c3f5dd7f..cd4a81ce 100644
--- a/contracts/misc/WalletBalanceProvider.sol
+++ b/contracts/misc/WalletBalanceProvider.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
@@ -9,7 +9,8 @@ import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
import {ILendingPool} from '../interfaces/ILendingPool.sol';
import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
-import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
+import {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
/**
* @title WalletBalanceProvider contract
@@ -22,15 +23,10 @@ contract WalletBalanceProvider {
using Address for address payable;
using Address for address;
using SafeERC20 for IERC20;
- using ReserveConfiguration for ReserveConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
- ILendingPoolAddressesProvider internal immutable _provider;
address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
- constructor(ILendingPoolAddressesProvider provider) public {
- _provider = provider;
- }
-
/**
@dev Fallback function, don't accept any ETH
**/
@@ -80,12 +76,12 @@ contract WalletBalanceProvider {
/**
@dev provides balances of user wallet for all reserves available on the pool
*/
- function getUserWalletBalances(address user)
+ function getUserWalletBalances(address provider, address user)
external
view
returns (address[] memory, uint256[] memory)
{
- ILendingPool pool = ILendingPool(_provider.getLendingPool());
+ ILendingPool pool = ILendingPool(ILendingPoolAddressesProvider(provider).getLendingPool());
address[] memory reserves = pool.getReservesList();
address[] memory reservesWithEth = new address[](reserves.length + 1);
@@ -97,7 +93,7 @@ contract WalletBalanceProvider {
uint256[] memory balances = new uint256[](reservesWithEth.length);
for (uint256 j = 0; j < reserves.length; j++) {
- ReserveConfiguration.Map memory configuration = pool.getConfiguration(reservesWithEth[j]);
+ DataTypes.ReserveConfigurationMap memory configuration = pool.getConfiguration(reservesWithEth[j]);
(bool isActive, , , ) = configuration.getFlagsMemory();
diff --git a/contracts/misc/interfaces/IERC20DetailedBytes.sol b/contracts/misc/interfaces/IERC20DetailedBytes.sol
index 05fe0ab9..de91e288 100644
--- a/contracts/misc/interfaces/IERC20DetailedBytes.sol
+++ b/contracts/misc/interfaces/IERC20DetailedBytes.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
contract IERC20DetailedBytes {
bytes32 public name;
diff --git a/contracts/misc/interfaces/IUiPoolDataProvider.sol b/contracts/misc/interfaces/IUiPoolDataProvider.sol
index d1ca0269..81a553e8 100644
--- a/contracts/misc/interfaces/IUiPoolDataProvider.sol
+++ b/contracts/misc/interfaces/IUiPoolDataProvider.sol
@@ -1,9 +1,8 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
-import {ReserveLogic} from '../../libraries/logic/ReserveLogic.sol';
interface IUiPoolDataProvider {
struct AggregatedReserveData {
diff --git a/contracts/misc/interfaces/IUniswapV2Router01.sol b/contracts/misc/interfaces/IUniswapV2Router01.sol
index 6acc52be..69c23550 100644
--- a/contracts/misc/interfaces/IUniswapV2Router01.sol
+++ b/contracts/misc/interfaces/IUniswapV2Router01.sol
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: agpl-3.0
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
diff --git a/contracts/misc/interfaces/IUniswapV2Router02.sol b/contracts/misc/interfaces/IUniswapV2Router02.sol
index 53fa9eb3..4b015196 100644
--- a/contracts/misc/interfaces/IUniswapV2Router02.sol
+++ b/contracts/misc/interfaces/IUniswapV2Router02.sol
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: agpl-3.0
pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
diff --git a/contracts/misc/interfaces/IWETH.sol b/contracts/misc/interfaces/IWETH.sol
index cb661927..1265cdda 100644
--- a/contracts/misc/interfaces/IWETH.sol
+++ b/contracts/misc/interfaces/IWETH.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IWETH {
function deposit() external payable;
diff --git a/contracts/misc/interfaces/IWETHGateway.sol b/contracts/misc/interfaces/IWETHGateway.sol
index fae7a1e8..c06471fb 100644
--- a/contracts/misc/interfaces/IWETHGateway.sol
+++ b/contracts/misc/interfaces/IWETHGateway.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IWETHGateway {
function depositETH(address onBehalfOf, uint16 referralCode) external payable;
diff --git a/contracts/mocks/attacks/SefldestructTransfer.sol b/contracts/mocks/attacks/SefldestructTransfer.sol
index 5c8750c1..6fe8e059 100644
--- a/contracts/mocks/attacks/SefldestructTransfer.sol
+++ b/contracts/mocks/attacks/SefldestructTransfer.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
contract SelfdestructTransfer {
function destroyAndTransfer(address payable to) external payable {
diff --git a/contracts/mocks/dependencies/weth/WETH9.sol b/contracts/mocks/dependencies/weth/WETH9.sol
index 1907b736..b4b16281 100644
--- a/contracts/mocks/dependencies/weth/WETH9.sol
+++ b/contracts/mocks/dependencies/weth/WETH9.sol
@@ -13,7 +13,7 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-pragma solidity >=0.4.22 <=0.6.8;
+pragma solidity >=0.4.22 <=0.6.12;
contract WETH9 {
string public name = 'Wrapped Ether';
diff --git a/contracts/mocks/flashloan/MockFlashLoanReceiver.sol b/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
index cfd16c28..ae29b937 100644
--- a/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
+++ b/contracts/mocks/flashloan/MockFlashLoanReceiver.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
diff --git a/contracts/mocks/oracle/CLAggregators/MockAggregator.sol b/contracts/mocks/oracle/CLAggregators/MockAggregator.sol
index e0950e04..192cd27a 100644
--- a/contracts/mocks/oracle/CLAggregators/MockAggregator.sol
+++ b/contracts/mocks/oracle/CLAggregators/MockAggregator.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
contract MockAggregator {
int256 private _latestAnswer;
diff --git a/contracts/mocks/oracle/ChainlinkUSDETHOracleI.sol b/contracts/mocks/oracle/ChainlinkUSDETHOracleI.sol
index 76e4e3fe..f5aef405 100644
--- a/contracts/mocks/oracle/ChainlinkUSDETHOracleI.sol
+++ b/contracts/mocks/oracle/ChainlinkUSDETHOracleI.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface ChainlinkUSDETHOracleI {
event AnswerUpdated(int256 indexed current, uint256 indexed answerId);
diff --git a/contracts/mocks/oracle/GenericOracleI.sol b/contracts/mocks/oracle/GenericOracleI.sol
index 6617df06..afd5fd6f 100644
--- a/contracts/mocks/oracle/GenericOracleI.sol
+++ b/contracts/mocks/oracle/GenericOracleI.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface GenericOracleI {
// ganache
diff --git a/contracts/mocks/oracle/IExtendedPriceAggregator.sol b/contracts/mocks/oracle/IExtendedPriceAggregator.sol
index 5b5427e6..5056cd4d 100644
--- a/contracts/mocks/oracle/IExtendedPriceAggregator.sol
+++ b/contracts/mocks/oracle/IExtendedPriceAggregator.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IExtendedPriceAggregator {
event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);
diff --git a/contracts/mocks/oracle/LendingRateOracle.sol b/contracts/mocks/oracle/LendingRateOracle.sol
index 0062380d..045a1d4c 100644
--- a/contracts/mocks/oracle/LendingRateOracle.sol
+++ b/contracts/mocks/oracle/LendingRateOracle.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {ILendingRateOracle} from '../../interfaces/ILendingRateOracle.sol';
import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';
diff --git a/contracts/mocks/oracle/PriceOracle.sol b/contracts/mocks/oracle/PriceOracle.sol
index 20d576f2..183eff50 100644
--- a/contracts/mocks/oracle/PriceOracle.sol
+++ b/contracts/mocks/oracle/PriceOracle.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {IPriceOracle} from '../../interfaces/IPriceOracle.sol';
diff --git a/contracts/mocks/tokens/MintableDelegationERC20.sol b/contracts/mocks/tokens/MintableDelegationERC20.sol
index 1b3088d5..f546b2d9 100644
--- a/contracts/mocks/tokens/MintableDelegationERC20.sol
+++ b/contracts/mocks/tokens/MintableDelegationERC20.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';
diff --git a/contracts/mocks/tokens/MintableERC20.sol b/contracts/mocks/tokens/MintableERC20.sol
index 2c79d971..56da583e 100644
--- a/contracts/mocks/tokens/MintableERC20.sol
+++ b/contracts/mocks/tokens/MintableERC20.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';
diff --git a/contracts/mocks/tokens/WETH9Mocked.sol b/contracts/mocks/tokens/WETH9Mocked.sol
index edcb1ca5..7d10da01 100644
--- a/contracts/mocks/tokens/WETH9Mocked.sol
+++ b/contracts/mocks/tokens/WETH9Mocked.sol
@@ -1,4 +1,5 @@
-pragma solidity >=0.4.22 <=0.6.8;
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity >=0.4.22 <=0.6.12;
import {WETH9} from '../dependencies/weth/WETH9.sol';
diff --git a/contracts/mocks/upgradeability/MockAToken.sol b/contracts/mocks/upgradeability/MockAToken.sol
index 3e6a39b8..f0eda38c 100644
--- a/contracts/mocks/upgradeability/MockAToken.sol
+++ b/contracts/mocks/upgradeability/MockAToken.sol
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {AToken} from '../../tokenization/AToken.sol';
-import {LendingPool} from '../../lendingpool/LendingPool.sol';
+import {AToken} from '../../protocol/tokenization/AToken.sol';
+import {LendingPool} from '../../protocol/lendingpool/LendingPool.sol';
contract MockAToken is AToken {
constructor(
@@ -24,7 +24,7 @@ contract MockAToken is AToken {
)
{}
- function getRevision() internal override pure returns (uint256) {
+ function getRevision() internal pure override returns (uint256) {
return 0x2;
}
diff --git a/contracts/mocks/upgradeability/MockStableDebtToken.sol b/contracts/mocks/upgradeability/MockStableDebtToken.sol
index 13a42bde..5030c171 100644
--- a/contracts/mocks/upgradeability/MockStableDebtToken.sol
+++ b/contracts/mocks/upgradeability/MockStableDebtToken.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {StableDebtToken} from '../../tokenization/StableDebtToken.sol';
+import {StableDebtToken} from '../../protocol/tokenization/StableDebtToken.sol';
contract MockStableDebtToken is StableDebtToken {
constructor(
@@ -15,7 +15,7 @@ contract MockStableDebtToken is StableDebtToken {
StableDebtToken(_pool, _underlyingAssetAddress, _tokenName, _tokenSymbol, incentivesController)
{}
- function getRevision() internal override pure returns (uint256) {
+ function getRevision() internal pure override returns (uint256) {
return 0x2;
}
}
diff --git a/contracts/mocks/upgradeability/MockVariableDebtToken.sol b/contracts/mocks/upgradeability/MockVariableDebtToken.sol
index 2bae798f..0a9a03aa 100644
--- a/contracts/mocks/upgradeability/MockVariableDebtToken.sol
+++ b/contracts/mocks/upgradeability/MockVariableDebtToken.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {VariableDebtToken} from '../../tokenization/VariableDebtToken.sol';
+import {VariableDebtToken} from '../../protocol/tokenization/VariableDebtToken.sol';
contract MockVariableDebtToken is VariableDebtToken {
constructor(
@@ -21,7 +21,7 @@ contract MockVariableDebtToken is VariableDebtToken {
)
{}
- function getRevision() internal override pure returns (uint256) {
+ function getRevision() internal pure override returns (uint256) {
return 0x2;
}
}
diff --git a/contracts/configuration/LendingPoolAddressesProvider.sol b/contracts/protocol/configuration/LendingPoolAddressesProvider.sol
similarity index 52%
rename from contracts/configuration/LendingPoolAddressesProvider.sol
rename to contracts/protocol/configuration/LendingPoolAddressesProvider.sol
index 43796d36..f6f7bef2 100644
--- a/contracts/configuration/LendingPoolAddressesProvider.sol
+++ b/contracts/protocol/configuration/LendingPoolAddressesProvider.sol
@@ -1,21 +1,21 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
+import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';
// Prettier ignore to prevent buidler flatter bug
// prettier-ignore
import {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';
-import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
/**
* @title LendingPoolAddressesProvider contract
- * @notice Is the main registry of the protocol. All the different components of the protocol are accessible
- * through the addresses provider.
+ * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
+ * - Acting also as factory of proxies and admin of those, so with right to change its implementations
+ * - Owned by the Aave Governance
* @author Aave
**/
-
contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider {
mapping(bytes32 => address) private _addresses;
@@ -28,28 +28,30 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
bytes32 private constant LENDING_RATE_ORACLE = 'LENDING_RATE_ORACLE';
/**
- * @dev Sets an address for an id by updating a proxy implementation
+ * @dev 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 `implementationAddress`
+ * 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 implementationAddress The address of the implementation if we want it covered by a proxy
- * address(0) if we don't want a proxy covering
+ * @param implementationAddress The address of the new implementation
*/
- function setAddressAsProxy(
- bytes32 id,
- address implementationAddress
- ) external override onlyOwner {
+ function setAddressAsProxy(bytes32 id, address implementationAddress)
+ external
+ override
+ onlyOwner
+ {
_updateImpl(id, implementationAddress);
emit AddressSet(id, implementationAddress, true);
}
/**
* @dev Sets an address for an id replacing the address saved in the addresses map
+ * IMPORTANT Use this function carefully, as it will do a hard replacement
* @param id The id
- * @param newAddress The address to set, pass address(0) if a proxy is needed
+ * @param newAddress The address to set
*/
- function setAddress(
- bytes32 id,
- address newAddress
- ) external override onlyOwner {
+ function setAddress(bytes32 id, address newAddress) external override onlyOwner {
_addresses[id] = newAddress;
emit AddressSet(id, newAddress, false);
}
@@ -58,21 +60,22 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
* @dev Returns an address by id
* @return The address
*/
- function getAddress(bytes32 id) public override view returns (address) {
+ function getAddress(bytes32 id) public view override returns (address) {
return _addresses[id];
}
/**
- * @dev returns the address of the LendingPool proxy
- * @return the lending pool proxy address
+ * @dev Returns the address of the LendingPool proxy
+ * @return The LendingPool proxy address
**/
- function getLendingPool() external override view returns (address) {
+ function getLendingPool() external view override returns (address) {
return getAddress(LENDING_POOL);
}
/**
- * @dev updates the implementation of the lending pool
- * @param pool the new lending pool implementation
+ * @dev Updates the implementation of the LendingPool, or creates the proxy
+ * setting the new `pool` implementation on the first time calling it
+ * @param pool The new LendingPool implementation
**/
function setLendingPoolImpl(address pool) external override onlyOwner {
_updateImpl(LENDING_POOL, pool);
@@ -80,16 +83,17 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
}
/**
- * @dev returns the address of the LendingPoolConfigurator proxy
- * @return the lending pool configurator proxy address
+ * @dev Returns the address of the LendingPoolConfigurator proxy
+ * @return The LendingPoolConfigurator proxy address
**/
- function getLendingPoolConfigurator() external override view returns (address) {
+ function getLendingPoolConfigurator() external view override returns (address) {
return getAddress(LENDING_POOL_CONFIGURATOR);
}
/**
- * @dev updates the implementation of the lending pool configurator
- * @param configurator the new lending pool configurator implementation
+ * @dev Updates the implementation of the LendingPoolConfigurator, or creates the proxy
+ * setting the new `configurator` implementation on the first time calling it
+ * @param configurator The new LendingPoolConfigurator implementation
**/
function setLendingPoolConfiguratorImpl(address configurator) external override onlyOwner {
_updateImpl(LENDING_POOL_CONFIGURATOR, configurator);
@@ -97,19 +101,19 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
}
/**
- * @dev returns the address of the LendingPoolCollateralManager. Since the manager is used
+ * @dev Returns the address of the LendingPoolCollateralManager. Since the manager is used
* through delegateCall within the LendingPool contract, the proxy contract pattern does not work properly hence
- * the addresses are changed directly.
- * @return the address of the Lending pool collateral manager
+ * the addresses are changed directly
+ * @return The address of the LendingPoolCollateralManager
**/
- function getLendingPoolCollateralManager() external override view returns (address) {
+ function getLendingPoolCollateralManager() external view override returns (address) {
return getAddress(LENDING_POOL_COLLATERAL_MANAGER);
}
/**
- * @dev updates the address of the Lending pool collateral manager
- * @param manager the new lending pool collateral manager address
+ * @dev Updates the address of the LendingPoolCollateralManager
+ * @param manager The new LendingPoolCollateralManager address
**/
function setLendingPoolCollateralManager(address manager) external override onlyOwner {
_addresses[LENDING_POOL_COLLATERAL_MANAGER] = manager;
@@ -117,11 +121,11 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
}
/**
- * @dev the functions below are storing specific addresses that are outside the context of the protocol
- * hence the upgradable proxy pattern is not used
+ * @dev The functions below are getters/setters of addresses that are outside the context
+ * of the protocol hence the upgradable proxy pattern is not used
**/
- function getPoolAdmin() external override view returns (address) {
+ function getPoolAdmin() external view override returns (address) {
return getAddress(POOL_ADMIN);
}
@@ -130,7 +134,7 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
emit ConfigurationAdminUpdated(admin);
}
- function getEmergencyAdmin() external override view returns (address) {
+ function getEmergencyAdmin() external view override returns (address) {
return getAddress(EMERGENCY_ADMIN);
}
@@ -139,7 +143,7 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
emit EmergencyAdminUpdated(emergencyAdmin);
}
- function getPriceOracle() external override view returns (address) {
+ function getPriceOracle() external view override returns (address) {
return getAddress(PRICE_ORACLE);
}
@@ -148,7 +152,7 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
emit PriceOracleUpdated(priceOracle);
}
- function getLendingRateOracle() external override view returns (address) {
+ function getLendingRateOracle() external view override returns (address) {
return getAddress(LENDING_RATE_ORACLE);
}
@@ -158,16 +162,19 @@ contract LendingPoolAddressesProvider is Ownable, ILendingPoolAddressesProvider
}
/**
- * @dev internal function to update the implementation of a specific component of the protocol
- * @param id the id of the contract to be updated
- * @param newAddress the address of the new implementation
+ * @dev Internal function to update the implementation of a specific proxied component of the protocol
+ * - If there is no proxy registered in the given `id`, it creates the proxy setting `newAdress`
+ * as implementation and calls the initialize() function on the proxy
+ * - If there is already a proxy registered, it just updates the implementation to `newAddress` and
+ * calls the initialize() function via upgradeToAndCall() in the proxy
+ * @param id The id of the proxy to be updated
+ * @param newAddress The address of the new implementation
**/
function _updateImpl(bytes32 id, address newAddress) internal {
address payable proxyAddress = payable(_addresses[id]);
-
- InitializableImmutableAdminUpgradeabilityProxy proxy
- = InitializableImmutableAdminUpgradeabilityProxy(proxyAddress);
+ InitializableImmutableAdminUpgradeabilityProxy proxy =
+ InitializableImmutableAdminUpgradeabilityProxy(proxyAddress);
bytes memory params = abi.encodeWithSignature('initialize(address)', address(this));
if (proxyAddress == address(0)) {
diff --git a/contracts/configuration/LendingPoolAddressesProviderRegistry.sol b/contracts/protocol/configuration/LendingPoolAddressesProviderRegistry.sol
similarity index 59%
rename from contracts/configuration/LendingPoolAddressesProviderRegistry.sol
rename to contracts/protocol/configuration/LendingPoolAddressesProviderRegistry.sol
index 4be6e034..20b11e0e 100644
--- a/contracts/configuration/LendingPoolAddressesProviderRegistry.sol
+++ b/contracts/protocol/configuration/LendingPoolAddressesProviderRegistry.sol
@@ -1,41 +1,29 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';
+import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';
import {
ILendingPoolAddressesProviderRegistry
-} from '../interfaces/ILendingPoolAddressesProviderRegistry.sol';
+} from '../../interfaces/ILendingPoolAddressesProviderRegistry.sol';
import {Errors} from '../libraries/helpers/Errors.sol';
/**
* @title LendingPoolAddressesProviderRegistry contract
- * @notice contains the list of active addresses providers
+ * @dev Main registry of LendingPoolAddressesProvider of multiple Aave protocol's markets
+ * - Used for indexing purposes of Aave protocol's markets
+ * - The id assigned to a LendingPoolAddressesProvider refers to the market it is connected with,
+ * for example with `0` for the Aave main market and `1` for the next created
* @author Aave
**/
-
contract LendingPoolAddressesProviderRegistry is Ownable, ILendingPoolAddressesProviderRegistry {
mapping(address => uint256) private _addressesProviders;
address[] private _addressesProvidersList;
/**
- * @dev returns if an addressesProvider is registered or not
- * @param provider the addresses provider
- * @return The id of the addresses provider or 0 if the addresses provider not registered
+ * @dev Returns the list of registered addresses provider
+ * @return The list of addresses provider, potentially containing address(0) elements
**/
- function isAddressesProviderRegistered(address provider)
- external
- override
- view
- returns (uint256)
- {
- return _addressesProviders[provider];
- }
-
- /**
- * @dev returns the list of active addressesProviders
- * @return the list of addressesProviders, potentially containing address(0) elements
- **/
- function getAddressesProvidersList() external override view returns (address[] memory) {
+ function getAddressesProvidersList() external view override returns (address[] memory) {
address[] memory addressesProvidersList = _addressesProvidersList;
uint256 maxLength = addressesProvidersList.length;
@@ -52,8 +40,9 @@ contract LendingPoolAddressesProviderRegistry is Ownable, ILendingPoolAddressesP
}
/**
- * @dev adds a lending pool to the list of registered lending pools
- * @param provider the pool address to be registered
+ * @dev Registers an addresses provider
+ * @param provider The address of the new LendingPoolAddressesProvider
+ * @param id The id for the new LendingPoolAddressesProvider, referring to the market it belongs to
**/
function registerAddressesProvider(address provider, uint256 id) external override onlyOwner {
require(id != 0, Errors.LPAPR_INVALID_ADDRESSES_PROVIDER_ID);
@@ -64,8 +53,8 @@ contract LendingPoolAddressesProviderRegistry is Ownable, ILendingPoolAddressesP
}
/**
- * @dev removes a lending pool from the list of registered lending pools
- * @param provider the pool address to be unregistered
+ * @dev Removes a LendingPoolAddressesProvider from the list of registered addresses provider
+ * @param provider The LendingPoolAddressesProvider address
**/
function unregisterAddressesProvider(address provider) external override onlyOwner {
require(_addressesProviders[provider] > 0, Errors.LPAPR_PROVIDER_NOT_REGISTERED);
@@ -74,9 +63,18 @@ contract LendingPoolAddressesProviderRegistry is Ownable, ILendingPoolAddressesP
}
/**
- * @dev adds to the list of the addresses providers, if it wasn't already added before
- * @param provider the pool address to be added
- **/
+ * @dev Returns the id on a registered LendingPoolAddressesProvider
+ * @return The id or 0 if the LendingPoolAddressesProvider is not registered
+ */
+ function getAddressesProviderIdByAddress(address addressesProvider)
+ external
+ view
+ override
+ returns (uint256)
+ {
+ return _addressesProviders[addressesProvider];
+ }
+
function _addToAddressesProvidersList(address provider) internal {
uint256 providersCount = _addressesProvidersList.length;
@@ -88,17 +86,4 @@ contract LendingPoolAddressesProviderRegistry is Ownable, ILendingPoolAddressesP
_addressesProvidersList.push(provider);
}
-
- /**
- * @dev Returns the id on an `addressesProvider` or address(0) if not registered
- * @return The id or 0 if the addresses provider is not registered
- */
- function getAddressesProviderIdByAddress(address addressesProvider)
- external
- override
- view
- returns (uint256)
- {
- return _addressesProviders[addressesProvider];
- }
}
diff --git a/contracts/lendingpool/DefaultReserveInterestRateStrategy.sol b/contracts/protocol/lendingpool/DefaultReserveInterestRateStrategy.sol
similarity index 54%
rename from contracts/lendingpool/DefaultReserveInterestRateStrategy.sol
rename to contracts/protocol/lendingpool/DefaultReserveInterestRateStrategy.sol
index 7ed6aa42..6f45004c 100644
--- a/contracts/lendingpool/DefaultReserveInterestRateStrategy.sol
+++ b/contracts/protocol/lendingpool/DefaultReserveInterestRateStrategy.sol
@@ -1,63 +1,69 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {SafeMath} from '../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IReserveInterestRateStrategy} from '../interfaces/IReserveInterestRateStrategy.sol';
+import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';
import {WadRayMath} from '../libraries/math/WadRayMath.sol';
import {PercentageMath} from '../libraries/math/PercentageMath.sol';
-import {LendingPoolAddressesProvider} from '../configuration/LendingPoolAddressesProvider.sol';
-import {ILendingRateOracle} from '../interfaces/ILendingRateOracle.sol';
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
+import {ILendingRateOracle} from '../../interfaces/ILendingRateOracle.sol';
/**
* @title DefaultReserveInterestRateStrategy contract
- * @notice implements the calculation of the interest rates depending on the reserve parameters.
- * @dev if there is need to update the calculation of the interest rates for a specific reserve,
- * a new version of this contract will be deployed.
+ * @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_UTILIZATION_RATE`
+ * point of utilization 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 LendingPoolAddressesProvider
* @author Aave
**/
contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
using WadRayMath for uint256;
using SafeMath for uint256;
using PercentageMath for uint256;
- /**
- * @dev this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates
- * expressed in ray
- **/
- uint256 public constant OPTIMAL_UTILIZATION_RATE = 0.8 * 1e27;
/**
- * @dev this constant represents the excess utilization rate above the optimal. It's always equal to
- * 1-optimal utilization rate. Added as a constant here for gas optimizations
- * expressed in ray
+ * @dev this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates.
+ * Expressed in ray
+ **/
+ uint256 public immutable OPTIMAL_UTILIZATION_RATE;
+
+ /**
+ * @dev This constant represents the excess utilization rate above the optimal. It's always equal to
+ * 1-optimal utilization rate. Added as a constant here for gas optimizations.
+ * Expressed in ray
**/
- uint256 public constant EXCESS_UTILIZATION_RATE = 0.2 * 1e27;
+ uint256 public immutable EXCESS_UTILIZATION_RATE;
- LendingPoolAddressesProvider public immutable addressesProvider;
+ ILendingPoolAddressesProvider public immutable addressesProvider;
- //base variable borrow rate when Utilization rate = 0. Expressed in ray
+ // Base variable borrow rate when Utilization rate = 0. Expressed in ray
uint256 internal immutable _baseVariableBorrowRate;
- //slope of the variable interest curve when utilization rate > 0 and <= OPTIMAL_UTILIZATION_RATE. Expressed in ray
+ // Slope of the variable interest curve when utilization rate > 0 and <= OPTIMAL_UTILIZATION_RATE. Expressed in ray
uint256 internal immutable _variableRateSlope1;
- //slope of the variable interest curve when utilization rate > OPTIMAL_UTILIZATION_RATE. Expressed in ray
+ // Slope of the variable interest curve when utilization rate > OPTIMAL_UTILIZATION_RATE. Expressed in ray
uint256 internal immutable _variableRateSlope2;
- //slope of the stable interest curve when utilization rate > 0 and <= OPTIMAL_UTILIZATION_RATE. Expressed in ray
+ // Slope of the stable interest curve when utilization rate > 0 and <= OPTIMAL_UTILIZATION_RATE. Expressed in ray
uint256 internal immutable _stableRateSlope1;
- //slope of the stable interest curve when utilization rate > OPTIMAL_UTILIZATION_RATE. Expressed in ray
+ // Slope of the stable interest curve when utilization rate > OPTIMAL_UTILIZATION_RATE. Expressed in ray
uint256 internal immutable _stableRateSlope2;
constructor(
- LendingPoolAddressesProvider provider,
+ ILendingPoolAddressesProvider provider,
+ uint256 optimalUtilizationRate,
uint256 baseVariableBorrowRate,
uint256 variableRateSlope1,
uint256 variableRateSlope2,
uint256 stableRateSlope1,
uint256 stableRateSlope2
) public {
+ OPTIMAL_UTILIZATION_RATE = optimalUtilizationRate;
+ EXCESS_UTILIZATION_RATE = WadRayMath.ray().sub(optimalUtilizationRate);
addressesProvider = provider;
_baseVariableBorrowRate = baseVariableBorrowRate;
_variableRateSlope1 = variableRateSlope1;
@@ -66,10 +72,6 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
_stableRateSlope2 = stableRateSlope2;
}
- /**
- * @dev accessors
- */
-
function variableRateSlope1() external view returns (uint256) {
return _variableRateSlope1;
}
@@ -86,16 +88,16 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
return _stableRateSlope2;
}
- function baseVariableBorrowRate() external override view returns (uint256) {
+ function baseVariableBorrowRate() external view override returns (uint256) {
return _baseVariableBorrowRate;
}
- function getMaxVariableBorrowRate() external override view returns (uint256) {
+ function getMaxVariableBorrowRate() external view override returns (uint256) {
return _baseVariableBorrowRate.add(_variableRateSlope1).add(_variableRateSlope2);
}
struct CalcInterestRatesLocalVars {
- uint256 totalBorrows;
+ uint256 totalDebt;
uint256 currentVariableBorrowRate;
uint256 currentStableBorrowRate;
uint256 currentLiquidityRate;
@@ -103,16 +105,14 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
}
/**
- * @dev calculates the interest rates depending on the available liquidity and the total borrowed.
- * @param reserve the address of the reserve
- * @param availableLiquidity the liquidity available in the reserve
- * @param totalStableDebt the total borrowed from the reserve a stable rate
- * @param totalVariableDebt the total borrowed from the reserve at a variable rate
- * @param averageStableBorrowRate the weighted average of all the stable rate borrows
- * @param reserveFactor the reserve portion of the interest to redirect to the reserve treasury
- * @return currentLiquidityRate the liquidity rate
- * @return currentStableBorrowRate stable borrow rate
- * @return currentVariableBorrowRate variable borrow rate
+ * @dev Calculates the interest rates depending on the reserve's state and configurations
+ * @param reserve The address of the reserve
+ * @param availableLiquidity The liquidity available in the reserve
+ * @param totalStableDebt The total borrowed from the reserve a stable rate
+ * @param totalVariableDebt The total borrowed from the reserve at a variable rate
+ * @param averageStableBorrowRate The weighted average of all the stable rate loans
+ * @param reserveFactor The reserve portion of the interest that goes to the treasury of the market
+ * @return The liquidity rate, the stable borrow rate and the variable borrow rate
**/
function calculateInterestRates(
address reserve,
@@ -123,8 +123,8 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
uint256 reserveFactor
)
external
- override
view
+ override
returns (
uint256,
uint256,
@@ -133,22 +133,22 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
{
CalcInterestRatesLocalVars memory vars;
- vars.totalBorrows = totalStableDebt.add(totalVariableDebt);
+ vars.totalDebt = totalStableDebt.add(totalVariableDebt);
vars.currentVariableBorrowRate = 0;
vars.currentStableBorrowRate = 0;
vars.currentLiquidityRate = 0;
- uint256 utilizationRate = vars.totalBorrows == 0
- ? 0
- : vars.totalBorrows.rayDiv(availableLiquidity.add(vars.totalBorrows));
+ uint256 utilizationRate =
+ vars.totalDebt == 0
+ ? 0
+ : vars.totalDebt.rayDiv(availableLiquidity.add(vars.totalDebt));
vars.currentStableBorrowRate = ILendingRateOracle(addressesProvider.getLendingRateOracle())
.getMarketBorrowRate(reserve);
if (utilizationRate > OPTIMAL_UTILIZATION_RATE) {
- uint256 excessUtilizationRateRatio = utilizationRate.sub(OPTIMAL_UTILIZATION_RATE).rayDiv(
- EXCESS_UTILIZATION_RATE
- );
+ uint256 excessUtilizationRateRatio =
+ utilizationRate.sub(OPTIMAL_UTILIZATION_RATE).rayDiv(EXCESS_UTILIZATION_RATE);
vars.currentStableBorrowRate = vars.currentStableBorrowRate.add(_stableRateSlope1).add(
_stableRateSlope2.rayMul(excessUtilizationRateRatio)
@@ -184,12 +184,12 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
}
/**
- * @dev calculates the overall borrow rate as the weighted average between the total variable borrows and total stable borrows.
- * @param totalStableDebt the total borrowed from the reserve a stable rate
- * @param totalVariableDebt the total borrowed from the reserve at a variable rate
- * @param currentVariableBorrowRate the current variable borrow rate
- * @param currentAverageStableBorrowRate the weighted average of all the stable rate borrows
- * @return the weighted averaged borrow rate
+ * @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 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,
@@ -197,17 +197,16 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy {
uint256 currentVariableBorrowRate,
uint256 currentAverageStableBorrowRate
) internal pure returns (uint256) {
- uint256 totalBorrows = totalStableDebt.add(totalVariableDebt);
+ uint256 totalDebt = totalStableDebt.add(totalVariableDebt);
- if (totalBorrows == 0) return 0;
+ if (totalDebt == 0) return 0;
uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);
uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);
- uint256 overallBorrowRate = weightedVariableRate.add(weightedStableRate).rayDiv(
- totalBorrows.wadToRay()
- );
+ uint256 overallBorrowRate =
+ weightedVariableRate.add(weightedStableRate).rayDiv(totalDebt.wadToRay());
return overallBorrowRate;
}
diff --git a/contracts/lendingpool/LendingPool.sol b/contracts/protocol/lendingpool/LendingPool.sol
similarity index 60%
rename from contracts/lendingpool/LendingPool.sol
rename to contracts/protocol/lendingpool/LendingPool.sol
index 54015687..525141a6 100644
--- a/contracts/lendingpool/LendingPool.sol
+++ b/contracts/protocol/lendingpool/LendingPool.sol
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {SafeMath} from '../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
+import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
-import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
import {IAToken} from '../tokenization/interfaces/IAToken.sol';
import {Helpers} from '../libraries/helpers/Helpers.sol';
import {Errors} from '../libraries/helpers/Errors.sol';
@@ -18,18 +18,29 @@ import {ReserveConfiguration} from '../libraries/configuration/ReserveConfigurat
import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
-import {DebtTokenBase} from '../tokenization/base/DebtTokenBase.sol';
-import {IFlashLoanReceiver} from '../flashloan/interfaces/IFlashLoanReceiver.sol';
-import {LendingPoolCollateralManager} from './LendingPoolCollateralManager.sol';
-import {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';
-import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
-import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {IFlashLoanReceiver} from '../../flashloan/interfaces/IFlashLoanReceiver.sol';
+import {IPriceOracleGetter} from '../../interfaces/IPriceOracleGetter.sol';
+import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
+import {ILendingPool} from '../../interfaces/ILendingPool.sol';
import {LendingPoolStorage} from './LendingPoolStorage.sol';
-import {Address} from '../dependencies/openzeppelin/contracts/Address.sol';
+import {Address} from '../../dependencies/openzeppelin/contracts/Address.sol';
+import {DataTypes} from '../libraries/types/DataTypes.sol';
/**
* @title LendingPool contract
- * @notice Implements the actions of the LendingPool, and exposes accessory methods to fetch the users and reserve data
+ * @dev Main point of interaction with an Aave protocol's market
+ * - Users can:
+ * # Deposit
+ * # Withdraw
+ * # Borrow
+ * # Repay
+ * # Swap their loans between variable and stable rate
+ * # Enable/disable their deposits as collateral rebalance stable rate borrow positions
+ * # Liquidate positions
+ * # Execute Flash Loans
+ * - To be covered by a proxy contract, owned by the LendingPoolAddressesProvider of the specific market
+ * - All admin functions are callable by the LendingPoolConfigurator contract defined also in the
+ * LendingPoolAddressesProvider
* @author Aave
**/
contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage {
@@ -44,25 +55,20 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 public constant MAX_NUMBER_RESERVES = 128;
uint256 public constant LENDINGPOOL_REVISION = 0x2;
- /**
- * @dev functions marked by this modifier can only be called when the protocol is not paused
- **/
modifier whenNotPaused() {
_whenNotPaused();
_;
}
- /**
- * @dev functions marked by this modifier can only be called by the LendingPoolConfigurator
- **/
modifier onlyLendingPoolConfigurator() {
_onlyLendingPoolConfigurator();
_;
}
- /**
- * @dev only lending pools configurator can use functions affected by this modifier
- **/
+ function _whenNotPaused() internal view {
+ require(!_paused, Errors.LP_IS_PAUSED);
+ }
+
function _onlyLendingPoolConfigurator() internal view {
require(
_addressesProvider.getLendingPoolConfigurator() == msg.sender,
@@ -70,36 +76,31 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
);
}
- /**
- * @dev Function to make a function callable only when the contract is not paused.
- *
- * Requirements:
- *
- * - The contract must not be paused.
- */
- function _whenNotPaused() internal view {
- require(!_paused, Errors.LP_IS_PAUSED);
- }
-
function getRevision() internal override pure returns (uint256) {
return LENDINGPOOL_REVISION;
}
/**
- * @dev this function is invoked by the proxy contract when the LendingPool contract is added to the
- * AddressesProvider.
- * @param provider the address of the LendingPoolAddressesProvider registry
+ * @dev Function is invoked by the proxy contract when the LendingPool contract is added to the
+ * LendingPoolAddressesProvider of the market.
+ * - Caching the address of the LendingPoolAddressesProvider in order to reduce gas consumption
+ * on subsequent operations
+ * @param provider The address of the LendingPoolAddressesProvider
**/
function initialize(ILendingPoolAddressesProvider provider) public initializer {
_addressesProvider = provider;
}
/**
- * @dev deposits The underlying asset into the reserve. A corresponding amount of the overlying asset (aTokens)
- * is minted.
- * @param asset the address of the reserve
- * @param amount the amount to be deposited
- * @param referralCode integrators are assigned a referral code and can potentially receive rewards.
+ * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.
+ * - E.g. User deposits 100 USDC and gets in return 100 aUSDC
+ * @param asset The address of the underlying asset to deposit
+ * @param amount The amount to be deposited
+ * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user
+ * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens
+ * is a different wallet
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
**/
function deposit(
address asset,
@@ -107,7 +108,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
address onBehalfOf,
uint16 referralCode
) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
ValidationLogic.validateDeposit(reserve, amount);
@@ -123,24 +124,27 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);
}
- //transfer to the aToken contract
IERC20(asset).safeTransferFrom(msg.sender, aToken, amount);
emit Deposit(asset, msg.sender, onBehalfOf, amount, referralCode);
}
/**
- * @dev withdraws the _reserves of user.
- * @param asset the address of the reserve
- * @param amount the underlying amount to be redeemed
- * @param to address that will receive the underlying
+ * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned
+ * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC
+ * @param asset The address of the underlying asset to withdraw
+ * @param amount The underlying amount to be withdrawn
+ * - Send the value type(uint256).max in order to withdraw the whole aToken balance
+ * @param to Address that will receive the underlying, same as msg.sender if the user
+ * wants to receive it on his own wallet, or a different address if the beneficiary is a
+ * different wallet
**/
function withdraw(
address asset,
uint256 amount,
address to
) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
address aToken = reserve.aTokenAddress;
@@ -148,7 +152,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 amountToWithdraw = amount;
- //if amount is equal to uint(-1), the user wants to redeem everything
if (amount == type(uint256).max) {
amountToWithdraw = userBalance;
}
@@ -179,16 +182,19 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev Allows users to borrow a specific amount of the reserve underlying asset, provided that the borrower
+ * @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower
* already deposited enough collateral, or he was given enough allowance by a credit delegator on the
* corresponding debt token (StableDebtToken or VariableDebtToken)
- * @param asset the address of the reserve
- * @param amount the amount to be borrowed
- * @param interestRateMode the interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable
- * @param referralCode a referral code for integrators
- * @param onBehalfOf address of the user who will receive the debt. Should be the address of the borrower itself
+ * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet
+ * and 100 stable/variable debt tokens, depending on the `interestRateMode`
+ * @param asset The address of the underlying asset to borrow
+ * @param amount The amount to be borrowed
+ * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
+ * @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself
* calling the function if he wants to borrow against his own collateral, or the address of the credit delegator
- * if he has been given credit delegation allowance
+ * if he has been given credit delegation allowance
**/
function borrow(
address asset,
@@ -197,7 +203,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint16 referralCode,
address onBehalfOf
) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
_executeBorrow(
ExecuteBorrowParams(
@@ -214,12 +220,15 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @notice repays a borrow on the specific reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).
- * @dev the target user is defined by onBehalfOf. If there is no repayment on behalf of another account,
- * onBehalfOf must be equal to msg.sender.
- * @param asset the address of the reserve on which the user borrowed
- * @param amount the amount to repay, or uint256(-1) if the user wants to repay everything
- * @param onBehalfOf the address for which msg.sender is repaying.
+ * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned
+ * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address
+ * @param asset The address of the borrowed underlying asset previously borrowed
+ * @param amount The amount to repay
+ * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`
+ * @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable
+ * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the
+ * user calling the function if he wants to reduce/remove his own debt, or the address of any other
+ * other borrower whose debt should be removed
**/
function repay(
address asset,
@@ -227,11 +236,11 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
uint256 rateMode,
address onBehalfOf
) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
(uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(onBehalfOf, reserve);
- ReserveLogic.InterestRateMode interestRateMode = ReserveLogic.InterestRateMode(rateMode);
+ DataTypes.InterestRateMode interestRateMode = DataTypes.InterestRateMode(rateMode);
ValidationLogic.validateRepay(
reserve,
@@ -242,8 +251,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
variableDebt
);
- //default to max amount
- uint256 paybackAmount = interestRateMode == ReserveLogic.InterestRateMode.STABLE
+ uint256 paybackAmount = interestRateMode == DataTypes.InterestRateMode.STABLE
? stableDebt
: variableDebt;
@@ -253,8 +261,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.updateState();
- //burns an equivalent amount of debt tokens
- if (interestRateMode == ReserveLogic.InterestRateMode.STABLE) {
+ if (interestRateMode == DataTypes.InterestRateMode.STABLE) {
IStableDebtToken(reserve.stableDebtTokenAddress).burn(onBehalfOf, paybackAmount);
} else {
IVariableDebtToken(reserve.variableDebtTokenAddress).burn(
@@ -277,16 +284,16 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev borrowers can user this function to swap between stable and variable borrow rate modes.
- * @param asset the address of the reserve on which the user borrowed
- * @param rateMode the rate mode that the user wants to swap
+ * @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa
+ * @param asset The address of the underlying asset borrowed
+ * @param rateMode The rate mode that the user wants to swap to
**/
function swapBorrowRateMode(address asset, uint256 rateMode) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
(uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(msg.sender, reserve);
- ReserveLogic.InterestRateMode interestRateMode = ReserveLogic.InterestRateMode(rateMode);
+ DataTypes.InterestRateMode interestRateMode = DataTypes.InterestRateMode(rateMode);
ValidationLogic.validateSwapRateMode(
reserve,
@@ -298,8 +305,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.updateState();
- if (interestRateMode == ReserveLogic.InterestRateMode.STABLE) {
- //burn stable rate tokens, mint variable rate tokens
+ if (interestRateMode == DataTypes.InterestRateMode.STABLE) {
IStableDebtToken(reserve.stableDebtTokenAddress).burn(msg.sender, stableDebt);
IVariableDebtToken(reserve.variableDebtTokenAddress).mint(
msg.sender,
@@ -308,7 +314,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.variableBorrowIndex
);
} else {
- //do the opposite
IVariableDebtToken(reserve.variableDebtTokenAddress).burn(
msg.sender,
variableDebt,
@@ -328,15 +333,16 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev rebalances the stable interest rate of a user. Users can be rebalanced if the following conditions are satisfied:
- * 1. Usage ratio is above 95%
- * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been
- * borrowed at a stable rate and depositors are not earning enough.
- * @param asset the address of the reserve
- * @param user the address of the user to be rebalanced
+ * @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.
+ * - Users can be rebalanced if the following conditions are satisfied:
+ * 1. Usage ratio is above 95%
+ * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been
+ * borrowed at a stable rate and depositors are not earning enough
+ * @param asset The address of the underlying asset borrowed
+ * @param user The address of the user to be rebalanced
**/
function rebalanceStableBorrowRate(address asset, address user) external override whenNotPaused {
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
IERC20 stableDebtToken = IERC20(reserve.stableDebtTokenAddress);
IERC20 variableDebtToken = IERC20(reserve.variableDebtTokenAddress);
@@ -368,16 +374,16 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev allows depositors to enable or disable a specific deposit as collateral.
- * @param asset the address of the reserve
- * @param useAsCollateral true if the user wants to use the deposit as collateral, false otherwise.
+ * @dev Allows depositors to enable/disable a specific deposited asset as collateral
+ * @param asset The address of the underlying asset deposited
+ * @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise
**/
function setUserUseReserveAsCollateral(address asset, bool useAsCollateral)
external
override
whenNotPaused
{
- ReserveLogic.ReserveData storage reserve = _reserves[asset];
+ DataTypes.ReserveData storage reserve = _reserves[asset];
ValidationLogic.validateSetUseReserveAsCollateral(
reserve,
@@ -400,19 +406,21 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev users can invoke this function to liquidate an undercollateralized position.
- * @param asset the address of the collateral to liquidated
- * @param asset the address of the principal reserve
- * @param user the address of the borrower
- * @param purchaseAmount the amount of principal that the liquidator wants to repay
- * @param receiveAToken true if the liquidators wants to receive the aTokens, false if
- * he wants to receive the underlying asset directly
+ * @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1
+ * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives
+ * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk
+ * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
+ * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
+ * @param user The address of the borrower getting liquidated
+ * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
+ * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants
+ * to receive the underlying collateral asset directly
**/
function liquidationCall(
- address collateral,
- address asset,
+ address collateralAsset,
+ address debtAsset,
address user,
- uint256 purchaseAmount,
+ uint256 debtToCover,
bool receiveAToken
) external override whenNotPaused {
address collateralManager = _addressesProvider.getLendingPoolCollateralManager();
@@ -421,10 +429,10 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
(bool success, bytes memory result) = collateralManager.delegatecall(
abi.encodeWithSignature(
'liquidationCall(address,address,address,uint256,bool)',
- collateral,
- asset,
+ collateralAsset,
+ debtAsset,
user,
- purchaseAmount,
+ debtToCover,
receiveAToken
)
);
@@ -448,16 +456,21 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev allows smartcontracts to access the liquidity of the pool within one transaction,
- * as long as the amount taken plus a fee is returned. NOTE There are security concerns for developers of flashloan receiver contracts
- * that must be kept into consideration. For further details please visit https://developers.aave.com
- * @param receiverAddress The address of the contract receiving the funds. The receiver should implement the IFlashLoanReceiver interface.
- * @param assets The addresss of the assets being flashborrowed
- * @param amounts The amounts requested for this flashloan for each asset
- * @param modes Types of the debt to open if the flash loan is not returned. 0 -> Don't open any debt, just revert, 1 -> stable, 2 -> variable
- * @param onBehalfOf If mode is not 0, then the address to take the debt onBehalfOf. The onBehalfOf address must already have approved `msg.sender` to incur the debt on their behalf.
+ * @dev Allows smartcontracts to access the liquidity of the pool within one transaction,
+ * as long as the amount taken plus a fee is returned.
+ * IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration.
+ * For further details please visit https://developers.aave.com
+ * @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface
+ * @param assets The addresses of the assets being flash-borrowed
+ * @param amounts The amounts amounts being flash-borrowed
+ * @param modes Types of the debt to open if the flash loan is not returned:
+ * 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver
+ * 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
+ * 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address
+ * @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2
* @param params Variadic packed params to pass to the receiver as extra information
- * @param referralCode Referral code of the flash loan
+ * @param referralCode Code used to register the integrator originating the operation, for potential rewards.
+ * 0 if the action is executed directly by the user, without any middle-man
**/
function flashLoan(
address receiverAddress,
@@ -482,11 +495,9 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
premiums[vars.i] = amounts[vars.i].mul(FLASHLOAN_PREMIUM_TOTAL).div(10000);
- //transfer funds to the receiver
IAToken(aTokenAddresses[vars.i]).transferUnderlyingTo(receiverAddress, amounts[vars.i]);
}
- //execute action of the receiver
require(
vars.receiver.executeOperation(assets, amounts, premiums, msg.sender, params),
Errors.LP_INVALID_FLASH_LOAN_EXECUTOR_RETURN
@@ -499,7 +510,7 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
vars.currentATokenAddress = aTokenAddresses[vars.i];
vars.currentAmountPlusPremium = vars.currentAmount.add(vars.currentPremium);
- if (ReserveLogic.InterestRateMode(modes[vars.i]) == ReserveLogic.InterestRateMode.NONE) {
+ if (DataTypes.InterestRateMode(modes[vars.i]) == DataTypes.InterestRateMode.NONE) {
_reserves[vars.currentAsset].updateState();
_reserves[vars.currentAsset].cumulateToLiquidityIndex(
IERC20(vars.currentATokenAddress).totalSupply(),
@@ -518,8 +529,8 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
vars.currentAmountPlusPremium
);
} else {
- //if the user didn't choose to return the funds, the system checks if there
- //is enough collateral and eventually open a position
+ // If the user chose to not return the funds, the system checks if there is enough collateral and
+ // eventually opens a debt position
_executeBorrow(
ExecuteBorrowParams(
vars.currentAsset,
@@ -545,22 +556,22 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev returns the state and configuration of the reserve
- * @param asset the address of the reserve
- * @return the state of the reserve
+ * @dev Returns the state and configuration of the reserve
+ * @param asset The address of the underlying asset of the reserve
+ * @return The state of the reserve
**/
function getReserveData(address asset)
external
- override
view
- returns (ReserveLogic.ReserveData memory)
+ override
+ returns (DataTypes.ReserveData memory)
{
return _reserves[asset];
}
/**
- * @dev returns the user account data across all the reserves
- * @param user the address of the user
+ * @dev Returns the user account data across all the reserves
+ * @param user The address of the user
* @return totalCollateralETH the total collateral in ETH of the user
* @return totalDebtETH the total debt in ETH of the user
* @return availableBorrowsETH the borrowing power left of the user
@@ -570,8 +581,8 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
**/
function getUserAccountData(address user)
external
- override
view
+ override
returns (
uint256 totalCollateralETH,
uint256 totalDebtETH,
@@ -604,57 +615,57 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev returns the configuration of the reserve
- * @param asset the address of the reserve
- * @return the configuration of the reserve
+ * @dev Returns the configuration of the reserve
+ * @param asset The address of the underlying asset of the reserve
+ * @return The configuration of the reserve
**/
function getConfiguration(address asset)
external
- override
view
- returns (ReserveConfiguration.Map memory)
+ override
+ returns (DataTypes.ReserveConfigurationMap memory)
{
return _reserves[asset].configuration;
}
/**
- * @dev returns the configuration of the user across all the reserves
- * @param user the user
- * @return the configuration of the user
+ * @dev Returns the configuration of the user across all the reserves
+ * @param user The user address
+ * @return The configuration of the user
**/
function getUserConfiguration(address user)
external
- override
view
- returns (UserConfiguration.Map memory)
+ override
+ returns (DataTypes.UserConfigurationMap memory)
{
return _usersConfig[user];
}
/**
- * @dev returns the normalized income per unit of asset
- * @param asset the address of the reserve
- * @return the reserve normalized income
+ * @dev Returns the normalized income per unit of asset
+ * @param asset The address of the underlying asset of the reserve
+ * @return The reserve's normalized income
*/
function getReserveNormalizedIncome(address asset)
external
+ view
virtual
override
- view
returns (uint256)
{
return _reserves[asset].getNormalizedIncome();
}
/**
- * @dev returns the normalized variable debt per unit of asset
- * @param asset the address of the reserve
- * @return the reserve normalized debt
+ * @dev Returns the normalized variable debt per unit of asset
+ * @param asset The address of the underlying asset of the reserve
+ * @return The reserve normalized variable debt
*/
function getReserveNormalizedVariableDebt(address asset)
external
- override
view
+ override
returns (uint256)
{
return _reserves[asset].getNormalizedDebt();
@@ -663,14 +674,14 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
/**
* @dev Returns if the LendingPool is paused
*/
- function paused() external override view returns (bool) {
+ function paused() external view override returns (bool) {
return _paused;
}
/**
- * @dev returns the list of the initialized reserves
+ * @dev Returns the list of the initialized reserves
**/
- function getReservesList() external override view returns (address[] memory) {
+ function getReservesList() external view override returns (address[] memory) {
address[] memory _activeReserves = new address[](_reservesCount);
for (uint256 i = 0; i < _reservesCount; i++) {
@@ -680,20 +691,21 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev returns the addresses provider
+ * @dev Returns the cached LendingPoolAddressesProvider connected to this contract
**/
- function getAddressesProvider() external override view returns (ILendingPoolAddressesProvider) {
+ function getAddressesProvider() external view override returns (ILendingPoolAddressesProvider) {
return _addressesProvider;
}
/**
- * @dev validates and finalizes an aToken transfer
- * @param asset the address of the reserve
- * @param from the user from which the aTokens are transferred
- * @param to the user receiving the aTokens
- * @param amount the amount being transferred/redeemed
- * @param balanceFromBefore the balance of the from user before the transfer
- * @param balanceToBefore the balance of the to user before the transfer
+ * @dev Validates and finalizes an aToken transfer
+ * - Only callable by the overlying aToken of the `asset`
+ * @param asset The address of the underlying asset of the aToken
+ * @param from The user from which the aTokens are transferred
+ * @param to The user receiving the aTokens
+ * @param amount The amount being transferred/withdrawn
+ * @param balanceFromBefore The aToken balance of the `from` user before the transfer
+ * @param balanceToBefore The aToken balance of the `to` user before the transfer
*/
function finalizeTransfer(
address asset,
@@ -718,13 +730,13 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
if (from != to) {
if (balanceFromBefore.sub(amount) == 0) {
- UserConfiguration.Map storage fromConfig = _usersConfig[from];
+ DataTypes.UserConfigurationMap storage fromConfig = _usersConfig[from];
fromConfig.setUsingAsCollateral(reserveId, false);
emit ReserveUsedAsCollateralDisabled(asset, from);
}
if (balanceToBefore == 0 && amount != 0) {
- UserConfiguration.Map storage toConfig = _usersConfig[to];
+ DataTypes.UserConfigurationMap storage toConfig = _usersConfig[to];
toConfig.setUsingAsCollateral(reserveId, true);
emit ReserveUsedAsCollateralEnabled(asset, to);
}
@@ -732,10 +744,14 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev initializes a reserve
- * @param asset the address of the reserve
- * @param aTokenAddress the address of the overlying aToken contract
- * @param interestRateStrategyAddress the address of the interest rate strategy contract
+ * @dev Initializes a reserve, activating it, assigning an aToken and debt tokens and an
+ * interest rate strategy
+ * - Only callable by the LendingPoolConfigurator contract
+ * @param asset The address of the underlying asset of the reserve
+ * @param aTokenAddress The address of the aToken that will be assigned to the reserve
+ * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve
+ * @param aTokenAddress The address of the VariableDebtToken that will be assigned to the reserve
+ * @param interestRateStrategyAddress The address of the interest rate strategy contract
**/
function initReserve(
address asset,
@@ -755,9 +771,10 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev updates the address of the interest rate strategy contract
- * @param asset the address of the reserve
- * @param rateStrategyAddress the address of the interest rate strategy contract
+ * @dev Updates the address of the interest rate strategy contract
+ * - Only callable by the LendingPoolConfigurator contract
+ * @param asset The address of the underlying asset of the reserve
+ * @param rateStrategyAddress The address of the interest rate strategy contract
**/
function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress)
external
@@ -768,9 +785,10 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev sets the configuration map of the reserve
- * @param asset the address of the reserve
- * @param configuration the configuration map
+ * @dev Sets the configuration bitmap of the reserve as a whole
+ * - Only callable by the LendingPoolConfigurator contract
+ * @param asset The address of the underlying asset of the reserve
+ * @param configuration The new configuration bitmap
**/
function setConfiguration(address asset, uint256 configuration)
external
@@ -781,8 +799,9 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
/**
- * @dev Set the _pause state
- * @param val the boolean value to set the current pause state of LendingPool
+ * @dev Set the _pause state of a reserve
+ * - Only callable by the LendingPoolConfigurator contract
+ * @param val `true` to pause the reserve, `false` to un-pause it
*/
function setPause(bool val) external override onlyLendingPoolConfigurator {
_paused = val;
@@ -793,7 +812,6 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
}
}
- // internal functions
struct ExecuteBorrowParams {
address asset;
address user;
@@ -805,19 +823,16 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
bool releaseUnderlying;
}
- /**
- * @dev Internal function to execute a borrowing action, allowing to transfer or not the underlying
- * @param vars Input struct for the borrowing action, in order to avoid STD errors
- **/
function _executeBorrow(ExecuteBorrowParams memory vars) internal {
- ReserveLogic.ReserveData storage reserve = _reserves[vars.asset];
- UserConfiguration.Map storage userConfig = _usersConfig[vars.onBehalfOf];
+ DataTypes.ReserveData storage reserve = _reserves[vars.asset];
+ DataTypes.UserConfigurationMap storage userConfig = _usersConfig[vars.onBehalfOf];
address oracle = _addressesProvider.getPriceOracle();
- uint256 amountInETH = IPriceOracleGetter(oracle).getAssetPrice(vars.asset).mul(vars.amount).div(
- 10**reserve.configuration.getDecimals()
- );
+ uint256 amountInETH =
+ IPriceOracleGetter(oracle).getAssetPrice(vars.asset).mul(vars.amount).div(
+ 10**reserve.configuration.getDecimals()
+ );
ValidationLogic.validateBorrow(
vars.asset,
@@ -836,12 +851,11 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
reserve.updateState();
- //caching the current stable borrow rate
uint256 currentStableRate = 0;
bool isFirstBorrowing = false;
if (
- ReserveLogic.InterestRateMode(vars.interestRateMode) == ReserveLogic.InterestRateMode.STABLE
+ DataTypes.InterestRateMode(vars.interestRateMode) == DataTypes.InterestRateMode.STABLE
) {
currentStableRate = reserve.currentStableBorrowRate;
@@ -881,16 +895,13 @@ contract LendingPool is VersionedInitializable, ILendingPool, LendingPoolStorage
vars.onBehalfOf,
vars.amount,
vars.interestRateMode,
- ReserveLogic.InterestRateMode(vars.interestRateMode) == ReserveLogic.InterestRateMode.STABLE
+ DataTypes.InterestRateMode(vars.interestRateMode) == DataTypes.InterestRateMode.STABLE
? currentStableRate
: reserve.currentVariableBorrowRate,
vars.referralCode
);
}
- /**
- * @dev adds a reserve to the array of the _reserves address
- **/
function _addReserveToList(address asset) internal {
uint256 reservesCount = _reservesCount;
diff --git a/contracts/protocol/lendingpool/LendingPoolCollateralManager.sol b/contracts/protocol/lendingpool/LendingPoolCollateralManager.sol
new file mode 100644
index 00000000..9606bb39
--- /dev/null
+++ b/contracts/protocol/lendingpool/LendingPoolCollateralManager.sol
@@ -0,0 +1,309 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity 0.6.12;
+
+import {SafeMath} from '../../dependencies/openzeppelin/contracts//SafeMath.sol';
+import {IERC20} from '../../dependencies/openzeppelin/contracts//IERC20.sol';
+import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
+import {IAToken} from '../tokenization/interfaces/IAToken.sol';
+import {IStableDebtToken} from '../tokenization/interfaces/IStableDebtToken.sol';
+import {IVariableDebtToken} from '../tokenization/interfaces/IVariableDebtToken.sol';
+import {IPriceOracleGetter} from '../../interfaces/IPriceOracleGetter.sol';
+import {ILendingPoolCollateralManager} from '../../interfaces/ILendingPoolCollateralManager.sol';
+import {GenericLogic} from '../libraries/logic/GenericLogic.sol';
+import {Helpers} from '../libraries/helpers/Helpers.sol';
+import {WadRayMath} from '../libraries/math/WadRayMath.sol';
+import {PercentageMath} from '../libraries/math/PercentageMath.sol';
+import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
+import {Errors} from '../libraries/helpers/Errors.sol';
+import {ValidationLogic} from '../libraries/logic/ValidationLogic.sol';
+import {LendingPoolStorage} from './LendingPoolStorage.sol';
+import {DataTypes} from '../libraries/types/DataTypes.sol';
+
+/**
+ * @title LendingPoolCollateralManager contract
+ * @author Aave
+ * @dev Implements actions involving management of collateral in the protocol, the main one being the liquidations
+ * IMPORTANT This contract will run always via DELEGATECALL, through the LendingPool, so the chain of inheritance
+ * is the same as the LendingPool, to have compatible storage layouts
+ **/
+contract LendingPoolCollateralManager is
+ ILendingPoolCollateralManager,
+ VersionedInitializable,
+ LendingPoolStorage
+{
+ using SafeERC20 for IERC20;
+ using SafeMath for uint256;
+ using WadRayMath for uint256;
+ using PercentageMath for uint256;
+
+ uint256 internal constant LIQUIDATION_CLOSE_FACTOR_PERCENT = 5000;
+
+ struct LiquidationCallLocalVars {
+ uint256 userCollateralBalance;
+ uint256 userStableDebt;
+ uint256 userVariableDebt;
+ uint256 maxLiquidatableDebt;
+ uint256 actualDebtToLiquidate;
+ uint256 liquidationRatio;
+ uint256 maxAmountCollateralToLiquidate;
+ uint256 userStableRate;
+ uint256 maxCollateralToLiquidate;
+ uint256 debtAmountNeeded;
+ uint256 healthFactor;
+ IAToken collateralAtoken;
+ bool isCollateralEnabled;
+ DataTypes.InterestRateMode borrowRateMode;
+ uint256 errorCode;
+ string errorMsg;
+ }
+
+ /**
+ * @dev As thIS contract extends the VersionedInitializable contract to match the state
+ * of the LendingPool contract, the getRevision() function is needed, but the value is not
+ * important, as the initialize() function will never be called here
+ */
+ function getRevision() internal pure override returns (uint256) {
+ return 0;
+ }
+
+ /**
+ * @dev Function to liquidate a position if its Health Factor drops below 1
+ * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives
+ * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk
+ * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
+ * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
+ * @param user The address of the borrower getting liquidated
+ * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
+ * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants
+ * to receive the underlying collateral asset directly
+ **/
+ function liquidationCall(
+ address collateralAsset,
+ address debtAsset,
+ address user,
+ uint256 debtToCover,
+ bool receiveAToken
+ ) external override returns (uint256, string memory) {
+ DataTypes.ReserveData storage collateralReserve = _reserves[collateralAsset];
+ DataTypes.ReserveData storage debtReserve = _reserves[debtAsset];
+ DataTypes.UserConfigurationMap storage userConfig = _usersConfig[user];
+
+ LiquidationCallLocalVars memory vars;
+
+ (, , , , vars.healthFactor) = GenericLogic.calculateUserAccountData(
+ user,
+ _reserves,
+ userConfig,
+ _reservesList,
+ _reservesCount,
+ _addressesProvider.getPriceOracle()
+ );
+
+ (vars.userStableDebt, vars.userVariableDebt) = Helpers.getUserCurrentDebt(user, debtReserve);
+
+ (vars.errorCode, vars.errorMsg) = ValidationLogic.validateLiquidationCall(
+ collateralReserve,
+ debtReserve,
+ userConfig,
+ vars.healthFactor,
+ vars.userStableDebt,
+ vars.userVariableDebt
+ );
+
+ if (Errors.CollateralManagerErrors(vars.errorCode) != Errors.CollateralManagerErrors.NO_ERROR) {
+ return (vars.errorCode, vars.errorMsg);
+ }
+
+ vars.collateralAtoken = IAToken(collateralReserve.aTokenAddress);
+
+ vars.userCollateralBalance = vars.collateralAtoken.balanceOf(user);
+
+ vars.maxLiquidatableDebt = vars.userStableDebt.add(vars.userVariableDebt).percentMul(
+ LIQUIDATION_CLOSE_FACTOR_PERCENT
+ );
+
+ vars.actualDebtToLiquidate = debtToCover > vars.maxLiquidatableDebt
+ ? vars.maxLiquidatableDebt
+ : debtToCover;
+
+ (
+ vars.maxCollateralToLiquidate,
+ vars.debtAmountNeeded
+ ) = _calculateAvailableCollateralToLiquidate(
+ collateralReserve,
+ debtReserve,
+ collateralAsset,
+ debtAsset,
+ vars.actualDebtToLiquidate,
+ vars.userCollateralBalance
+ );
+
+ // If debtAmountNeeded < actualDebtToLiquidate, there isn't enough
+ // collateral to cover the actual amount that is being liquidated, hence we liquidate
+ // a smaller amount
+
+ if (vars.debtAmountNeeded < vars.actualDebtToLiquidate) {
+ vars.actualDebtToLiquidate = vars.debtAmountNeeded;
+ }
+
+ // If the liquidator reclaims the underlying asset, we make sure there is enough available liquidity in the
+ // collateral reserve
+ if (!receiveAToken) {
+ uint256 currentAvailableCollateral =
+ IERC20(collateralAsset).balanceOf(address(vars.collateralAtoken));
+ if (currentAvailableCollateral < vars.maxCollateralToLiquidate) {
+ return (
+ uint256(Errors.CollateralManagerErrors.NOT_ENOUGH_LIQUIDITY),
+ Errors.LPCM_NOT_ENOUGH_LIQUIDITY_TO_LIQUIDATE
+ );
+ }
+ }
+
+ debtReserve.updateState();
+
+ if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {
+ IVariableDebtToken(debtReserve.variableDebtTokenAddress).burn(
+ user,
+ vars.actualDebtToLiquidate,
+ debtReserve.variableBorrowIndex
+ );
+ } else {
+ // If the user doesn't have variable debt, no need to try to burn variable debt tokens
+ if (vars.userVariableDebt > 0) {
+ IVariableDebtToken(debtReserve.variableDebtTokenAddress).burn(
+ user,
+ vars.userVariableDebt,
+ debtReserve.variableBorrowIndex
+ );
+ }
+ IStableDebtToken(debtReserve.stableDebtTokenAddress).burn(
+ user,
+ vars.actualDebtToLiquidate.sub(vars.userVariableDebt)
+ );
+ }
+
+ debtReserve.updateInterestRates(
+ debtAsset,
+ debtReserve.aTokenAddress,
+ vars.actualDebtToLiquidate,
+ 0
+ );
+
+ if (receiveAToken) {
+ vars.collateralAtoken.transferOnLiquidation(user, msg.sender, vars.maxCollateralToLiquidate);
+ } else {
+ collateralReserve.updateState();
+ collateralReserve.updateInterestRates(
+ collateralAsset,
+ address(vars.collateralAtoken),
+ 0,
+ vars.maxCollateralToLiquidate
+ );
+
+ // Burn the equivalent amount of aToken, sending the underlying to the liquidator
+ vars.collateralAtoken.burn(
+ user,
+ msg.sender,
+ vars.maxCollateralToLiquidate,
+ collateralReserve.liquidityIndex
+ );
+ }
+
+ // If the collateral being liquidated is equal to the user balance,
+ // we set the currency as not being used as collateral anymore
+ if (vars.maxCollateralToLiquidate == vars.userCollateralBalance) {
+ userConfig.setUsingAsCollateral(collateralReserve.id, false);
+ emit ReserveUsedAsCollateralDisabled(collateralAsset, user);
+ }
+
+ // Transfers the debt asset being repaid to the aToken, where the liquidity is kept
+ IERC20(debtAsset).safeTransferFrom(
+ msg.sender,
+ debtReserve.aTokenAddress,
+ vars.actualDebtToLiquidate
+ );
+
+ emit LiquidationCall(
+ collateralAsset,
+ debtAsset,
+ user,
+ vars.actualDebtToLiquidate,
+ vars.maxCollateralToLiquidate,
+ msg.sender,
+ receiveAToken
+ );
+
+ return (uint256(Errors.CollateralManagerErrors.NO_ERROR), Errors.LPCM_NO_ERRORS);
+ }
+
+ struct AvailableCollateralToLiquidateLocalVars {
+ uint256 userCompoundedBorrowBalance;
+ uint256 liquidationBonus;
+ uint256 collateralPrice;
+ uint256 debtAssetPrice;
+ uint256 maxAmountCollateralToLiquidate;
+ uint256 debtAssetDecimals;
+ uint256 collateralDecimals;
+ }
+
+ /**
+ * @dev Calculates how much of a specific collateral can be liquidated, given
+ * a certain amount of debt asset.
+ * - This function needs to be called after all the checks to validate the liquidation have been performed,
+ * otherwise it might fail.
+ * @param collateralReserve The data of the collateral reserve
+ * @param debtReserve The data of the debt reserve
+ * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation
+ * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation
+ * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover
+ * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated
+ * @return collateralAmount: The maximum amount that is possible to liquidate given all the liquidation constraints
+ * (user balance, close factor)
+ * debtAmountNeeded: The amount to repay with the liquidation
+ **/
+ function _calculateAvailableCollateralToLiquidate(
+ DataTypes.ReserveData storage collateralReserve,
+ DataTypes.ReserveData storage debtReserve,
+ address collateralAsset,
+ address debtAsset,
+ uint256 debtToCover,
+ uint256 userCollateralBalance
+ ) internal view returns (uint256, uint256) {
+ uint256 collateralAmount = 0;
+ uint256 debtAmountNeeded = 0;
+ IPriceOracleGetter oracle = IPriceOracleGetter(_addressesProvider.getPriceOracle());
+
+ AvailableCollateralToLiquidateLocalVars memory vars;
+
+ vars.collateralPrice = oracle.getAssetPrice(collateralAsset);
+ vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);
+
+ (, , vars.liquidationBonus, vars.collateralDecimals, ) = collateralReserve
+ .configuration
+ .getParams();
+ vars.debtAssetDecimals = debtReserve.configuration.getDecimals();
+
+ // This is the maximum possible amount of the selected collateral that can be liquidated, given the
+ // max amount of liquidatable debt
+ vars.maxAmountCollateralToLiquidate = vars
+ .debtAssetPrice
+ .mul(debtToCover)
+ .mul(10**vars.collateralDecimals)
+ .percentMul(vars.liquidationBonus)
+ .div(vars.collateralPrice.mul(10**vars.debtAssetDecimals));
+
+ if (vars.maxAmountCollateralToLiquidate > userCollateralBalance) {
+ collateralAmount = userCollateralBalance;
+ debtAmountNeeded = vars
+ .collateralPrice
+ .mul(collateralAmount)
+ .mul(10**vars.debtAssetDecimals)
+ .div(vars.debtAssetPrice.mul(10**vars.collateralDecimals))
+ .percentDiv(vars.liquidationBonus);
+ } else {
+ collateralAmount = vars.maxAmountCollateralToLiquidate;
+ debtAmountNeeded = debtToCover;
+ }
+ return (collateralAmount, debtAmountNeeded);
+ }
+}
diff --git a/contracts/lendingpool/LendingPoolConfigurator.sol b/contracts/protocol/lendingpool/LendingPoolConfigurator.sol
similarity index 84%
rename from contracts/lendingpool/LendingPoolConfigurator.sol
rename to contracts/protocol/lendingpool/LendingPoolConfigurator.sol
index b24f2cbc..b31b067f 100644
--- a/contracts/lendingpool/LendingPoolConfigurator.sol
+++ b/contracts/protocol/lendingpool/LendingPoolConfigurator.sol
@@ -1,20 +1,20 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {SafeMath} from '../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
import {
InitializableImmutableAdminUpgradeabilityProxy
} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
-import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
-import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
+import {ILendingPool} from '../../interfaces/ILendingPool.sol';
import {ITokenConfiguration} from '../tokenization/interfaces/ITokenConfiguration.sol';
-import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
+import {IERC20Detailed} from '../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
import {Errors} from '../libraries/helpers/Errors.sol';
import {PercentageMath} from '../libraries/math/PercentageMath.sol';
-import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
+import {DataTypes} from '../libraries/types/DataTypes.sol';
/**
* @title LendingPoolConfigurator contract
@@ -25,7 +25,7 @@ import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
contract LendingPoolConfigurator is VersionedInitializable {
using SafeMath for uint256;
- using ReserveConfiguration for ReserveConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
/**
* @dev emitted when a reserve is initialized.
@@ -105,14 +105,14 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
event ReserveUnfrozen(address indexed asset);
-
+
/**
* @dev emitted when a reserve factor is updated
* @param asset the address of the reserve
* @param factor the new reserve factor
**/
event ReserveFactorChanged(address indexed asset, uint256 factor);
-
+
/**
* @dev emitted when the reserve decimals are updated
* @param asset the address of the reserve
@@ -187,7 +187,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
uint256 internal constant CONFIGURATOR_REVISION = 0x3;
- function getRevision() internal override pure returns (uint256) {
+ function getRevision() internal pure override returns (uint256) {
return CONFIGURATOR_REVISION;
}
@@ -236,15 +236,11 @@ contract LendingPoolConfigurator is VersionedInitializable {
address aTokenProxyAddress = _initTokenWithProxy(aTokenImpl, underlyingAssetDecimals);
- address stableDebtTokenProxyAddress = _initTokenWithProxy(
- stableDebtTokenImpl,
- underlyingAssetDecimals
- );
+ address stableDebtTokenProxyAddress =
+ _initTokenWithProxy(stableDebtTokenImpl, underlyingAssetDecimals);
- address variableDebtTokenProxyAddress = _initTokenWithProxy(
- variableDebtTokenImpl,
- underlyingAssetDecimals
- );
+ address variableDebtTokenProxyAddress =
+ _initTokenWithProxy(variableDebtTokenImpl, underlyingAssetDecimals);
pool.initReserve(
asset,
@@ -254,7 +250,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
interestRateStrategyAddress
);
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setDecimals(underlyingAssetDecimals);
@@ -278,7 +274,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param implementation the address of the new aToken implementation
**/
function updateAToken(address asset, address implementation) external onlyPoolAdmin {
- ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
+ DataTypes.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.aTokenAddress, implementation);
@@ -291,7 +287,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param implementation the address of the new aToken implementation
**/
function updateStableDebtToken(address asset, address implementation) external onlyPoolAdmin {
- ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
+ DataTypes.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.stableDebtTokenAddress, implementation);
@@ -304,7 +300,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param implementation the address of the new aToken implementation
**/
function updateVariableDebtToken(address asset, address implementation) external onlyPoolAdmin {
- ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
+ DataTypes.ReserveData memory reserveData = pool.getReserveData(asset);
_upgradeTokenImplementation(asset, reserveData.variableDebtTokenAddress, implementation);
@@ -320,7 +316,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
external
onlyPoolAdmin
{
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setBorrowingEnabled(true);
currentConfig.setStableRateBorrowingEnabled(stableBorrowRateEnabled);
@@ -335,7 +331,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function disableBorrowingOnReserve(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setBorrowingEnabled(false);
@@ -358,7 +354,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
uint256 liquidationThreshold,
uint256 liquidationBonus
) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
//validation of the parameters: the LTV can
//only be lower or equal than the liquidation threshold
@@ -368,13 +364,16 @@ contract LendingPoolConfigurator is VersionedInitializable {
if (liquidationThreshold != 0) {
//liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less
//collateral than needed to cover the debt.
- uint256 absoluteBonus = liquidationBonus.sub(PercentageMath.PERCENTAGE_FACTOR, Errors.LPC_INVALID_CONFIGURATION);
+ uint256 absoluteBonus =
+ liquidationBonus.sub(PercentageMath.PERCENTAGE_FACTOR, Errors.LPC_INVALID_CONFIGURATION);
require(absoluteBonus > 0, Errors.LPC_INVALID_CONFIGURATION);
//we also need to require that the liq threshold is lower or equal than the liquidation bonus, to ensure that
//there is always enough margin for liquidators to receive the bonus.
- require(liquidationThreshold.add(absoluteBonus) <= PercentageMath.PERCENTAGE_FACTOR, Errors.LPC_INVALID_CONFIGURATION);
-
+ require(
+ liquidationThreshold.add(absoluteBonus) <= PercentageMath.PERCENTAGE_FACTOR,
+ Errors.LPC_INVALID_CONFIGURATION
+ );
} else {
require(liquidationBonus == 0, Errors.LPC_INVALID_CONFIGURATION);
//if the liquidation threshold is being set to 0,
@@ -397,7 +396,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function enableReserveStableRate(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setStableRateBorrowingEnabled(true);
@@ -411,7 +410,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function disableReserveStableRate(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setStableRateBorrowingEnabled(false);
@@ -425,7 +424,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function activateReserve(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setActive(true);
@@ -441,7 +440,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
function deactivateReserve(address asset) external onlyPoolAdmin {
_checkNoLiquidity(asset);
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setActive(false);
@@ -455,7 +454,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function freezeReserve(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setFrozen(true);
@@ -469,7 +468,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param asset the address of the reserve
**/
function unfreezeReserve(address asset) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setFrozen(false);
@@ -484,7 +483,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param reserveFactor the new reserve factor of the reserve
**/
function setReserveFactor(address asset, uint256 reserveFactor) external onlyPoolAdmin {
- ReserveConfiguration.Map memory currentConfig = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory currentConfig = pool.getConfiguration(asset);
currentConfig.setReserveFactor(reserveFactor);
@@ -512,16 +511,16 @@ contract LendingPoolConfigurator is VersionedInitializable {
* @param decimals the decimals of the token
**/
function _initTokenWithProxy(address implementation, uint8 decimals) internal returns (address) {
+ InitializableImmutableAdminUpgradeabilityProxy proxy =
+ new InitializableImmutableAdminUpgradeabilityProxy(address(this));
- InitializableImmutableAdminUpgradeabilityProxy proxy
- = new InitializableImmutableAdminUpgradeabilityProxy(address(this));
-
- bytes memory params = abi.encodeWithSignature(
- 'initialize(uint8,string,string)',
- decimals,
- IERC20Detailed(implementation).name(),
- IERC20Detailed(implementation).symbol()
- );
+ bytes memory params =
+ abi.encodeWithSignature(
+ 'initialize(uint8,string,string)',
+ decimals,
+ IERC20Detailed(implementation).name(),
+ IERC20Detailed(implementation).symbol()
+ );
proxy.initialize(implementation, params);
@@ -533,20 +532,20 @@ contract LendingPoolConfigurator is VersionedInitializable {
address proxyAddress,
address implementation
) internal {
+ InitializableImmutableAdminUpgradeabilityProxy proxy =
+ InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));
- InitializableImmutableAdminUpgradeabilityProxy proxy
- = InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));
-
- ReserveConfiguration.Map memory configuration = pool.getConfiguration(asset);
+ DataTypes.ReserveConfigurationMap memory configuration = pool.getConfiguration(asset);
(, , , uint256 decimals, ) = configuration.getParamsMemory();
- bytes memory params = abi.encodeWithSignature(
- 'initialize(uint8,string,string)',
- uint8(decimals),
- IERC20Detailed(implementation).name(),
- IERC20Detailed(implementation).symbol()
- );
+ bytes memory params =
+ abi.encodeWithSignature(
+ 'initialize(uint8,string,string)',
+ uint8(decimals),
+ IERC20Detailed(implementation).name(),
+ IERC20Detailed(implementation).symbol()
+ );
proxy.upgradeToAndCall(implementation, params);
}
@@ -560,7 +559,7 @@ contract LendingPoolConfigurator is VersionedInitializable {
}
function _checkNoLiquidity(address asset) internal view {
- ReserveLogic.ReserveData memory reserveData = pool.getReserveData(asset);
+ DataTypes.ReserveData memory reserveData = pool.getReserveData(asset);
uint256 availableLiquidity = IERC20Detailed(asset).balanceOf(reserveData.aTokenAddress);
diff --git a/contracts/lendingpool/LendingPoolStorage.sol b/contracts/protocol/lendingpool/LendingPoolStorage.sol
similarity index 53%
rename from contracts/lendingpool/LendingPoolStorage.sol
rename to contracts/protocol/lendingpool/LendingPoolStorage.sol
index 5ea45c6e..4edff4a3 100644
--- a/contracts/lendingpool/LendingPoolStorage.sol
+++ b/contracts/protocol/lendingpool/LendingPoolStorage.sol
@@ -1,20 +1,21 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';
import {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';
import {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';
-import {ILendingPoolAddressesProvider} from '../interfaces/ILendingPoolAddressesProvider.sol';
+import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';
+import {DataTypes} from '../libraries/types/DataTypes.sol';
contract LendingPoolStorage {
- using ReserveLogic for ReserveLogic.ReserveData;
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveLogic for DataTypes.ReserveData;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
ILendingPoolAddressesProvider internal _addressesProvider;
- mapping(address => ReserveLogic.ReserveData) internal _reserves;
- mapping(address => UserConfiguration.Map) internal _usersConfig;
+ mapping(address => DataTypes.ReserveData) internal _reserves;
+ mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;
// the list of the available reserves, structured as a mapping for gas savings reasons
mapping(uint256 => address) internal _reservesList;
diff --git a/contracts/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol b/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol
similarity index 95%
rename from contracts/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol
rename to contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol
index d953dc06..78ad4cbb 100644
--- a/contracts/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol
+++ b/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import '../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';
+import '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';
/**
* @title BaseImmutableAdminUpgradeabilityProxy
diff --git a/contracts/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol b/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol
similarity index 85%
rename from contracts/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol
rename to contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol
index 64036408..00d26f2e 100644
--- a/contracts/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol
+++ b/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import './BaseImmutableAdminUpgradeabilityProxy.sol';
-import '../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';
+import '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';
/**
* @title InitializableAdminUpgradeabilityProxy
diff --git a/contracts/libraries/aave-upgradeability/VersionedInitializable.sol b/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol
similarity index 96%
rename from contracts/libraries/aave-upgradeability/VersionedInitializable.sol
rename to contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol
index 54c43ce6..0e9d83fb 100644
--- a/contracts/libraries/aave-upgradeability/VersionedInitializable.sol
+++ b/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
/**
* @title VersionedInitializable
@@ -51,7 +51,7 @@ abstract contract VersionedInitializable {
/// @dev returns the revision number of the contract.
/// Needs to be defined in the inherited class as a constant.
- function getRevision() internal virtual pure returns (uint256);
+ function getRevision() internal pure virtual returns (uint256);
/// @dev Returns true if and only if the function is running in the constructor
function isConstructor() private view returns (bool) {
diff --git a/contracts/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol
similarity index 81%
rename from contracts/libraries/configuration/ReserveConfiguration.sol
rename to contracts/protocol/libraries/configuration/ReserveConfiguration.sol
index 71c64bde..39df878b 100644
--- a/contracts/libraries/configuration/ReserveConfiguration.sol
+++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol
@@ -1,7 +1,8 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {Errors} from '../helpers/Errors.sol';
+import {DataTypes} from '../types/DataTypes.sol';
/**
* @title ReserveConfiguration library
@@ -35,26 +36,12 @@ library ReserveConfiguration {
uint256 constant MAX_VALID_DECIMALS = 255;
uint256 constant MAX_VALID_RESERVE_FACTOR = 65535;
- struct Map {
- //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-63: reserved
- //bit 64-79: reserve factor
- uint256 data;
- }
-
/**
* @dev sets the Loan to Value of the reserve
* @param self the reserve configuration
* @param ltv the new ltv
**/
- function setLtv(ReserveConfiguration.Map memory self, uint256 ltv) internal pure {
+ function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {
require(ltv <= MAX_VALID_LTV, Errors.RC_INVALID_LTV);
self.data = (self.data & LTV_MASK) | ltv;
@@ -65,7 +52,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the loan to value
**/
- function getLtv(ReserveConfiguration.Map storage self) internal view returns (uint256) {
+ function getLtv(DataTypes.ReserveConfigurationMap storage self) internal view returns (uint256) {
return self.data & ~LTV_MASK;
}
@@ -74,7 +61,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param threshold the new liquidation threshold
**/
- function setLiquidationThreshold(ReserveConfiguration.Map memory self, uint256 threshold)
+ function setLiquidationThreshold(DataTypes.ReserveConfigurationMap memory self, uint256 threshold)
internal
pure
{
@@ -90,7 +77,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the liquidation threshold
**/
- function getLiquidationThreshold(ReserveConfiguration.Map storage self)
+ function getLiquidationThreshold(DataTypes.ReserveConfigurationMap storage self)
internal
view
returns (uint256)
@@ -103,7 +90,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param bonus the new liquidation bonus
**/
- function setLiquidationBonus(ReserveConfiguration.Map memory self, uint256 bonus) internal pure {
+ function setLiquidationBonus(DataTypes.ReserveConfigurationMap memory self, uint256 bonus) internal pure {
require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.RC_INVALID_LIQ_BONUS);
self.data =
@@ -116,7 +103,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the liquidation bonus
**/
- function getLiquidationBonus(ReserveConfiguration.Map storage self)
+ function getLiquidationBonus(DataTypes.ReserveConfigurationMap storage self)
internal
view
returns (uint256)
@@ -129,7 +116,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param decimals the decimals
**/
- function setDecimals(ReserveConfiguration.Map memory self, uint256 decimals) internal pure {
+ function setDecimals(DataTypes.ReserveConfigurationMap memory self, uint256 decimals) internal pure {
require(decimals <= MAX_VALID_DECIMALS, Errors.RC_INVALID_DECIMALS);
self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);
@@ -140,7 +127,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the decimals of the asset
**/
- function getDecimals(ReserveConfiguration.Map storage self) internal view returns (uint256) {
+ function getDecimals(DataTypes.ReserveConfigurationMap storage self) internal view returns (uint256) {
return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;
}
@@ -149,7 +136,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param active the active state
**/
- function setActive(ReserveConfiguration.Map memory self, bool active) internal pure {
+ function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {
self.data =
(self.data & ACTIVE_MASK) |
(uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);
@@ -160,7 +147,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the active state
**/
- function getActive(ReserveConfiguration.Map storage self) internal view returns (bool) {
+ function getActive(DataTypes.ReserveConfigurationMap storage self) internal view returns (bool) {
return (self.data & ~ACTIVE_MASK) != 0;
}
@@ -169,7 +156,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param frozen the frozen state
**/
- function setFrozen(ReserveConfiguration.Map memory self, bool frozen) internal pure {
+ function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {
self.data =
(self.data & FROZEN_MASK) |
(uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);
@@ -180,7 +167,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the frozen state
**/
- function getFrozen(ReserveConfiguration.Map storage self) internal view returns (bool) {
+ function getFrozen(DataTypes.ReserveConfigurationMap storage self) internal view returns (bool) {
return (self.data & ~FROZEN_MASK) != 0;
}
@@ -189,7 +176,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param enabled true if the borrowing needs to be enabled, false otherwise
**/
- function setBorrowingEnabled(ReserveConfiguration.Map memory self, bool enabled) internal pure {
+ function setBorrowingEnabled(DataTypes.ReserveConfigurationMap memory self, bool enabled) internal pure {
self.data =
(self.data & BORROWING_MASK) |
(uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);
@@ -200,7 +187,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the borrowing state
**/
- function getBorrowingEnabled(ReserveConfiguration.Map storage self) internal view returns (bool) {
+ function getBorrowingEnabled(DataTypes.ReserveConfigurationMap storage self) internal view returns (bool) {
return (self.data & ~BORROWING_MASK) != 0;
}
@@ -209,7 +196,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param enabled true if the stable rate borrowing needs to be enabled, false otherwise
**/
- function setStableRateBorrowingEnabled(ReserveConfiguration.Map memory self, bool enabled)
+ function setStableRateBorrowingEnabled(DataTypes.ReserveConfigurationMap memory self, bool enabled)
internal
pure
{
@@ -223,7 +210,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the stable rate borrowing state
**/
- function getStableRateBorrowingEnabled(ReserveConfiguration.Map storage self)
+ function getStableRateBorrowingEnabled(DataTypes.ReserveConfigurationMap storage self)
internal
view
returns (bool)
@@ -236,7 +223,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @param reserveFactor the reserve factor
**/
- function setReserveFactor(ReserveConfiguration.Map memory self, uint256 reserveFactor)
+ function setReserveFactor(DataTypes.ReserveConfigurationMap memory self, uint256 reserveFactor)
internal
pure
{
@@ -252,7 +239,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the reserve factor
**/
- function getReserveFactor(ReserveConfiguration.Map storage self) internal view returns (uint256) {
+ function getReserveFactor(DataTypes.ReserveConfigurationMap storage self) internal view returns (uint256) {
return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;
}
@@ -261,7 +248,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the state flags representing active, frozen, borrowing enabled, stableRateBorrowing enabled
**/
- function getFlags(ReserveConfiguration.Map storage self)
+ function getFlags(DataTypes.ReserveConfigurationMap storage self)
internal
view
returns (
@@ -286,7 +273,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the state params representing ltv, liquidation threshold, liquidation bonus, the reserve decimals
**/
- function getParams(ReserveConfiguration.Map storage self)
+ function getParams(DataTypes.ReserveConfigurationMap storage self)
internal
view
returns (
@@ -313,7 +300,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the state params representing ltv, liquidation threshold, liquidation bonus, the reserve decimals
**/
- function getParamsMemory(ReserveConfiguration.Map memory self)
+ function getParamsMemory(DataTypes.ReserveConfigurationMap memory self)
internal
pure
returns (
@@ -338,7 +325,7 @@ library ReserveConfiguration {
* @param self the reserve configuration
* @return the state flags representing active, frozen, borrowing enabled, stableRateBorrowing enabled
**/
- function getFlagsMemory(ReserveConfiguration.Map memory self)
+ function getFlagsMemory(DataTypes.ReserveConfigurationMap memory self)
internal
pure
returns (
diff --git a/contracts/libraries/configuration/UserConfiguration.sol b/contracts/protocol/libraries/configuration/UserConfiguration.sol
similarity index 80%
rename from contracts/libraries/configuration/UserConfiguration.sol
rename to contracts/protocol/libraries/configuration/UserConfiguration.sol
index 8679390e..b4af79ad 100644
--- a/contracts/libraries/configuration/UserConfiguration.sol
+++ b/contracts/protocol/libraries/configuration/UserConfiguration.sol
@@ -1,18 +1,17 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {Errors} from '../helpers/Errors.sol';
+import {DataTypes} from '../types/DataTypes.sol';
+
/**
* @title UserConfiguration library
* @author Aave
* @notice Implements the bitmap logic to handle the user configuration
*/
library UserConfiguration {
- uint256 internal constant BORROWING_MASK = 0x5555555555555555555555555555555555555555555555555555555555555555;
-
- struct Map {
- uint256 data;
- }
+ uint256 internal constant BORROWING_MASK =
+ 0x5555555555555555555555555555555555555555555555555555555555555555;
/**
* @dev sets if the user is borrowing the reserve identified by reserveIndex
@@ -21,7 +20,7 @@ library UserConfiguration {
* @param borrowing true if the user is borrowing the reserve, false otherwise
**/
function setBorrowing(
- UserConfiguration.Map storage self,
+ DataTypes.UserConfigurationMap storage self,
uint256 reserveIndex,
bool borrowing
) internal {
@@ -38,7 +37,7 @@ library UserConfiguration {
* @param _usingAsCollateral true if the user is usin the reserve as collateral, false otherwise
**/
function setUsingAsCollateral(
- UserConfiguration.Map storage self,
+ DataTypes.UserConfigurationMap storage self,
uint256 reserveIndex,
bool _usingAsCollateral
) internal {
@@ -54,7 +53,7 @@ library UserConfiguration {
* @param reserveIndex the index of the reserve in the bitmap
* @return true if the user has been using a reserve for borrowing or as collateral, false otherwise
**/
- function isUsingAsCollateralOrBorrowing(UserConfiguration.Map memory self, uint256 reserveIndex)
+ function isUsingAsCollateralOrBorrowing(DataTypes.UserConfigurationMap memory self, uint256 reserveIndex)
internal
pure
returns (bool)
@@ -69,7 +68,7 @@ library UserConfiguration {
* @param reserveIndex the index of the reserve in the bitmap
* @return true if the user has been using a reserve for borrowing, false otherwise
**/
- function isBorrowing(UserConfiguration.Map memory self, uint256 reserveIndex)
+ function isBorrowing(DataTypes.UserConfigurationMap memory self, uint256 reserveIndex)
internal
pure
returns (bool)
@@ -84,7 +83,7 @@ library UserConfiguration {
* @param reserveIndex the index of the reserve in the bitmap
* @return true if the user has been using a reserve as collateral, false otherwise
**/
- function isUsingAsCollateral(UserConfiguration.Map memory self, uint256 reserveIndex)
+ function isUsingAsCollateral(DataTypes.UserConfigurationMap memory self, uint256 reserveIndex)
internal
pure
returns (bool)
@@ -98,7 +97,7 @@ library UserConfiguration {
* @param self the configuration object
* @return true if the user has been borrowing any reserve, false otherwise
**/
- function isBorrowingAny(UserConfiguration.Map memory self) internal pure returns (bool) {
+ function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {
return self.data & BORROWING_MASK != 0;
}
@@ -107,7 +106,7 @@ library UserConfiguration {
* @param self the configuration object
* @return true if the user has been borrowing any reserve, false otherwise
**/
- function isEmpty(UserConfiguration.Map memory self) internal pure returns (bool) {
+ function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {
return self.data == 0;
}
}
diff --git a/contracts/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol
similarity index 99%
rename from contracts/libraries/helpers/Errors.sol
rename to contracts/protocol/libraries/helpers/Errors.sol
index bf468fd3..ef6fa212 100644
--- a/contracts/libraries/helpers/Errors.sol
+++ b/contracts/protocol/libraries/helpers/Errors.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
* @title Errors library
diff --git a/contracts/protocol/libraries/helpers/Helpers.sol b/contracts/protocol/libraries/helpers/Helpers.sol
new file mode 100644
index 00000000..b21249e2
--- /dev/null
+++ b/contracts/protocol/libraries/helpers/Helpers.sol
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity 0.6.12;
+
+import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {DataTypes} from '../types/DataTypes.sol';
+
+/**
+ * @title Helpers library
+ * @author Aave
+ * @notice Implements calculation helpers.
+ */
+library Helpers {
+ /**
+ * @dev fetches the user current stable and variable debt balances
+ * @param user the user
+ * @param reserve the reserve object
+ * @return the stable and variable debt balance
+ **/
+ function getUserCurrentDebt(address user, DataTypes.ReserveData storage reserve)
+ internal
+ view
+ returns (uint256, uint256)
+ {
+ return (
+ IERC20(reserve.stableDebtTokenAddress).balanceOf(user),
+ IERC20(reserve.variableDebtTokenAddress).balanceOf(user)
+ );
+ }
+
+ function getUserCurrentDebtMemory(address user, DataTypes.ReserveData memory reserve)
+ internal
+ view
+ returns (uint256, uint256)
+ {
+ return (
+ IERC20(reserve.stableDebtTokenAddress).balanceOf(user),
+ IERC20(reserve.variableDebtTokenAddress).balanceOf(user)
+ );
+ }
+}
diff --git a/contracts/libraries/logic/GenericLogic.sol b/contracts/protocol/libraries/logic/GenericLogic.sol
similarity index 88%
rename from contracts/libraries/logic/GenericLogic.sol
rename to contracts/protocol/libraries/logic/GenericLogic.sol
index 28d91927..e8ee263f 100644
--- a/contracts/libraries/logic/GenericLogic.sol
+++ b/contracts/protocol/libraries/logic/GenericLogic.sol
@@ -1,15 +1,16 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
import {ReserveLogic} from './ReserveLogic.sol';
import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
import {UserConfiguration} from '../configuration/UserConfiguration.sol';
import {WadRayMath} from '../math/WadRayMath.sol';
import {PercentageMath} from '../math/PercentageMath.sol';
-import {IPriceOracleGetter} from '../../interfaces/IPriceOracleGetter.sol';
+import {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';
+import {DataTypes} from '../types/DataTypes.sol';
/**
* @title GenericLogic library
@@ -17,12 +18,12 @@ import {IPriceOracleGetter} from '../../interfaces/IPriceOracleGetter.sol';
* @title Implements protocol-level logic to check the status of the user across all the reserves
*/
library GenericLogic {
- using ReserveLogic for ReserveLogic.ReserveData;
+ using ReserveLogic for DataTypes.ReserveData;
using SafeMath for uint256;
using WadRayMath for uint256;
using PercentageMath for uint256;
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1 ether;
@@ -55,8 +56,8 @@ library GenericLogic {
address asset,
address user,
uint256 amount,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map calldata userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap calldata userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
@@ -104,11 +105,12 @@ library GenericLogic {
.sub(vars.amountToDecreaseETH.mul(vars.liquidationThreshold))
.div(vars.collateralBalanceAfterDecrease);
- uint256 healthFactorAfterDecrease = calculateHealthFactorFromBalances(
- vars.collateralBalanceAfterDecrease,
- vars.borrowBalanceETH,
- vars.liquidationThresholdAfterDecrease
- );
+ uint256 healthFactorAfterDecrease =
+ calculateHealthFactorFromBalances(
+ vars.collateralBalanceAfterDecrease,
+ vars.borrowBalanceETH,
+ vars.liquidationThresholdAfterDecrease
+ );
return healthFactorAfterDecrease >= GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD;
}
@@ -149,8 +151,8 @@ library GenericLogic {
**/
function calculateUserAccountData(
address user,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map memory userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap memory userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
@@ -176,7 +178,7 @@ library GenericLogic {
}
vars.currentReserveAddress = reserves[vars.i];
- ReserveLogic.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];
+ DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];
(vars.ltv, vars.liquidationThreshold, , vars.decimals, ) = currentReserve
.configuration
@@ -188,10 +190,8 @@ library GenericLogic {
if (vars.liquidationThreshold != 0 && userConfig.isUsingAsCollateral(vars.i)) {
vars.compoundedLiquidityBalance = IERC20(currentReserve.aTokenAddress).balanceOf(user);
- uint256 liquidityBalanceETH = vars
- .reserveUnitPrice
- .mul(vars.compoundedLiquidityBalance)
- .div(vars.tokenUnit);
+ uint256 liquidityBalanceETH =
+ vars.reserveUnitPrice.mul(vars.compoundedLiquidityBalance).div(vars.tokenUnit);
vars.totalCollateralBalanceETH = vars.totalCollateralBalanceETH.add(liquidityBalanceETH);
diff --git a/contracts/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol
similarity index 80%
rename from contracts/libraries/logic/ReserveLogic.sol
rename to contracts/protocol/libraries/logic/ReserveLogic.sol
index 6774cd6e..7a73be5b 100644
--- a/contracts/libraries/logic/ReserveLogic.sol
+++ b/contracts/protocol/libraries/logic/ReserveLogic.sol
@@ -1,18 +1,19 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
import {MathUtils} from '../math/MathUtils.sol';
-import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
+import {SafeERC20} from '../../../dependencies/openzeppelin/contracts/SafeERC20.sol';
import {IAToken} from '../../tokenization/interfaces/IAToken.sol';
import {IStableDebtToken} from '../../tokenization/interfaces/IStableDebtToken.sol';
import {IVariableDebtToken} from '../../tokenization/interfaces/IVariableDebtToken.sol';
import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
-import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';
+import {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';
import {WadRayMath} from '../math/WadRayMath.sol';
import {PercentageMath} from '../math/PercentageMath.sol';
import {Errors} from '../helpers/Errors.sol';
+import {DataTypes} from '../types/DataTypes.sol';
/**
* @title ReserveLogic library
@@ -43,35 +44,8 @@ library ReserveLogic {
uint256 variableBorrowIndex
);
- using ReserveLogic for ReserveLogic.ReserveData;
- using ReserveConfiguration for ReserveConfiguration.Map;
-
- enum InterestRateMode {NONE, STABLE, VARIABLE}
-
- // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.
- struct ReserveData {
- //stores the reserve configuration
- ReserveConfiguration.Map configuration;
- //the liquidity index. Expressed in ray
- uint128 liquidityIndex;
- //variable borrow index. Expressed in ray
- uint128 variableBorrowIndex;
- //the current supply rate. Expressed in ray
- uint128 currentLiquidityRate;
- //the current variable borrow rate. Expressed in ray
- uint128 currentVariableBorrowRate;
- //the current stable borrow rate. Expressed in ray
- uint128 currentStableBorrowRate;
- uint40 lastUpdateTimestamp;
- //tokens addresses
- address aTokenAddress;
- address stableDebtTokenAddress;
- address variableDebtTokenAddress;
- //address of the interest rate strategy
- address interestRateStrategyAddress;
- //the id of the reserve. Represents the position in the list of the active reserves
- uint8 id;
- }
+ using ReserveLogic for DataTypes.ReserveData;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
/**
* @dev returns the ongoing normalized income for the reserve.
@@ -80,7 +54,11 @@ library ReserveLogic {
* @param reserve the reserve object
* @return the normalized income. expressed in ray
**/
- function getNormalizedIncome(ReserveData storage reserve) internal view returns (uint256) {
+ function getNormalizedIncome(DataTypes.ReserveData storage reserve)
+ internal
+ view
+ returns (uint256)
+ {
uint40 timestamp = reserve.lastUpdateTimestamp;
//solium-disable-next-line
@@ -89,9 +67,10 @@ library ReserveLogic {
return reserve.liquidityIndex;
}
- uint256 cumulated = MathUtils
- .calculateLinearInterest(reserve.currentLiquidityRate, timestamp)
- .rayMul(reserve.liquidityIndex);
+ uint256 cumulated =
+ MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(
+ reserve.liquidityIndex
+ );
return cumulated;
}
@@ -103,7 +82,11 @@ library ReserveLogic {
* @param reserve the reserve object
* @return the normalized variable debt. expressed in ray
**/
- function getNormalizedDebt(ReserveData storage reserve) internal view returns (uint256) {
+ function getNormalizedDebt(DataTypes.ReserveData storage reserve)
+ internal
+ view
+ returns (uint256)
+ {
uint40 timestamp = reserve.lastUpdateTimestamp;
//solium-disable-next-line
@@ -112,9 +95,10 @@ library ReserveLogic {
return reserve.variableBorrowIndex;
}
- uint256 cumulated = MathUtils
- .calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp)
- .rayMul(reserve.variableBorrowIndex);
+ uint256 cumulated =
+ MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(
+ reserve.variableBorrowIndex
+ );
return cumulated;
}
@@ -124,20 +108,21 @@ library ReserveLogic {
* a formal specification.
* @param reserve the reserve object
**/
- function updateState(ReserveData storage reserve) internal {
- uint256 scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress)
- .scaledTotalSupply();
+ function updateState(DataTypes.ReserveData storage reserve) internal {
+ uint256 scaledVariableDebt =
+ IVariableDebtToken(reserve.variableDebtTokenAddress).scaledTotalSupply();
uint256 previousVariableBorrowIndex = reserve.variableBorrowIndex;
uint256 previousLiquidityIndex = reserve.liquidityIndex;
uint40 lastUpdatedTimestamp = reserve.lastUpdateTimestamp;
- (uint256 newLiquidityIndex, uint256 newVariableBorrowIndex) = _updateIndexes(
- reserve,
- scaledVariableDebt,
- previousLiquidityIndex,
- previousVariableBorrowIndex,
- lastUpdatedTimestamp
- );
+ (uint256 newLiquidityIndex, uint256 newVariableBorrowIndex) =
+ _updateIndexes(
+ reserve,
+ scaledVariableDebt,
+ previousLiquidityIndex,
+ previousVariableBorrowIndex,
+ lastUpdatedTimestamp
+ );
_mintToTreasury(
reserve,
@@ -157,7 +142,7 @@ library ReserveLogic {
* @param amount the amount to accomulate
**/
function cumulateToLiquidityIndex(
- ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
uint256 totalLiquidity,
uint256 amount
) internal {
@@ -178,14 +163,14 @@ library ReserveLogic {
* @param interestRateStrategyAddress the address of the interest rate strategy contract
**/
function init(
- ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
address aTokenAddress,
address stableDebtTokenAddress,
address variableDebtTokenAddress,
address interestRateStrategyAddress
) external {
require(reserve.aTokenAddress == address(0), Errors.RL_RESERVE_ALREADY_INITIALIZED);
-
+
reserve.liquidityIndex = uint128(WadRayMath.ray());
reserve.variableBorrowIndex = uint128(WadRayMath.ray());
reserve.aTokenAddress = aTokenAddress;
@@ -213,7 +198,7 @@ library ReserveLogic {
* @param liquidityTaken the amount of liquidity taken from the protocol (redeem or borrow)
**/
function updateInterestRates(
- ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
address reserveAddress,
address aTokenAddress,
uint256 liquidityAdded,
@@ -289,7 +274,7 @@ library ReserveLogic {
* @param newVariableBorrowIndex the variable borrow index after the last accumulation of the interest
**/
function _mintToTreasury(
- ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
uint256 scaledVariableDebt,
uint256 previousVariableBorrowIndex,
uint256 newLiquidityIndex,
@@ -349,7 +334,7 @@ library ReserveLogic {
* @param variableBorrowIndex the last stored variable borrow index
**/
function _updateIndexes(
- ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
uint256 scaledVariableDebt,
uint256 liquidityIndex,
uint256 variableBorrowIndex,
@@ -362,10 +347,8 @@ library ReserveLogic {
//only cumulating if there is any income being produced
if (currentLiquidityRate > 0) {
- uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(
- currentLiquidityRate,
- timestamp
- );
+ uint256 cumulatedLiquidityInterest =
+ MathUtils.calculateLinearInterest(currentLiquidityRate, timestamp);
newLiquidityIndex = cumulatedLiquidityInterest.rayMul(liquidityIndex);
require(newLiquidityIndex < type(uint128).max, Errors.RL_LIQUIDITY_INDEX_OVERFLOW);
@@ -374,12 +357,13 @@ library ReserveLogic {
//as the liquidity rate might come only from stable rate loans, we need to ensure
//that there is actual variable debt before accumulating
if (scaledVariableDebt != 0) {
- uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(
- reserve.currentVariableBorrowRate,
- timestamp
- );
+ uint256 cumulatedVariableBorrowInterest =
+ MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp);
newVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(variableBorrowIndex);
- require(newVariableBorrowIndex < type(uint128).max, Errors.RL_VARIABLE_BORROW_INDEX_OVERFLOW);
+ require(
+ newVariableBorrowIndex < type(uint128).max,
+ Errors.RL_VARIABLE_BORROW_INDEX_OVERFLOW
+ );
reserve.variableBorrowIndex = uint128(newVariableBorrowIndex);
}
}
diff --git a/contracts/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol
similarity index 81%
rename from contracts/libraries/logic/ValidationLogic.sol
rename to contracts/protocol/libraries/logic/ValidationLogic.sol
index 4388d9c2..7df21875 100644
--- a/contracts/libraries/logic/ValidationLogic.sol
+++ b/contracts/protocol/libraries/logic/ValidationLogic.sol
@@ -1,19 +1,20 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
import {ReserveLogic} from './ReserveLogic.sol';
import {GenericLogic} from './GenericLogic.sol';
import {WadRayMath} from '../math/WadRayMath.sol';
import {PercentageMath} from '../math/PercentageMath.sol';
-import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
+import {SafeERC20} from '../../../dependencies/openzeppelin/contracts/SafeERC20.sol';
import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';
import {UserConfiguration} from '../configuration/UserConfiguration.sol';
import {Errors} from '../helpers/Errors.sol';
import {Helpers} from '../helpers/Helpers.sol';
-import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';
+import {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';
+import {DataTypes} from '../types/DataTypes.sol';
/**
* @title ReserveLogic library
@@ -21,13 +22,13 @@ import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRat
* @notice Implements functions to validate specific action on the protocol.
*/
library ValidationLogic {
- using ReserveLogic for ReserveLogic.ReserveData;
+ using ReserveLogic for DataTypes.ReserveData;
using SafeMath for uint256;
using WadRayMath for uint256;
using PercentageMath for uint256;
using SafeERC20 for IERC20;
- using ReserveConfiguration for ReserveConfiguration.Map;
- using UserConfiguration for UserConfiguration.Map;
+ using ReserveConfiguration for DataTypes.ReserveConfigurationMap;
+ using UserConfiguration for DataTypes.UserConfigurationMap;
uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 4000;
uint256 public constant REBALANCE_UP_USAGE_RATIO_THRESHOLD = 0.95 * 1e27; //usage ratio of 95%
@@ -37,7 +38,7 @@ library ValidationLogic {
* @param reserve the reserve state on which the user is depositing
* @param amount the amount to be deposited
*/
- function validateDeposit(ReserveLogic.ReserveData storage reserve, uint256 amount) external view {
+ function validateDeposit(DataTypes.ReserveData storage reserve, uint256 amount) external view {
(bool isActive, bool isFrozen, , ) = reserve.configuration.getFlags();
require(amount != 0, Errors.VL_INVALID_AMOUNT);
@@ -60,17 +61,16 @@ library ValidationLogic {
address reserveAddress,
uint256 amount,
uint256 userBalance,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map storage userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap storage userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
) external view {
-
require(amount != 0, Errors.VL_INVALID_AMOUNT);
require(amount <= userBalance, Errors.VL_NOT_ENOUGH_AVAILABLE_USER_BALANCE);
- (bool isActive,, , ) = reservesData[reserveAddress].configuration.getFlags();
+ (bool isActive, , , ) = reservesData[reserveAddress].configuration.getFlags();
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
require(
@@ -101,7 +101,7 @@ library ValidationLogic {
uint256 availableLiquidity;
uint256 finalUserBorrowRate;
uint256 healthFactor;
- ReserveLogic.InterestRateMode rateMode;
+ DataTypes.InterestRateMode rateMode;
bool healthFactorBelowThreshold;
bool isActive;
bool isFrozen;
@@ -126,14 +126,14 @@ library ValidationLogic {
function validateBorrow(
address asset,
- ReserveLogic.ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
address userAddress,
uint256 amount,
uint256 amountInETH,
uint256 interestRateMode,
uint256 maxStableLoanPercent,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map storage userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap storage userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
@@ -152,8 +152,8 @@ library ValidationLogic {
//validate interest rate mode
require(
- uint256(ReserveLogic.InterestRateMode.VARIABLE) == interestRateMode ||
- uint256(ReserveLogic.InterestRateMode.STABLE) == interestRateMode,
+ uint256(DataTypes.InterestRateMode.VARIABLE) == interestRateMode ||
+ uint256(DataTypes.InterestRateMode.STABLE) == interestRateMode,
Errors.VL_INVALID_INTEREST_RATE_MODE_SELECTED
);
@@ -198,7 +198,7 @@ library ValidationLogic {
* liquidity
**/
- if (vars.rateMode == ReserveLogic.InterestRateMode.STABLE) {
+ if (vars.rateMode == DataTypes.InterestRateMode.STABLE) {
//check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve
require(vars.stableRateBorrowingEnabled, Errors.VL_STABLE_BORROWING_NOT_ENABLED);
@@ -229,9 +229,9 @@ library ValidationLogic {
* @param variableDebt the borrow balance of the user
*/
function validateRepay(
- ReserveLogic.ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
uint256 amountSent,
- ReserveLogic.InterestRateMode rateMode,
+ DataTypes.InterestRateMode rateMode,
address onBehalfOf,
uint256 stableDebt,
uint256 variableDebt
@@ -244,9 +244,9 @@ library ValidationLogic {
require(
(stableDebt > 0 &&
- ReserveLogic.InterestRateMode(rateMode) == ReserveLogic.InterestRateMode.STABLE) ||
+ DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE) ||
(variableDebt > 0 &&
- ReserveLogic.InterestRateMode(rateMode) == ReserveLogic.InterestRateMode.VARIABLE),
+ DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.VARIABLE),
Errors.VL_NO_DEBT_OF_SELECTED_TYPE
);
@@ -265,20 +265,20 @@ library ValidationLogic {
* @param currentRateMode the rate mode of the borrow
*/
function validateSwapRateMode(
- ReserveLogic.ReserveData storage reserve,
- UserConfiguration.Map storage userConfig,
+ DataTypes.ReserveData storage reserve,
+ DataTypes.UserConfigurationMap storage userConfig,
uint256 stableDebt,
uint256 variableDebt,
- ReserveLogic.InterestRateMode currentRateMode
+ DataTypes.InterestRateMode currentRateMode
) external view {
(bool isActive, bool isFrozen, , bool stableRateEnabled) = reserve.configuration.getFlags();
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
require(!isFrozen, Errors.VL_RESERVE_FROZEN);
- if (currentRateMode == ReserveLogic.InterestRateMode.STABLE) {
+ if (currentRateMode == DataTypes.InterestRateMode.STABLE) {
require(stableDebt > 0, Errors.VL_NO_STABLE_RATE_LOAN_IN_RESERVE);
- } else if (currentRateMode == ReserveLogic.InterestRateMode.VARIABLE) {
+ } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {
require(variableDebt > 0, Errors.VL_NO_VARIABLE_RATE_LOAN_IN_RESERVE);
/**
* user wants to swap to stable, before swapping we need to ensure that
@@ -309,35 +309,28 @@ library ValidationLogic {
* @param aTokenAddress the address of the aToken contract
*/
function validateRebalanceStableBorrowRate(
- ReserveLogic.ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
address reserveAddress,
IERC20 stableDebtToken,
IERC20 variableDebtToken,
- address aTokenAddress) external view {
-
- (bool isActive,,, ) = reserve.configuration.getFlags();
+ address aTokenAddress
+ ) external view {
+ (bool isActive, , , ) = reserve.configuration.getFlags();
require(isActive, Errors.VL_NO_ACTIVE_RESERVE);
//if the usage ratio is below 95%, no rebalances are needed
- uint256 totalDebt = stableDebtToken
- .totalSupply()
- .add(variableDebtToken.totalSupply())
- .wadToRay();
+ uint256 totalDebt =
+ stableDebtToken.totalSupply().add(variableDebtToken.totalSupply()).wadToRay();
uint256 availableLiquidity = IERC20(reserveAddress).balanceOf(aTokenAddress).wadToRay();
- uint256 usageRatio = totalDebt == 0
- ? 0
- : totalDebt.rayDiv(availableLiquidity.add(totalDebt));
+ uint256 usageRatio = totalDebt == 0 ? 0 : totalDebt.rayDiv(availableLiquidity.add(totalDebt));
//if the liquidity rate is below REBALANCE_UP_THRESHOLD of the max variable APR at 95% usage,
//then we allow rebalancing of the stable rate positions.
uint256 currentLiquidityRate = reserve.currentLiquidityRate;
- uint256 maxVariableBorrowRate = IReserveInterestRateStrategy(
- reserve
- .interestRateStrategyAddress
- )
- .getMaxVariableBorrowRate();
+ uint256 maxVariableBorrowRate =
+ IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).getMaxVariableBorrowRate();
require(
usageRatio >= REBALANCE_UP_USAGE_RATIO_THRESHOLD &&
@@ -345,7 +338,6 @@ library ValidationLogic {
maxVariableBorrowRate.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),
Errors.LP_INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET
);
-
}
/**
@@ -358,11 +350,11 @@ library ValidationLogic {
* @param oracle the price oracle
*/
function validateSetUseReserveAsCollateral(
- ReserveLogic.ReserveData storage reserve,
+ DataTypes.ReserveData storage reserve,
address reserveAddress,
bool useAsCollateral,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map storage userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap storage userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
@@ -373,16 +365,16 @@ library ValidationLogic {
require(
useAsCollateral ||
- GenericLogic.balanceDecreaseAllowed(
- reserveAddress,
- msg.sender,
- underlyingBalance,
- reservesData,
- userConfig,
- reserves,
- reservesCount,
- oracle
- ),
+ GenericLogic.balanceDecreaseAllowed(
+ reserveAddress,
+ msg.sender,
+ underlyingBalance,
+ reservesData,
+ userConfig,
+ reserves,
+ reservesCount,
+ oracle
+ ),
Errors.VL_DEPOSIT_ALREADY_IN_USE
);
}
@@ -406,9 +398,9 @@ library ValidationLogic {
* @param userVariableDebt Total variable debt balance of the user
**/
function validateLiquidationCall(
- ReserveLogic.ReserveData storage collateralReserve,
- ReserveLogic.ReserveData storage principalReserve,
- UserConfiguration.Map storage userConfig,
+ DataTypes.ReserveData storage collateralReserve,
+ DataTypes.ReserveData storage principalReserve,
+ DataTypes.UserConfigurationMap storage userConfig,
uint256 userHealthFactor,
uint256 userStableDebt,
uint256 userVariableDebt
@@ -429,8 +421,9 @@ library ValidationLogic {
);
}
- bool isCollateralEnabled = collateralReserve.configuration.getLiquidationThreshold() > 0 &&
- userConfig.isUsingAsCollateral(collateralReserve.id);
+ bool isCollateralEnabled =
+ collateralReserve.configuration.getLiquidationThreshold() > 0 &&
+ userConfig.isUsingAsCollateral(collateralReserve.id);
//if collateral isn't enabled as collateral by user, it cannot be liquidated
if (!isCollateralEnabled) {
@@ -460,20 +453,21 @@ library ValidationLogic {
*/
function validateTransfer(
address from,
- mapping(address => ReserveLogic.ReserveData) storage reservesData,
- UserConfiguration.Map storage userConfig,
+ mapping(address => DataTypes.ReserveData) storage reservesData,
+ DataTypes.UserConfigurationMap storage userConfig,
mapping(uint256 => address) storage reserves,
uint256 reservesCount,
address oracle
) internal view {
- (, , , , uint256 healthFactor) = GenericLogic.calculateUserAccountData(
- from,
- reservesData,
- userConfig,
- reserves,
- reservesCount,
- oracle
- );
+ (, , , , uint256 healthFactor) =
+ GenericLogic.calculateUserAccountData(
+ from,
+ reservesData,
+ userConfig,
+ reserves,
+ reservesCount,
+ oracle
+ );
require(
healthFactor >= GenericLogic.HEALTH_FACTOR_LIQUIDATION_THRESHOLD,
diff --git a/contracts/libraries/math/MathUtils.sol b/contracts/protocol/libraries/math/MathUtils.sol
similarity index 96%
rename from contracts/libraries/math/MathUtils.sol
rename to contracts/protocol/libraries/math/MathUtils.sol
index e99a7ccc..5ddfeffb 100644
--- a/contracts/libraries/math/MathUtils.sol
+++ b/contracts/protocol/libraries/math/MathUtils.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';
import {WadRayMath} from './WadRayMath.sol';
library MathUtils {
diff --git a/contracts/libraries/math/PercentageMath.sol b/contracts/protocol/libraries/math/PercentageMath.sol
similarity index 98%
rename from contracts/libraries/math/PercentageMath.sol
rename to contracts/protocol/libraries/math/PercentageMath.sol
index c0556011..72bb09b6 100644
--- a/contracts/libraries/math/PercentageMath.sol
+++ b/contracts/protocol/libraries/math/PercentageMath.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {Errors} from '../helpers/Errors.sol';
diff --git a/contracts/libraries/math/WadRayMath.sol b/contracts/protocol/libraries/math/WadRayMath.sol
similarity index 99%
rename from contracts/libraries/math/WadRayMath.sol
rename to contracts/protocol/libraries/math/WadRayMath.sol
index 64d2e511..7fdf8462 100644
--- a/contracts/libraries/math/WadRayMath.sol
+++ b/contracts/protocol/libraries/math/WadRayMath.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {Errors} from '../helpers/Errors.sol';
diff --git a/contracts/protocol/libraries/types/DataTypes.sol b/contracts/protocol/libraries/types/DataTypes.sol
new file mode 100644
index 00000000..a19e5efc
--- /dev/null
+++ b/contracts/protocol/libraries/types/DataTypes.sol
@@ -0,0 +1,49 @@
+// SPDX-License-Identifier: agpl-3.0
+pragma solidity 0.6.12;
+
+library DataTypes {
+ // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.
+ struct ReserveData {
+ //stores the reserve configuration
+ ReserveConfigurationMap configuration;
+ //the liquidity index. Expressed in ray
+ uint128 liquidityIndex;
+ //variable borrow index. Expressed in ray
+ uint128 variableBorrowIndex;
+ //the current supply rate. Expressed in ray
+ uint128 currentLiquidityRate;
+ //the current variable borrow rate. Expressed in ray
+ uint128 currentVariableBorrowRate;
+ //the current stable borrow rate. Expressed in ray
+ uint128 currentStableBorrowRate;
+ uint40 lastUpdateTimestamp;
+ //tokens addresses
+ address aTokenAddress;
+ address stableDebtTokenAddress;
+ address variableDebtTokenAddress;
+ //address of the interest rate strategy
+ address interestRateStrategyAddress;
+ //the id of the reserve. Represents the position in the list of the active reserves
+ uint8 id;
+ }
+
+ 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-63: reserved
+ //bit 64-79: reserve factor
+ uint256 data;
+ }
+
+ struct UserConfigurationMap {
+ uint256 data;
+ }
+
+ enum InterestRateMode {NONE, STABLE, VARIABLE}
+}
diff --git a/contracts/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol
similarity index 90%
rename from contracts/tokenization/AToken.sol
rename to contracts/protocol/tokenization/AToken.sol
index 5138ddeb..3fc62d2c 100644
--- a/contracts/tokenization/AToken.sol
+++ b/contracts/protocol/tokenization/AToken.sol
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {IncentivizedERC20} from './IncentivizedERC20.sol';
-import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {ILendingPool} from '../../interfaces/ILendingPool.sol';
import {WadRayMath} from '../libraries/math/WadRayMath.sol';
import {Errors} from '../libraries/helpers/Errors.sol';
import {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';
import {IAToken} from './interfaces/IAToken.sol';
-import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
-import {SafeERC20} from '../dependencies/openzeppelin/contracts/SafeERC20.sol';
+import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {SafeERC20} from '../../dependencies/openzeppelin/contracts/SafeERC20.sol';
/**
* @title Aave ERC20 AToken
@@ -21,12 +21,10 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
using SafeERC20 for IERC20;
bytes public constant EIP712_REVISION = bytes('1');
- bytes32 internal constant EIP712_DOMAIN = keccak256(
- 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'
- );
- bytes32 public constant PERMIT_TYPEHASH = keccak256(
- 'Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)'
- );
+ bytes32 internal constant EIP712_DOMAIN =
+ keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');
+ bytes32 public constant PERMIT_TYPEHASH =
+ keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');
uint256 public constant UINT_MAX_VALUE = uint256(-1);
uint256 public constant ATOKEN_REVISION = 0x1;
@@ -57,7 +55,7 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
RESERVE_TREASURY_ADDRESS = reserveTreasuryAddress;
}
- function getRevision() internal virtual override pure returns (uint256) {
+ function getRevision() internal pure virtual override returns (uint256) {
return ATOKEN_REVISION;
}
@@ -187,8 +185,8 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
**/
function balanceOf(address user)
public
- override(IncentivizedERC20, IERC20)
view
+ override(IncentivizedERC20, IERC20)
returns (uint256)
{
return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(UNDERLYING_ASSET_ADDRESS));
@@ -200,7 +198,7 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
* @param user the address of the user
* @return the scaled balance of the user
**/
- function scaledBalanceOf(address user) external override view returns (uint256) {
+ function scaledBalanceOf(address user) external view override returns (uint256) {
return super.balanceOf(user);
}
@@ -212,8 +210,8 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
**/
function getScaledUserBalanceAndSupply(address user)
external
- override
view
+ override
returns (uint256, uint256)
{
return (super.balanceOf(user), super.totalSupply());
@@ -225,7 +223,7 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
* does that too.
* @return the current total supply
**/
- function totalSupply() public override(IncentivizedERC20, IERC20) view returns (uint256) {
+ function totalSupply() public view override(IncentivizedERC20, IERC20) returns (uint256) {
uint256 currentSupplyScaled = super.totalSupply();
if (currentSupplyScaled == 0) {
@@ -236,10 +234,10 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
}
/**
- * @dev Returns the scaled total supply of the variable debt token. Represents sum(borrows/index)
+ * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)
* @return the scaled total supply
**/
- function scaledTotalSupply() public virtual override view returns (uint256) {
+ function scaledTotalSupply() public view virtual override returns (uint256) {
return super.totalSupply();
}
@@ -283,13 +281,14 @@ contract AToken is VersionedInitializable, IncentivizedERC20, IAToken {
//solium-disable-next-line
require(block.timestamp <= deadline, 'INVALID_EXPIRATION');
uint256 currentValidNonce = _nonces[owner];
- bytes32 digest = keccak256(
- abi.encodePacked(
- '\x19\x01',
- DOMAIN_SEPARATOR,
- keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))
- )
- );
+ bytes32 digest =
+ keccak256(
+ abi.encodePacked(
+ '\x19\x01',
+ DOMAIN_SEPARATOR,
+ keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))
+ )
+ );
require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');
_nonces[owner] = currentValidNonce.add(1);
_approve(owner, spender, value);
diff --git a/contracts/tokenization/DelegationAwareAToken.sol b/contracts/protocol/tokenization/DelegationAwareAToken.sol
similarity index 95%
rename from contracts/tokenization/DelegationAwareAToken.sol
rename to contracts/protocol/tokenization/DelegationAwareAToken.sol
index 794fd4f5..8bc7afa2 100644
--- a/contracts/tokenization/DelegationAwareAToken.sol
+++ b/contracts/protocol/tokenization/DelegationAwareAToken.sol
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {AToken} from './AToken.sol';
-import {ILendingPool} from '../interfaces/ILendingPool.sol';
+import {ILendingPool} from '../../interfaces/ILendingPool.sol';
import {Errors} from '../libraries/helpers/Errors.sol';
/**
diff --git a/contracts/tokenization/IncentivizedERC20.sol b/contracts/protocol/tokenization/IncentivizedERC20.sol
similarity index 89%
rename from contracts/tokenization/IncentivizedERC20.sol
rename to contracts/protocol/tokenization/IncentivizedERC20.sol
index 097a298f..3ef5501a 100644
--- a/contracts/tokenization/IncentivizedERC20.sol
+++ b/contracts/protocol/tokenization/IncentivizedERC20.sol
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity 0.6.8;
+pragma solidity 0.6.12;
-import {Context} from '../dependencies/openzeppelin/contracts/Context.sol';
-import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';
-import {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
-import {SafeMath} from '../dependencies/openzeppelin/contracts/SafeMath.sol';
-import {IAaveIncentivesController} from '../interfaces/IAaveIncentivesController.sol';
+import {Context} from '../../dependencies/openzeppelin/contracts/Context.sol';
+import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {IERC20Detailed} from '../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';
+import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';
+import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';
/**
* @title ERC20
@@ -40,35 +40,35 @@ contract IncentivizedERC20 is Context, IERC20, IERC20Detailed {
/**
* @return the name of the token
**/
- function name() public override view returns (string memory) {
+ function name() public view override returns (string memory) {
return _name;
}
/**
* @return the symbol of the token
**/
- function symbol() public override view returns (string memory) {
+ function symbol() public view override returns (string memory) {
return _symbol;
}
/**
* @return the decimals of the token
**/
- function decimals() public override view returns (uint8) {
+ function decimals() public view override returns (uint8) {
return _decimals;
}
/**
* @return the total supply of the token
**/
- function totalSupply() public virtual override view returns (uint256) {
+ function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @return the balance of the token
**/
- function balanceOf(address account) public virtual override view returns (uint256) {
+ function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
@@ -92,9 +92,9 @@ contract IncentivizedERC20 is Context, IERC20, IERC20Detailed {
**/
function allowance(address owner, address spender)
public
+ view
virtual
override
- view
returns (uint256)
{
return _allowances[owner][spender];
diff --git a/contracts/tokenization/StableDebtToken.sol b/contracts/protocol/tokenization/StableDebtToken.sol
similarity index 90%
rename from contracts/tokenization/StableDebtToken.sol
rename to contracts/protocol/tokenization/StableDebtToken.sol
index cb53afdc..8e247ad2 100644
--- a/contracts/tokenization/StableDebtToken.sol
+++ b/contracts/protocol/tokenization/StableDebtToken.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {DebtTokenBase} from './base/DebtTokenBase.sol';
import {MathUtils} from '../libraries/math/MathUtils.sol';
@@ -34,7 +34,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @dev gets the revision of the stable debt token implementation
* @return the debt token implementation revision
**/
- function getRevision() internal virtual override pure returns (uint256) {
+ function getRevision() internal pure virtual override returns (uint256) {
return DEBT_TOKEN_REVISION;
}
@@ -42,7 +42,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @dev returns the average stable rate across all the stable rate debt
* @return the average stable rate
**/
- function getAverageStableRate() external virtual override view returns (uint256) {
+ function getAverageStableRate() external view virtual override returns (uint256) {
return _avgStableRate;
}
@@ -50,7 +50,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @dev returns the timestamp of the last user action
* @return the last update timestamp
**/
- function getUserLastUpdated(address user) external virtual override view returns (uint40) {
+ function getUserLastUpdated(address user) external view virtual override returns (uint40) {
return _timestamps[user];
}
@@ -59,7 +59,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @param user the address of the user
* @return the stable rate of user
**/
- function getUserStableRate(address user) external virtual override view returns (uint256) {
+ function getUserStableRate(address user) external view virtual override returns (uint256) {
return _usersStableRate[user];
}
@@ -67,16 +67,14 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @dev calculates the current user debt balance
* @return the accumulated debt of the user
**/
- function balanceOf(address account) public virtual override view returns (uint256) {
+ function balanceOf(address account) public view virtual override returns (uint256) {
uint256 accountBalance = super.balanceOf(account);
uint256 stableRate = _usersStableRate[account];
if (accountBalance == 0) {
return 0;
}
- uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(
- stableRate,
- _timestamps[account]
- );
+ uint256 cumulatedInterest =
+ MathUtils.calculateCompoundedInterest(stableRate, _timestamps[account]);
return accountBalance.rayMul(cumulatedInterest);
}
@@ -248,8 +246,8 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
**/
function getSupplyData()
public
- override
view
+ override
returns (
uint256,
uint256,
@@ -264,7 +262,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
/**
* @dev returns the the total supply and the average stable rate
**/
- function getTotalSupplyAndAvgRate() public override view returns (uint256, uint256) {
+ function getTotalSupplyAndAvgRate() public view override returns (uint256, uint256) {
uint256 avgRate = _avgStableRate;
return (_calcTotalSupply(avgRate), avgRate);
}
@@ -272,14 +270,14 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
/**
* @dev returns the total supply
**/
- function totalSupply() public override view returns (uint256) {
+ function totalSupply() public view override returns (uint256) {
return _calcTotalSupply(_avgStableRate);
}
/**
* @dev returns the timestamp at which the total supply was updated
**/
- function getTotalSupplyLastUpdated() public override view returns (uint40) {
+ function getTotalSupplyLastUpdated() public view override returns (uint40) {
return _totalSupplyTimestamp;
}
@@ -288,7 +286,7 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @param user the user
* @return The debt balance of the user since the last burn/mint action
**/
- function principalBalanceOf(address user) external virtual override view returns (uint256) {
+ function principalBalanceOf(address user) external view virtual override returns (uint256) {
return super.balanceOf(user);
}
@@ -297,17 +295,15 @@ contract StableDebtToken is IStableDebtToken, DebtTokenBase {
* @param avgRate the average rate at which calculate the total supply
* @return The debt balance of the user since the last burn/mint action
**/
- function _calcTotalSupply(uint256 avgRate) internal virtual view returns (uint256) {
+ function _calcTotalSupply(uint256 avgRate) internal view virtual returns (uint256) {
uint256 principalSupply = super.totalSupply();
if (principalSupply == 0) {
return 0;
}
- uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(
- avgRate,
- _totalSupplyTimestamp
- );
+ uint256 cumulatedInterest =
+ MathUtils.calculateCompoundedInterest(avgRate, _totalSupplyTimestamp);
return principalSupply.rayMul(cumulatedInterest);
}
diff --git a/contracts/tokenization/VariableDebtToken.sol b/contracts/protocol/tokenization/VariableDebtToken.sol
similarity index 90%
rename from contracts/tokenization/VariableDebtToken.sol
rename to contracts/protocol/tokenization/VariableDebtToken.sol
index 4d45831f..704bbc40 100644
--- a/contracts/tokenization/VariableDebtToken.sol
+++ b/contracts/protocol/tokenization/VariableDebtToken.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {DebtTokenBase} from './base/DebtTokenBase.sol';
import {WadRayMath} from '../libraries/math/WadRayMath.sol';
@@ -28,7 +28,7 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
* @dev gets the revision of the stable debt token implementation
* @return the debt token implementation revision
**/
- function getRevision() internal virtual override pure returns (uint256) {
+ function getRevision() internal pure virtual override returns (uint256) {
return DEBT_TOKEN_REVISION;
}
@@ -36,7 +36,7 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
* @dev calculates the accumulated debt balance of the user
* @return the debt balance of the user
**/
- function balanceOf(address user) public virtual override view returns (uint256) {
+ function balanceOf(address user) public view virtual override returns (uint256) {
uint256 scaledBalance = super.balanceOf(user);
if (scaledBalance == 0) {
@@ -98,7 +98,7 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
* @dev Returns the principal debt balance of the user from
* @return The debt balance of the user since the last burn/mint action
**/
- function scaledBalanceOf(address user) public virtual override view returns (uint256) {
+ function scaledBalanceOf(address user) public view virtual override returns (uint256) {
return super.balanceOf(user);
}
@@ -106,16 +106,16 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
* @dev Returns the total supply of the variable debt token. Represents the total debt accrued by the users
* @return the total supply
**/
- function totalSupply() public virtual override view returns (uint256) {
+ function totalSupply() public view virtual override returns (uint256) {
return
super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(UNDERLYING_ASSET_ADDRESS));
}
/**
- * @dev Returns the scaled total supply of the variable debt token. Represents sum(borrows/index)
+ * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)
* @return the scaled total supply
**/
- function scaledTotalSupply() public virtual override view returns (uint256) {
+ function scaledTotalSupply() public view virtual override returns (uint256) {
return super.totalSupply();
}
@@ -127,8 +127,8 @@ contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {
**/
function getScaledUserBalanceAndSupply(address user)
external
- override
view
+ override
returns (uint256, uint256)
{
return (super.balanceOf(user), super.totalSupply());
diff --git a/contracts/tokenization/base/DebtTokenBase.sol b/contracts/protocol/tokenization/base/DebtTokenBase.sol
similarity index 95%
rename from contracts/tokenization/base/DebtTokenBase.sol
rename to contracts/protocol/tokenization/base/DebtTokenBase.sol
index 3cf38019..d592e6ff 100644
--- a/contracts/tokenization/base/DebtTokenBase.sol
+++ b/contracts/protocol/tokenization/base/DebtTokenBase.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {ILendingPool} from '../../interfaces/ILendingPool.sol';
+import {ILendingPool} from '../../../interfaces/ILendingPool.sol';
import {
VersionedInitializable
} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';
@@ -100,9 +100,9 @@ abstract contract DebtTokenBase is IncentivizedERC20, VersionedInitializable {
function allowance(address owner, address spender)
public
+ view
virtual
override
- view
returns (uint256)
{
owner;
@@ -154,10 +154,8 @@ abstract contract DebtTokenBase is IncentivizedERC20, VersionedInitializable {
address delegatee,
uint256 amount
) internal {
- uint256 newAllowance = _borrowAllowances[delegator][delegatee].sub(
- amount,
- Errors.BORROW_ALLOWANCE_NOT_ENOUGH
- );
+ uint256 newAllowance =
+ _borrowAllowances[delegator][delegatee].sub(amount, Errors.BORROW_ALLOWANCE_NOT_ENOUGH);
_borrowAllowances[delegator][delegatee] = newAllowance;
diff --git a/contracts/tokenization/interfaces/IAToken.sol b/contracts/protocol/tokenization/interfaces/IAToken.sol
similarity index 96%
rename from contracts/tokenization/interfaces/IAToken.sol
rename to contracts/protocol/tokenization/interfaces/IAToken.sol
index 13cf6cb7..182695a6 100644
--- a/contracts/tokenization/interfaces/IAToken.sol
+++ b/contracts/protocol/tokenization/interfaces/IAToken.sol
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
-import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';
+import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';
import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
interface IAToken is IERC20, IScaledBalanceToken {
diff --git a/contracts/tokenization/interfaces/IScaledBalanceToken.sol b/contracts/protocol/tokenization/interfaces/IScaledBalanceToken.sol
similarity index 93%
rename from contracts/tokenization/interfaces/IScaledBalanceToken.sol
rename to contracts/protocol/tokenization/interfaces/IScaledBalanceToken.sol
index ee1a132c..d5a1ba8e 100644
--- a/contracts/tokenization/interfaces/IScaledBalanceToken.sol
+++ b/contracts/protocol/tokenization/interfaces/IScaledBalanceToken.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
interface IScaledBalanceToken {
/**
@@ -19,7 +19,7 @@ interface IScaledBalanceToken {
function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);
/**
- * @dev Returns the scaled total supply of the variable debt token. Represents sum(borrows/index)
+ * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)
* @return the scaled total supply
**/
function scaledTotalSupply() external view returns (uint256);
diff --git a/contracts/tokenization/interfaces/IStableDebtToken.sol b/contracts/protocol/tokenization/interfaces/IStableDebtToken.sol
similarity index 99%
rename from contracts/tokenization/interfaces/IStableDebtToken.sol
rename to contracts/protocol/tokenization/interfaces/IStableDebtToken.sol
index af71aab2..ffa8e095 100644
--- a/contracts/tokenization/interfaces/IStableDebtToken.sol
+++ b/contracts/protocol/tokenization/interfaces/IStableDebtToken.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
/**
* @title interface IStableDebtToken
diff --git a/contracts/tokenization/interfaces/ITokenConfiguration.sol b/contracts/protocol/tokenization/interfaces/ITokenConfiguration.sol
similarity index 89%
rename from contracts/tokenization/interfaces/ITokenConfiguration.sol
rename to contracts/protocol/tokenization/interfaces/ITokenConfiguration.sol
index 50eb3b09..c47272a2 100644
--- a/contracts/tokenization/interfaces/ITokenConfiguration.sol
+++ b/contracts/protocol/tokenization/interfaces/ITokenConfiguration.sol
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.6;
/**
diff --git a/contracts/tokenization/interfaces/IVariableDebtToken.sol b/contracts/protocol/tokenization/interfaces/IVariableDebtToken.sol
similarity index 98%
rename from contracts/tokenization/interfaces/IVariableDebtToken.sol
rename to contracts/protocol/tokenization/interfaces/IVariableDebtToken.sol
index c01b50ce..2ee5c6b4 100644
--- a/contracts/tokenization/interfaces/IVariableDebtToken.sol
+++ b/contracts/protocol/tokenization/interfaces/IVariableDebtToken.sol
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: agpl-3.0
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {IScaledBalanceToken} from './IScaledBalanceToken.sol';
diff --git a/docker-compose.test.yml b/docker-compose.test.yml
index b673703f..d71c1956 100644
--- a/docker-compose.test.yml
+++ b/docker-compose.test.yml
@@ -4,4 +4,6 @@ services:
build:
context: ./
dockerfile: ./Dockerfile_test
- command: npm run test
+ environment:
+ - MNEMONIC
+ - ALCHEMY_KEY
diff --git a/hardhat.config.ts b/hardhat.config.ts
index 42302c19..fafa0eff 100644
--- a/hardhat.config.ts
+++ b/hardhat.config.ts
@@ -71,7 +71,7 @@ const mainnetFork = MAINNET_FORK
const buidlerConfig: HardhatUserConfig = {
solidity: {
- version: '0.6.8',
+ version: '0.6.12',
settings: {
optimizer: {enabled: true, runs: 200},
evmVersion: 'istanbul',
diff --git a/helpers/constants.ts b/helpers/constants.ts
index a962d925..ea2ab8bc 100644
--- a/helpers/constants.ts
+++ b/helpers/constants.ts
@@ -16,7 +16,6 @@ export const MAX_UINT_AMOUNT =
export const ONE_YEAR = '31536000';
export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
export const ONE_ADDRESS = '0x0000000000000000000000000000000000000001';
-
// ----------------
// PROTOCOL GLOBAL PARAMS
// ----------------
diff --git a/helpers/contracts-deployments.ts b/helpers/contracts-deployments.ts
index 07433bdf..3b762333 100644
--- a/helpers/contracts-deployments.ts
+++ b/helpers/contracts-deployments.ts
@@ -165,8 +165,8 @@ export const deployAaveLibraries = async (
// libPath example: contracts/libraries/logic/GenericLogic.sol
// libName example: GenericLogic
return {
- ['__$5201a97c05ba6aa659e2f36a933dd51801$__']: validationLogic.address,
- ['__$d3b4366daeb9cadc7528af6145b50b2183$__']: reserveLogic.address,
+ ['__$de8c0cf1a7d7c36c802af9a64fb9d86036$__']: validationLogic.address,
+ ['__$22cd43a9dda9ce44e9b92ba393b88fb9ac$__']: reserveLogic.address,
};
};
@@ -247,14 +247,11 @@ export const deployMockFlashLoanReceiver = async (
verify
);
-export const deployWalletBalancerProvider = async (
- addressesProvider: tEthereumAddress,
- verify?: boolean
-) =>
+export const deployWalletBalancerProvider = async (verify?: boolean) =>
withSaveAndVerify(
- await new WalletBalanceProviderFactory(await getFirstSigner()).deploy(addressesProvider),
+ await new WalletBalanceProviderFactory(await getFirstSigner()).deploy(),
eContractid.WalletBalanceProvider,
- [addressesProvider],
+ [],
verify
);
@@ -291,7 +288,7 @@ export const deployMintableDelegationERC20 = async (
verify
);
export const deployDefaultReserveInterestRateStrategy = async (
- args: [tEthereumAddress, string, string, string, string, string],
+ args: [tEthereumAddress, string, string, string, string, string, string],
verify: boolean
) =>
withSaveAndVerify(
@@ -369,7 +366,7 @@ export const deployDelegationAwareAToken = async (
] = [poolAddress, underlyingAssetAddress, ZERO_ADDRESS, name, symbol, incentivesController];
return withSaveAndVerify(
await new DelegationAwareATokenFactory(await getFirstSigner()).deploy(...args),
- eContractid.AToken,
+ eContractid.DelegationAwareAToken,
args,
verify
);
diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts
index 35de7ac9..a426274c 100644
--- a/helpers/init-helpers.ts
+++ b/helpers/init-helpers.ts
@@ -1,4 +1,4 @@
-import { iMultiPoolsAssets, IReserveParams, tEthereumAddress } from './types';
+import { eContractid, iMultiPoolsAssets, IReserveParams, tEthereumAddress } from './types';
import { AaveProtocolDataProvider } from '../types/AaveProtocolDataProvider';
import { chunk, waitForTx } from './misc-utils';
import {
@@ -8,17 +8,38 @@ import {
} from './contracts-getters';
import { rawInsertContractAddressInDb } from './contracts-helpers';
import { BigNumberish } from 'ethers';
+import {
+ deployDefaultReserveInterestRateStrategy,
+ deployDelegationAwareAToken,
+ deployGenericAToken,
+ deployStableDebtToken,
+ deployVariableDebtToken,
+} from './contracts-deployments';
+import { ZERO_ADDRESS } from './constants';
+
+const chooseATokenDeployment = (id: eContractid) => {
+ switch (id) {
+ case eContractid.AToken:
+ return deployGenericAToken;
+ case eContractid.DelegationAwareAToken:
+ return deployDelegationAwareAToken;
+ default:
+ throw Error(`Missing aToken deployment script for: ${id}`);
+ }
+};
export const initReservesByHelper = async (
reservesParams: iMultiPoolsAssets,
tokenAddresses: { [symbol: string]: tEthereumAddress },
admin: tEthereumAddress,
- incentivesController: tEthereumAddress
+ incentivesController: tEthereumAddress,
+ verify: boolean
) => {
const stableAndVariableDeployer = await getStableAndVariableTokensHelper();
const atokenAndRatesDeployer = await getATokensAndRatesHelper();
const addressProvider = await getLendingPoolAddressesProvider();
+ const poolAddress = await addressProvider.getLendingPool();
// Set aTokenAndRatesDeployer as temporal admin
await waitForTx(await addressProvider.setPoolAdmin(atokenAndRatesDeployer.address));
@@ -27,9 +48,11 @@ export const initReservesByHelper = async (
const tokensChunks = 4;
const initChunks = 6;
- // Deploy tokens and rates in chunks
+ // Deploy tokens and rates that uses common aToken in chunks
const reservesChunks = chunk(
- Object.entries(reservesParams) as [string, IReserveParams][],
+ Object.entries(reservesParams).filter(
+ ([_, { aTokenImpl }]) => aTokenImpl === eContractid.AToken
+ ) as [string, IReserveParams][],
tokensChunks
);
// Initialize variables for future reserves initialization
@@ -39,6 +62,7 @@ export const initReservesByHelper = async (
let deployedRates: string[] = [];
let reserveTokens: string[] = [];
let reserveInitDecimals: string[] = [];
+ let reserveSymbols: string[] = [];
console.log(
`- Token deployments in ${reservesChunks.length * 2} txs instead of ${
@@ -54,6 +78,7 @@ export const initReservesByHelper = async (
BigNumberish,
BigNumberish,
BigNumberish,
+ BigNumberish,
BigNumberish
][] = [];
const reservesDecimals: string[] = [];
@@ -72,6 +97,7 @@ export const initReservesByHelper = async (
const [
,
{
+ optimalUtilizationRate,
baseVariableBorrowRate,
variableRateSlope1,
variableRateSlope2,
@@ -83,6 +109,7 @@ export const initReservesByHelper = async (
tokens.push(tokenAddress);
symbols.push(assetSymbol);
strategyRates.push([
+ optimalUtilizationRate,
baseVariableBorrowRate,
variableRateSlope1,
variableRateSlope2,
@@ -126,6 +153,75 @@ export const initReservesByHelper = async (
deployedRates = [...deployedRates, ...strategies];
reserveInitDecimals = [...reserveInitDecimals, ...reservesDecimals];
reserveTokens = [...reserveTokens, ...tokens];
+ reserveSymbols = [...reserveSymbols, ...symbols];
+ }
+
+ // Deploy delegated aware reserves tokens
+ const delegatedAwareReserves = Object.entries(reservesParams).filter(
+ ([_, { aTokenImpl }]) => aTokenImpl === eContractid.DelegationAwareAToken
+ ) as [string, IReserveParams][];
+
+ for (let [symbol, params] of delegatedAwareReserves) {
+ console.log(` - Deploy ${symbol} delegation await aToken, debts tokens, and strategy`);
+ const {
+ optimalUtilizationRate,
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ } = params;
+ const deployCustomAToken = chooseATokenDeployment(params.aTokenImpl);
+ const aToken = await deployCustomAToken(
+ [
+ poolAddress,
+ tokenAddresses[symbol],
+ `Aave interest bearing ${symbol}`,
+ `a${symbol}`,
+ ZERO_ADDRESS,
+ ],
+ verify
+ );
+ const stableDebt = await deployStableDebtToken(
+ [
+ poolAddress,
+ tokenAddresses[symbol],
+ `Aave stable debt bearing ${symbol}`,
+ `stableDebt${symbol}`,
+ ZERO_ADDRESS,
+ ],
+ verify
+ );
+ const variableDebt = await deployVariableDebtToken(
+ [
+ poolAddress,
+ tokenAddresses[symbol],
+ `Aave variable debt bearing ${symbol}`,
+ `variableDebt${symbol}`,
+ ZERO_ADDRESS,
+ ],
+ verify
+ );
+ const rates = await deployDefaultReserveInterestRateStrategy(
+ [
+ tokenAddresses[symbol],
+ optimalUtilizationRate,
+ baseVariableBorrowRate,
+ variableRateSlope1,
+ variableRateSlope2,
+ stableRateSlope1,
+ stableRateSlope2,
+ ],
+ verify
+ );
+
+ deployedStableTokens.push(stableDebt.address);
+ deployedVariableTokens.push(variableDebt.address);
+ deployedATokens.push(aToken.address);
+ deployedRates.push(rates.address);
+ reserveInitDecimals.push(params.reserveDecimals);
+ reserveTokens.push(tokenAddresses[symbol]);
+ reserveSymbols.push(symbol);
}
// Deploy init reserves per chunks
@@ -134,7 +230,7 @@ export const initReservesByHelper = async (
const chunkedAtokens = chunk(deployedATokens, initChunks);
const chunkedRates = chunk(deployedRates, initChunks);
const chunkedDecimals = chunk(reserveInitDecimals, initChunks);
- const chunkedSymbols = chunk(Object.keys(tokenAddresses), initChunks);
+ const chunkedSymbols = chunk(reserveSymbols, initChunks);
console.log(`- Reserves initialization in ${chunkedStableTokens.length} txs`);
for (let chunkIndex = 0; chunkIndex < chunkedDecimals.length; chunkIndex++) {
diff --git a/helpers/types.ts b/helpers/types.ts
index 88fb75dc..5952410b 100644
--- a/helpers/types.ts
+++ b/helpers/types.ts
@@ -263,9 +263,12 @@ export enum TokenContractId {
ENJ = 'ENJ',
}
-export interface IReserveParams extends IReserveBorrowParams, IReserveCollateralParams {}
+export interface IReserveParams extends IReserveBorrowParams, IReserveCollateralParams {
+ aTokenImpl: eContractid;
+}
export interface IReserveBorrowParams {
+ optimalUtilizationRate: string;
baseVariableBorrowRate: string;
variableRateSlope1: string;
variableRateSlope2: string;
@@ -324,12 +327,8 @@ export enum EthereumNetwork {
}
export interface IProtocolGlobalConfig {
- OptimalUtilizationRate: BigNumber;
- ExcessUtilizationRate: BigNumber;
- ApprovalAmountLendingPoolCore: string;
TokenDistributorPercentageBase: string;
MockUsdPriceInWei: string;
- EthereumAddress: tEthereumAddress;
UsdAddress: tEthereumAddress;
NilAddress: tEthereumAddress;
OneAddress: tEthereumAddress;
diff --git a/markets/aave/commons.ts b/markets/aave/commons.ts
index b7af4d0e..f87e5943 100644
--- a/markets/aave/commons.ts
+++ b/markets/aave/commons.ts
@@ -33,12 +33,8 @@ export const CommonsConfig: ICommonConfiguration = {
ConfigName: 'Commons',
ProviderId: 0,
ProtocolGlobalParams: {
- OptimalUtilizationRate: new BigNumber(0.8).times(RAY),
- ExcessUtilizationRate: new BigNumber(0.2).times(RAY),
- ApprovalAmountLendingPoolCore: '1000000000000000000000000000',
TokenDistributorPercentageBase: '10000',
MockUsdPriceInWei: '5848466240000000',
- EthereumAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
UsdAddress: '0x10F7Fc1F91Ba351f9C629c5947AD69bD03C05b96',
NilAddress: '0x0000000000000000000000000000000000000000',
OneAddress: '0x0000000000000000000000000000000000000001',
diff --git a/markets/aave/reservesConfigs.ts b/markets/aave/reservesConfigs.ts
index 637e2778..7b0cf988 100644
--- a/markets/aave/reservesConfigs.ts
+++ b/markets/aave/reservesConfigs.ts
@@ -1,8 +1,9 @@
import BigNumber from 'bignumber.js';
-import {oneRay} from '../../helpers/constants';
-import {IReserveParams} from '../../helpers/types';
+import { oneRay } from '../../helpers/constants';
+import { eContractid, IReserveParams } from '../../helpers/types';
export const strategyBase: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(3).multipliedBy(oneRay).toFixed(),
@@ -14,9 +15,11 @@ export const strategyBase: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: true,
reserveDecimals: '18',
+ aTokenImpl: eContractid.AToken,
};
export const stablecoinStrategyBase: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(1.5).multipliedBy(oneRay).toFixed(),
@@ -28,9 +31,11 @@ export const stablecoinStrategyBase: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: true,
reserveDecimals: '18',
+ aTokenImpl: eContractid.AToken,
};
export const stablecoinStrategyCentralized: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.07).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(0.6).multipliedBy(oneRay).toFixed(),
@@ -42,6 +47,7 @@ export const stablecoinStrategyCentralized: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: true,
reserveDecimals: '6',
+ aTokenImpl: eContractid.AToken,
};
export const strategyGovernanceTokens: IReserveParams = {
@@ -117,6 +123,7 @@ export const strategyREN: IReserveParams = {
};
export const stablecoinStrategySUSD: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0.01).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.04).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
@@ -128,6 +135,7 @@ export const stablecoinStrategySUSD: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: false,
reserveDecimals: '18',
+ aTokenImpl: eContractid.AToken,
};
export const strategySNX: IReserveParams = {
@@ -155,6 +163,7 @@ export const stablecoinStrategyTUSD: IReserveParams = {
export const strategyUNI: IReserveParams = {
...strategyGovernanceTokens,
stableBorrowRateEnabled: false,
+ aTokenImpl: eContractid.DelegationAwareAToken,
};
export const stablecoinStrategyUSDC: IReserveParams = {
@@ -174,6 +183,7 @@ export const stablecoinStrategyUSDT: IReserveParams = {
};
export const strategyWBTC: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(0.5).multipliedBy(oneRay).toFixed(),
@@ -185,9 +195,11 @@ export const strategyWBTC: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: true,
reserveDecimals: '8',
+ aTokenImpl: eContractid.AToken,
};
export const strategyWETH: IReserveParams = {
+ optimalUtilizationRate: new BigNumber(0.8).multipliedBy(oneRay).toFixed(),
baseVariableBorrowRate: new BigNumber(0).multipliedBy(oneRay).toFixed(),
variableRateSlope1: new BigNumber(0.08).multipliedBy(oneRay).toFixed(),
variableRateSlope2: new BigNumber(1).multipliedBy(oneRay).toFixed(),
@@ -199,6 +211,7 @@ export const strategyWETH: IReserveParams = {
borrowingEnabled: true,
stableBorrowRateEnabled: true,
reserveDecimals: '18',
+ aTokenImpl: eContractid.AToken,
};
export const strategyYFI: IReserveParams = {
diff --git a/package-lock.json b/package-lock.json
index dfdeb1a5..32738e30 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2908,6 +2908,15 @@
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
"dev": true
},
+ "bufferutil": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.2.tgz",
+ "integrity": "sha512-AtnG3W6M8B2n4xDQ5R+70EXvOpnXsFYg/AK2yTZd+HQ/oxAdz+GI+DvjmhBw3L0ole+LJ0ngqY4JMbDzkfNzhA==",
+ "dev": true,
+ "requires": {
+ "node-gyp-build": "^4.2.0"
+ }
+ },
"buidler-typechain": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/buidler-typechain/-/buidler-typechain-0.1.1.tgz",
@@ -3102,6 +3111,33 @@
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true
},
+ "cids": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz",
+ "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "class-is": "^1.1.0",
+ "multibase": "~0.6.0",
+ "multicodec": "^1.0.0",
+ "multihashes": "~0.4.15"
+ },
+ "dependencies": {
+ "multicodec": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz",
+ "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer": "^5.6.0",
+ "varint": "^5.0.0"
+ }
+ }
+ }
+ },
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@@ -3112,6 +3148,13 @@
"safe-buffer": "^5.0.1"
}
},
+ "class-is": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz",
+ "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==",
+ "dev": true,
+ "optional": true
+ },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -3214,7 +3257,6 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
"requires": {
"color-name": "1.1.3"
}
@@ -3222,8 +3264,7 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"colors": {
"version": "1.4.0",
@@ -3357,6 +3398,18 @@
}
}
},
+ "content-hash": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz",
+ "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "cids": "^0.7.1",
+ "multicodec": "^0.5.5",
+ "multihashes": "^0.4.15"
+ }
+ },
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -6299,148 +6352,6 @@
"@ethersproject/strings": ">=5.0.0-beta.130"
}
},
- "@ethersproject/address": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.5.tgz",
- "integrity": "sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bignumber": "^5.0.7",
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/keccak256": "^5.0.3",
- "@ethersproject/logger": "^5.0.5",
- "@ethersproject/rlp": "^5.0.3",
- "bn.js": "^4.4.0"
- }
- },
- "@ethersproject/bignumber": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.8.tgz",
- "integrity": "sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/logger": "^5.0.5",
- "bn.js": "^4.4.0"
- }
- },
- "@ethersproject/bytes": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.5.tgz",
- "integrity": "sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/logger": "^5.0.5"
- }
- },
- "@ethersproject/constants": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.5.tgz",
- "integrity": "sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bignumber": "^5.0.7"
- }
- },
- "@ethersproject/hash": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.5.tgz",
- "integrity": "sha512-GpI80/h2HDpfNKpCZoxQJCjOQloGnlD5hM1G+tZe8FQDJhEvFjJoPDuWv+NaYjJfOciKS2Axqc4Q4WamdLoUgg==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/keccak256": "^5.0.3",
- "@ethersproject/logger": "^5.0.5",
- "@ethersproject/strings": "^5.0.4"
- }
- },
- "@ethersproject/keccak256": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.4.tgz",
- "integrity": "sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "js-sha3": "0.5.7"
- }
- },
- "@ethersproject/logger": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.6.tgz",
- "integrity": "sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==",
- "dev": true,
- "optional": true
- },
- "@ethersproject/properties": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.4.tgz",
- "integrity": "sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/logger": "^5.0.5"
- }
- },
- "@ethersproject/rlp": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.4.tgz",
- "integrity": "sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/logger": "^5.0.5"
- }
- },
- "@ethersproject/signing-key": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.5.tgz",
- "integrity": "sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/logger": "^5.0.5",
- "@ethersproject/properties": "^5.0.3",
- "elliptic": "6.5.3"
- }
- },
- "@ethersproject/strings": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.5.tgz",
- "integrity": "sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/constants": "^5.0.4",
- "@ethersproject/logger": "^5.0.5"
- }
- },
- "@ethersproject/transactions": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.6.tgz",
- "integrity": "sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/address": "^5.0.4",
- "@ethersproject/bignumber": "^5.0.7",
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/constants": "^5.0.4",
- "@ethersproject/keccak256": "^5.0.3",
- "@ethersproject/logger": "^5.0.5",
- "@ethersproject/properties": "^5.0.3",
- "@ethersproject/rlp": "^5.0.3",
- "@ethersproject/signing-key": "^5.0.4"
- }
- },
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -6458,6 +6369,14 @@
"defer-to-connect": "^1.0.1"
}
},
+ "@types/bignumber.js": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz",
+ "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==",
+ "requires": {
+ "bignumber.js": "*"
+ }
+ },
"@types/bn.js": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
@@ -6491,11 +6410,53 @@
"@types/node": "*"
}
},
- "@yarnpkg/lockfile": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
- "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
- "dev": true
+ "@web3-js/scrypt-shim": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz",
+ "integrity": "sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw==",
+ "requires": {
+ "scryptsy": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "scryptsy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz",
+ "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@web3-js/websocket": {
+ "version": "1.0.30",
+ "resolved": "https://registry.npmjs.org/@web3-js/websocket/-/websocket-1.0.30.tgz",
+ "integrity": "sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA==",
+ "requires": {
+ "debug": "^2.2.0",
+ "es5-ext": "^0.10.50",
+ "nan": "^2.14.0",
+ "typedarray-to-buffer": "^3.1.5",
+ "yaeti": "^0.0.6"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
},
"abstract-leveldown": {
"version": "3.0.0",
@@ -6536,32 +6497,112 @@
"uri-js": "^4.2.2"
}
},
+ "ansi-colors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "requires": {
+ "ansi-wrap": "^0.1.0"
+ }
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "append-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+ "requires": {
+ "buffer-equal": "^1.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+ },
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-filter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
+ "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
},
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
},
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
},
"array-flatten": {
"version": "1.1.1",
@@ -6570,11 +6611,63 @@
"dev": true,
"optional": true
},
+ "array-initial": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
+ "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
+ "requires": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ }
+ }
+ },
+ "array-last": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
+ "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+ "requires": {
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ }
+ }
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+ },
+ "array-sort": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+ "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+ "requires": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
"asn1": {
"version": "0.2.4",
@@ -6607,8 +6700,7 @@
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
},
"async": {
"version": "2.6.2",
@@ -6619,6 +6711,22 @@
"lodash": "^4.17.11"
}
},
+ "async-done": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
+ "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
"async-eventemitter": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
@@ -6634,6 +6742,14 @@
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
+ "async-settle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
+ "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
+ "requires": {
+ "async-done": "^1.2.2"
+ }
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -6643,8 +6759,7 @@
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"aws-sign2": {
"version": "0.7.0",
@@ -6669,12 +6784,6 @@
"js-tokens": "^3.0.2"
},
"dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
@@ -6700,15 +6809,6 @@
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -6753,22 +6853,16 @@
"ms": "2.0.0"
}
},
- "json5": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
- },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
}
@@ -6794,6 +6888,12 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
}
}
},
@@ -7306,6 +7406,21 @@
"source-map-support": "^0.4.15"
},
"dependencies": {
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -7366,12 +7481,6 @@
"ms": "2.0.0"
}
},
- "globals": {
- "version": "9.18.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true
- },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -7390,14 +7499,6 @@
"esutils": "^2.0.2",
"lodash": "^4.17.4",
"to-fast-properties": "^1.0.3"
- },
- "dependencies": {
- "to-fast-properties": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
- "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
- "dev": true
- }
}
},
"babelify": {
@@ -7416,6 +7517,22 @@
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
+ "bach": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
+ "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
+ "requires": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ }
+ },
"backoff": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
@@ -7428,14 +7545,12 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@@ -7450,10 +7565,35 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
}
}
},
@@ -7461,7 +7601,6 @@
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz",
"integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==",
- "dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
@@ -7469,8 +7608,7 @@
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
- "dev": true
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
@@ -7492,9 +7630,20 @@
"bignumber.js": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==",
- "dev": true,
- "optional": true
+ "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
},
"bip39": {
"version": "2.5.0",
@@ -7509,6 +7658,66 @@
"unorm": "^1.3.3"
}
},
+ "bip66": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
+ "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "bl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ }
+ }
+ },
"blakejs": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
@@ -7525,8 +7734,7 @@
"bn.js": {
"version": "4.11.9",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
- "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
- "dev": true
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
},
"body-parser": {
"version": "1.19.0",
@@ -7577,23 +7785,44 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
+ }
+ }
+ },
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
"requires": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
@@ -7692,7 +7921,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
"integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
- "dev": true,
"requires": {
"base-x": "^3.0.2"
}
@@ -7701,7 +7929,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
"integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
- "dev": true,
"requires": {
"bs58": "^4.0.0",
"create-hash": "^1.1.0",
@@ -7712,17 +7939,44 @@
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
"integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
- "dev": true,
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
}
},
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
+ },
+ "buffer-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
+ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74="
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+ },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"buffer-to-arraybuffer": {
"version": "0.0.5",
@@ -7734,25 +7988,7 @@
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "bufferutil": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz",
- "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==",
- "dev": true,
- "requires": {
- "node-gyp-build": "~3.7.0"
- },
- "dependencies": {
- "node-gyp-build": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz",
- "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==",
- "dev": true
- }
- }
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
},
"bytes": {
"version": "3.1.0",
@@ -7784,7 +8020,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@@ -7813,6 +8048,16 @@
"responselike": "^1.0.2"
},
"dependencies": {
+ "get-stream": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+ "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
"lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@@ -7852,6 +8097,11 @@
}
}
},
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
"caniuse-lite": {
"version": "1.0.30001146",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001146.tgz",
@@ -7868,7 +8118,6 @@
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -7884,6 +8133,24 @@
"functional-red-black-tree": "^1.0.1"
}
},
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
"chownr": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
@@ -7891,61 +8158,19 @@
"dev": true,
"optional": true
},
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "cids": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz",
- "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.5.0",
- "class-is": "^1.1.0",
- "multibase": "~0.6.0",
- "multicodec": "^1.0.0",
- "multihashes": "~0.4.15"
- },
- "dependencies": {
- "multicodec": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz",
- "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.6.0",
- "varint": "^5.0.0"
- }
- }
- }
- },
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
- "class-is": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz",
- "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==",
- "dev": true,
- "optional": true
- },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
"requires": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@@ -7956,82 +8181,29 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
}
}
},
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
},
"clone-response": {
"version": "1.0.2",
@@ -8043,30 +8215,83 @@
"mimic-response": "^1.0.0"
}
},
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA="
+ },
+ "cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-map": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
+ "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
+ "requires": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
"requires": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
}
},
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
+ "color-support": {
"version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
},
"combined-stream": {
"version": "1.0.8",
@@ -8077,28 +8302,64 @@
"delayed-stream": "~1.0.0"
}
},
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"content-disposition": {
@@ -8120,18 +8381,6 @@
}
}
},
- "content-hash": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz",
- "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==",
- "dev": true,
- "optional": true,
- "requires": {
- "cids": "^0.7.1",
- "multicodec": "^0.5.5",
- "multihashes": "^0.4.15"
- }
- },
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -8143,7 +8392,6 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
"integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.1"
},
@@ -8151,8 +8399,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
@@ -8180,8 +8427,16 @@
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "copy-props": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
+ "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
+ "requires": {
+ "each-props": "^1.3.0",
+ "is-plain-object": "^2.0.1"
+ }
},
"core-js": {
"version": "2.6.11",
@@ -8198,8 +8453,7 @@
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cors": {
"version": "2.8.5",
@@ -8227,7 +8481,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
"requires": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
@@ -8240,7 +8493,6 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
"requires": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
@@ -8284,7 +8536,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dev": true,
"requires": {
"es5-ext": "^0.10.50",
"type": "^1.0.1"
@@ -8308,11 +8559,37 @@
"ms": "^2.1.1"
}
},
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "requires": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
},
"decompress-response": {
"version": "3.3.0",
@@ -8324,6 +8601,77 @@
"mimic-response": "^1.0.0"
}
},
+ "decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "requires": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ }
+ },
+ "decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "requires": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="
+ }
+ }
+ },
+ "decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "requires": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ }
+ },
+ "decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "requires": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
+ },
+ "get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "requires": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
"deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -8336,8 +8684,36 @@
"object-is": "^1.0.1",
"object-keys": "^1.1.1",
"regexp.prototype.flags": "^1.2.0"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ }
}
},
+ "default-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
+ "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
+ "requires": {
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "default-resolution": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
+ "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ="
+ },
"defer-to-connect": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
@@ -8349,7 +8725,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz",
"integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==",
- "dev": true,
"requires": {
"abstract-leveldown": "~5.0.0",
"inherits": "^2.0.3"
@@ -8359,7 +8734,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz",
"integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==",
- "dev": true,
"requires": {
"xtend": "~4.0.0"
}
@@ -8370,19 +8744,52 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
"requires": {
"object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ }
}
},
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
}
},
"defined": {
@@ -8422,6 +8829,11 @@
"dev": true,
"optional": true
},
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+ },
"detect-indent": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
@@ -8458,6 +8870,16 @@
"minimatch": "^3.0.4"
}
},
+ "drbg.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz",
+ "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=",
+ "requires": {
+ "browserify-aes": "^1.0.6",
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4"
+ }
+ },
"duplexer3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
@@ -8465,6 +8887,60 @@
"dev": true,
"optional": true
},
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "each-props": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
+ "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
+ "requires": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -8492,7 +8968,6 @@
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
"integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
- "dev": true,
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
@@ -8558,7 +9033,6 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
"requires": {
"once": "^1.4.0"
}
@@ -8567,16 +9041,22 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
- "dev": true,
"requires": {
"prr": "~1.0.1"
}
},
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"es-abstract": {
"version": "1.17.7",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
"integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
- "dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
@@ -8589,13 +9069,19 @@
"object.assign": "^4.1.1",
"string.prototype.trimend": "^1.0.1",
"string.prototype.trimstart": "^1.0.1"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ }
}
},
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -8606,7 +9092,6 @@
"version": "0.10.53",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
"integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
- "dev": true,
"requires": {
"es6-iterator": "~2.0.3",
"es6-symbol": "~3.1.3",
@@ -8617,7 +9102,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "^0.10.35",
@@ -8628,12 +9112,22 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "dev": true,
"requires": {
"d": "^1.0.1",
"ext": "^1.1.2"
}
},
+ "es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -8644,8 +9138,7 @@
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"esutils": {
"version": "2.0.3",
@@ -8717,6 +9210,15 @@
"requires": {
"idna-uts46-hx": "^2.3.1",
"js-sha3": "^0.5.7"
+ },
+ "dependencies": {
+ "js-sha3": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
+ "dev": true,
+ "optional": true
+ }
}
},
"eth-json-rpc-infura": {
@@ -8770,6 +9272,12 @@
"abstract-leveldown": "~2.6.0"
}
},
+ "ethereum-common": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
+ "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
+ "dev": true
+ },
"ethereumjs-account": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz",
@@ -8792,14 +9300,6 @@
"ethereumjs-tx": "^1.2.2",
"ethereumjs-util": "^5.0.0",
"merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
- "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
- "dev": true
- }
}
},
"ethereumjs-tx": {
@@ -8810,6 +9310,14 @@
"requires": {
"ethereum-common": "^0.0.18",
"ethereumjs-util": "^5.0.0"
+ },
+ "dependencies": {
+ "ethereum-common": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz",
+ "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=",
+ "dev": true
+ }
}
},
"ethereumjs-util": {
@@ -8996,36 +9504,13 @@
"prr": "~1.0.1",
"semver": "~5.4.1",
"xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
},
"dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
}
}
},
@@ -9059,18 +9544,6 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -9196,6 +9669,12 @@
"abstract-leveldown": "~2.6.0"
}
},
+ "ethereum-common": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
+ "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
+ "dev": true
+ },
"ethereumjs-account": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz",
@@ -9218,14 +9697,6 @@
"ethereumjs-tx": "^1.2.2",
"ethereumjs-util": "^5.0.0",
"merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
- "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
- "dev": true
- }
}
},
"ethereumjs-tx": {
@@ -9236,6 +9707,14 @@
"requires": {
"ethereum-common": "^0.0.18",
"ethereumjs-util": "^5.0.0"
+ },
+ "dependencies": {
+ "ethereum-common": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz",
+ "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=",
+ "dev": true
+ }
}
},
"ethereumjs-util": {
@@ -9422,36 +9901,13 @@
"prr": "~1.0.1",
"semver": "~5.4.1",
"xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
},
"dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
}
}
},
@@ -9485,18 +9941,6 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -9756,36 +10200,13 @@
"prr": "~1.0.1",
"semver": "~5.4.1",
"xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
},
"dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
}
}
},
@@ -9819,18 +10240,6 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -9886,6 +10295,34 @@
"ethereum-cryptography": "^0.1.3",
"ethjs-util": "0.1.6",
"rlp": "^2.2.3"
+ },
+ "dependencies": {
+ "keccak": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/keccak/-/keccak-2.1.0.tgz",
+ "integrity": "sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==",
+ "requires": {
+ "bindings": "^1.5.0",
+ "inherits": "^2.0.4",
+ "nan": "^2.14.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "secp256k1": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz",
+ "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==",
+ "requires": {
+ "bindings": "^1.5.0",
+ "bip66": "^1.1.5",
+ "bn.js": "^4.11.8",
+ "create-hash": "^1.2.0",
+ "drbg.js": "^1.0.1",
+ "elliptic": "^6.5.2",
+ "nan": "^2.14.0",
+ "safe-buffer": "^5.1.2"
+ }
+ }
}
},
"ethereumjs-vm": {
@@ -10022,36 +10459,13 @@
"prr": "~1.0.1",
"semver": "~5.4.1",
"xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
},
"dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
}
}
},
@@ -10100,18 +10514,6 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -10185,7 +10587,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
"requires": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
@@ -10195,7 +10596,6 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -10210,7 +10610,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -10218,98 +10617,28 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
@@ -10386,7 +10715,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
"integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
- "dev": true,
"requires": {
"type": "^2.0.0"
},
@@ -10394,32 +10722,38 @@
"type": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
- "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==",
- "dev": true
+ "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
"requires": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
}
},
"extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -10435,7 +10769,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@@ -10443,17 +10776,33 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"requires": {
- "is-extendable": "^0.1.0"
+ "kind-of": "^6.0.0"
}
},
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
}
}
},
@@ -10472,6 +10821,17 @@
"checkpoint-store": "^1.1.0"
}
},
+ "fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -10484,6 +10844,14 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
"fetch-ponyfill": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz",
@@ -10493,12 +10861,6 @@
"node-fetch": "~1.7.1"
},
"dependencies": {
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
@@ -10511,6 +10873,34 @@
}
}
},
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
+ }
+ }
+ },
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -10546,150 +10936,92 @@
}
}
},
- "find-yarn-workspace-root": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz",
- "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==",
- "dev": true,
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"requires": {
- "fs-extra": "^4.0.3",
- "micromatch": "^3.1.4"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+ },
"flow-stoplight": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/flow-stoplight/-/flow-stoplight-1.0.0.tgz",
"integrity": "sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s=",
"dev": true
},
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
"for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -10702,8 +11034,15 @@
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
},
"forever-agent": {
"version": "0.6.1",
@@ -10733,7 +11072,6 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
"requires": {
"map-cache": "^0.2.2"
}
@@ -10745,41 +11083,64 @@
"dev": true,
"optional": true
},
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ },
"fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
+ "fs-minipass": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+ "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
+ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ }
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
},
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "optional": true,
"requires": {
"pump": "^3.0.0"
}
@@ -10787,8 +11148,7 @@
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getpass": {
"version": "0.1.7",
@@ -10803,7 +11163,6 @@
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -10813,6 +11172,90 @@
"path-is-absolute": "^1.0.0"
}
},
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
+ "requires": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
+ "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ }
+ },
"global": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
@@ -10821,14 +11264,42 @@
"requires": {
"min-document": "^2.19.0",
"process": "~0.5.1"
- },
- "dependencies": {
- "process": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
- "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
- "dev": true
- }
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "requires": {
+ "sparkles": "^1.0.0"
}
},
"got": {
@@ -10866,8 +11337,53 @@
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
- "dev": true
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
+ },
+ "gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "requires": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "dependencies": {
+ "gulp-cli": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
+ "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "requires": {
+ "glogg": "^1.0.0"
+ }
},
"har-schema": {
"version": "2.0.0",
@@ -10889,7 +11405,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
"requires": {
"function-bind": "^1.1.1"
}
@@ -10901,22 +11416,8 @@
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- }
}
},
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
"has-symbol-support-x": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
@@ -10927,8 +11428,7 @@
"has-symbols": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "dev": true
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
},
"has-to-string-tag-x": {
"version": "1.4.1",
@@ -10944,7 +11444,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@@ -10955,43 +11454,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
},
"dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
"kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -11002,7 +11473,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
"integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
"requires": {
"inherits": "^2.0.4",
"readable-stream": "^3.6.0",
@@ -11013,7 +11483,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -11026,12 +11495,38 @@
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
+ "hdkey": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.2.tgz",
+ "integrity": "sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ==",
+ "requires": {
+ "bs58check": "^2.1.2",
+ "safe-buffer": "^5.1.1",
+ "secp256k1": "^3.0.1"
+ },
+ "dependencies": {
+ "secp256k1": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz",
+ "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==",
+ "requires": {
+ "bindings": "^1.5.0",
+ "bip66": "^1.1.5",
+ "bn.js": "^4.11.8",
+ "create-hash": "^1.2.0",
+ "drbg.js": "^1.0.1",
+ "elliptic": "^6.5.2",
+ "nan": "^2.14.0",
+ "safe-buffer": "^5.1.2"
+ }
+ }
+ }
+ },
"heap": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
@@ -11042,7 +11537,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@@ -11059,6 +11553,19 @@
"os-tmpdir": "^1.0.1"
}
},
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
@@ -11139,20 +11646,17 @@
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
- "dev": true
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"immediate": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=",
- "dev": true
+ "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -11161,8 +11665,17 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
},
"invariant": {
"version": "2.2.4",
@@ -11173,6 +11686,11 @@
"loose-envify": "^1.0.0"
}
},
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -11180,13 +11698,28 @@
"dev": true,
"optional": true
},
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
"is-accessor-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-arguments": {
@@ -11195,56 +11728,78 @@
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
"dev": true
},
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
"is-callable": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
- "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==",
- "dev": true
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
+ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA=="
},
"is-data-descriptor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-date-object": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "dev": true
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
},
"is-descriptor": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-data-descriptor": "^1.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
}
},
"is-extendable": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
"requires": {
"is-plain-object": "^2.0.4"
}
},
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
"is-finite": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
@@ -11257,23 +11812,61 @@
"integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=",
"dev": true
},
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
"is-function": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
"integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
"dev": true
},
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
"is-hex-prefixed": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
"integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=",
"dev": true
},
- "is-negative-zero": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
- "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
- "dev": true
+ "is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="
+ },
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI="
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
},
"is-object": {
"version": "1.0.1",
@@ -11293,7 +11886,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
"requires": {
"isobject": "^3.0.1"
}
@@ -11302,11 +11894,18 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
"integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
- "dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
},
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
"is-retry-allowed": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
@@ -11314,11 +11913,15 @@
"dev": true,
"optional": true
},
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
"is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
@@ -11326,14 +11929,30 @@
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao="
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
},
"isarray": {
"version": "1.0.0",
@@ -11344,14 +11963,12 @@
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
},
"isstream": {
"version": "0.1.2",
@@ -11373,9 +11990,7 @@
"js-sha3": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
- "dev": true,
- "optional": true
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
},
"js-tokens": {
"version": "4.0.0",
@@ -11389,6 +12004,12 @@
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true
},
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ },
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -11446,17 +12067,27 @@
"jsonify": "~0.0.0"
}
},
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
@@ -11479,6 +12110,11 @@
"verror": "1.10.0"
}
},
+ "just-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
+ "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo="
+ },
"keccak": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
@@ -11502,16 +12138,73 @@
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
},
- "klaw-sync": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
- "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
- "dev": true,
+ "last-run": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
+ "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
"requires": {
- "graceful-fs": "^4.1.11"
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ }
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "requires": {
+ "readable-stream": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+ "requires": {
+ "flush-write-stream": "^1.0.2"
}
},
"level-codec": {
@@ -11536,11 +12229,34 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz",
"integrity": "sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==",
- "dev": true,
"requires": {
"inherits": "^2.0.1",
- "readable-stream": "^2.0.5",
"xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "level-errors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz",
+ "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==",
+ "requires": {
+ "errno": "~0.1.1"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
}
},
"level-mem": {
@@ -11562,6 +12278,12 @@
"xtend": "~4.0.0"
}
},
+ "immediate": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
+ "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=",
+ "dev": true
+ },
"ltgt": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
@@ -11625,6 +12347,61 @@
"pull-stream": "^3.6.8",
"typewiselite": "~1.0.0",
"xtend": "~4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "level-iterator-stream": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz",
+ "integrity": "sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.5",
+ "xtend": "^4.0.0"
+ }
+ },
+ "ltgt": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz",
+ "integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
"level-ws": {
@@ -11636,6 +12413,35 @@
"inherits": "^2.0.3",
"readable-stream": "^2.2.8",
"xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ }
}
},
"levelup": {
@@ -11650,6 +12456,31 @@
"xtend": "~4.0.0"
},
"dependencies": {
+ "abstract-leveldown": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz",
+ "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==",
+ "dev": true,
+ "requires": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "deferred-leveldown": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz",
+ "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==",
+ "dev": true,
+ "requires": {
+ "abstract-leveldown": "~5.0.0",
+ "inherits": "^2.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
"level-iterator-stream": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz",
@@ -11660,6 +12491,70 @@
"readable-stream": "^2.3.6",
"xtend": "^4.0.0"
}
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "liftoff": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+ "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
}
}
},
@@ -11706,26 +12601,78 @@
"integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=",
"dev": true
},
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ }
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
"requires": {
"object-visit": "^1.0.0"
}
},
+ "matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
+ "requires": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
"md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
@@ -11761,6 +12708,23 @@
"semaphore": ">=1.0.1"
},
"dependencies": {
+ "abstract-leveldown": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
+ "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
+ "requires": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
"ethereumjs-util": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz",
@@ -11776,6 +12740,55 @@
"safe-buffer": "^5.1.1"
}
},
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "level-codec": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz",
+ "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ=="
+ },
+ "level-errors": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz",
+ "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==",
+ "requires": {
+ "errno": "~0.1.1"
+ }
+ },
+ "levelup": {
+ "version": "1.3.9",
+ "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
+ "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",
+ "requires": {
+ "level-codec": "~7.0.0",
+ "level-errors": "~1.0.3",
+ "prr": "~1.0.1",
+ "semver": "~5.4.1",
+ "xtend": "~4.0.0"
+ }
+ },
+ "memdown": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
+ "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
+ "requires": {
+ "abstract-leveldown": "~2.7.1",
+ "functional-red-black-tree": "^1.0.1",
+ "immediate": "^3.2.3",
+ "inherits": "~2.0.1",
+ "safe-buffer": "~5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -11785,6 +12798,35 @@
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
}
}
@@ -11796,6 +12838,26 @@
"dev": true,
"optional": true
},
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
"miller-rabin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
@@ -11847,20 +12909,17 @@
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
},
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -11871,6 +12930,17 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
+ "minipass": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+ "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
"minizlib": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
@@ -11879,29 +12949,25 @@
"optional": true,
"requires": {
"minipass": "^2.9.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
}
},
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
"requires": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
}
},
"mkdirp": {
@@ -11909,6 +12975,7 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "^1.2.5"
}
@@ -11936,51 +13003,15 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "multibase": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz",
- "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==",
- "dev": true,
- "optional": true,
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
+ "mute-stdout": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg=="
},
- "multicodec": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz",
- "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==",
- "dev": true,
- "optional": true,
- "requires": {
- "varint": "^5.0.0"
- }
- },
- "multihashes": {
- "version": "0.4.21",
- "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz",
- "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.5.0",
- "multibase": "^0.7.0",
- "varint": "^5.0.0"
- },
- "dependencies": {
- "multibase": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz",
- "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==",
- "dev": true,
- "optional": true,
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
- }
- }
+ "nan": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
},
"nano-json-stream-parser": {
"version": "0.1.2",
@@ -11993,7 +13024,6 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -12018,14 +13048,7 @@
"next-tick": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
},
"node-addon-api": {
"version": "2.0.2",
@@ -12045,6 +13068,29 @@
"integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
"dev": true
},
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
"normalize-url": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
@@ -12052,6 +13098,19 @@
"dev": true,
"optional": true
},
+ "now-and-later": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+ "requires": {
+ "once": "^1.3.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
"number-to-bn": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
@@ -12081,14 +13140,12 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
"requires": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
@@ -12098,60 +13155,12 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -12161,8 +13170,7 @@
"object-inspect": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
- "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
- "dev": true
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
},
"object-is": {
"version": "1.1.3",
@@ -12206,7 +13214,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
"requires": {
"isobject": "^3.0.0"
}
@@ -12215,7 +13222,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz",
"integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==",
- "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.0",
@@ -12227,7 +13233,6 @@
"version": "1.18.0-next.1",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
"integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
- "dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
@@ -12242,9 +13247,25 @@
"string.prototype.trimend": "^1.0.1",
"string.prototype.trimstart": "^1.0.1"
}
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
}
}
},
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
"object.getownpropertydescriptors": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
@@ -12255,15 +13276,32 @@
"es-abstract": "^1.17.0-next.1"
}
},
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
"requires": {
"isobject": "^3.0.1"
}
},
+ "object.reduce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
+ "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
"oboe": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz",
@@ -12288,17 +13326,66 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
"requires": {
"wrappy": "1"
}
},
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+ "requires": {
+ "readable-stream": "^2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -12312,6 +13399,13 @@
"dev": true,
"optional": true
},
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "optional": true
+ },
"p-timeout": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
@@ -12320,15 +13414,6 @@
"optional": true,
"requires": {
"p-finally": "^1.0.0"
- },
- "dependencies": {
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true,
- "optional": true
- }
}
},
"parse-asn1": {
@@ -12345,12 +13430,40 @@
"safe-buffer": "^5.1.1"
}
},
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
"parse-headers": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
"integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==",
"dev": true
},
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -12361,106 +13474,43 @@
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
},
- "patch-package": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz",
- "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==",
- "dev": true,
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"requires": {
- "@yarnpkg/lockfile": "^1.1.0",
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "find-yarn-workspace-root": "^1.2.1",
- "fs-extra": "^7.0.1",
- "is-ci": "^2.0.0",
- "klaw-sync": "^6.0.0",
- "minimist": "^1.2.0",
- "rimraf": "^2.6.3",
- "semver": "^5.6.0",
- "slash": "^2.0.0",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
+ "pinkie-promise": "^2.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
},
"path-to-regexp": {
"version": "0.1.7",
@@ -12469,11 +13519,27 @@
"dev": true,
"optional": true
},
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
"pbkdf2": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
"integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
- "dev": true,
"requires": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
@@ -12482,17 +13548,34 @@
"sha.js": "^2.4.8"
}
},
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
"posix-character-classes": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"precond": {
"version": "0.2.3",
@@ -12507,17 +13590,27 @@
"dev": true,
"optional": true
},
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+ },
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"dev": true
},
+ "process": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
+ "dev": true
+ },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"promise-to-callback": {
"version": "1.0.0",
@@ -12543,8 +13636,7 @@
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
"pseudomap": {
"version": "1.0.2",
@@ -12635,13 +13727,32 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "optional": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -12651,8 +13762,7 @@
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
"query-string": {
"version": "5.1.1",
@@ -12706,6 +13816,25 @@
"unpipe": "1.0.0"
}
},
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@@ -12729,6 +13858,58 @@
}
}
},
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
"regenerate": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
@@ -12756,7 +13937,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
"requires": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
@@ -12796,27 +13976,41 @@
"dev": true,
"requires": {
"jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
}
},
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+ "requires": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+ "requires": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
"repeat-element": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
},
"repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"repeating": {
"version": "2.0.1",
@@ -12827,6 +14021,21 @@
"is-finite": "^1.0.0"
}
},
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw=="
+ },
+ "replace-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
+ "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ }
+ },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -12853,22 +14062,55 @@
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ }
}
},
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
"responselike": {
"version": "1.0.2",
@@ -12892,8 +14134,7 @@
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
},
"rimraf": {
"version": "2.6.3",
@@ -12908,7 +14149,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
"integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
"requires": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
@@ -12932,8 +14172,7 @@
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safe-event-emitter": {
"version": "1.0.1",
@@ -12948,7 +14187,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
"requires": {
"ret": "~0.1.10"
}
@@ -12965,12 +14203,18 @@
"integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
"dev": true
},
+ "scrypt.js": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.3.0.tgz",
+ "integrity": "sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A==",
+ "requires": {
+ "scryptsy": "^1.2.1"
+ }
+ },
"scryptsy": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz",
"integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=",
- "dev": true,
- "optional": true,
"requires": {
"pbkdf2": "^3.0.3"
}
@@ -12992,12 +14236,28 @@
"integrity": "sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg==",
"dev": true
},
+ "seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "requires": {
+ "commander": "^2.8.1"
+ }
+ },
"semaphore": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
"integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==",
"dev": true
},
+ "semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
+ "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
+ "requires": {
+ "sver-compat": "^1.5.0"
+ }
+ },
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@@ -13075,6 +14335,11 @@
"xhr": "^2.3.3"
}
},
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
@@ -13085,10 +14350,8 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
"requires": {
"extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
"is-plain-object": "^2.0.3",
"split-string": "^3.0.1"
},
@@ -13096,17 +14359,7 @@
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
}
}
},
@@ -13127,7 +14380,6 @@
"version": "2.4.11",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
"requires": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
@@ -13152,11 +14404,16 @@
"simple-concat": "^1.0.0"
}
},
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
@@ -13172,7 +14429,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -13180,95 +14436,22 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
},
"extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
@@ -13276,7 +14459,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
"requires": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@@ -13287,10 +14469,35 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
}
}
},
@@ -13298,22 +14505,14 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
"requires": {
"kind-of": "^3.2.0"
},
"dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -13323,14 +14522,12 @@
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
},
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
"requires": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
@@ -13360,14 +14557,45 @@
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw=="
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
},
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
"requires": {
"extend-shallow": "^3.0.0"
}
@@ -13397,11 +14625,15 @@
}
}
},
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
"requires": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@@ -13410,74 +14642,7 @@
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
}
}
},
@@ -13488,6 +14653,16 @@
"dev": true,
"optional": true
},
+ "stream-exhaust": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw=="
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
"stream-to-pull-stream": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz",
@@ -13513,6 +14688,16 @@
"dev": true,
"optional": true
},
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
"string.prototype.trim": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz",
@@ -13549,7 +14734,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
"integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
- "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5"
@@ -13559,7 +14743,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
"integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
- "dev": true,
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5"
@@ -13569,7 +14752,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
},
@@ -13577,11 +14759,34 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
},
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "requires": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
"strip-hex-prefix": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
@@ -13595,11 +14800,19 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
+ "sver-compat": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
+ "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
+ "requires": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
"swarm-js": {
"version": "0.1.40",
"resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz",
@@ -13662,13 +14875,6 @@
"url-to-options": "^1.0.1"
}
},
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true,
- "optional": true
- },
"p-cancelable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
@@ -13765,25 +14971,62 @@
"yallist": "^3.0.3"
},
"dependencies": {
- "fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"optional": true,
"requires": {
- "minipass": "^2.6.0"
+ "minimist": "^1.2.5"
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "requires": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "dev": true,
- "optional": true,
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
+ "safe-buffer": "~5.1.0"
}
}
}
@@ -13791,19 +15034,65 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
}
},
+ "through2-filter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+ "requires": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
+ },
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
@@ -13820,26 +15109,38 @@
"rimraf": "^2.6.3"
}
},
+ "to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ }
+ },
+ "to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
"to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
"requires": {
"kind-of": "^3.0.2"
},
"dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@@ -13857,7 +15158,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
"requires": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@@ -13865,6 +15165,23 @@
"safe-regex": "^1.1.0"
}
},
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "to-through": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+ "requires": {
+ "through2": "^2.0.3"
+ }
+ },
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@@ -13912,8 +15229,7 @@
"type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
- "dev": true
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
},
"type-is": {
"version": "1.6.18",
@@ -13929,14 +15245,12 @@
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
"requires": {
"is-typedarray": "^1.0.0"
}
@@ -13969,6 +15283,20 @@
"dev": true,
"optional": true
},
+ "unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "requires": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
+ },
"underscore": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
@@ -13976,31 +15304,50 @@
"dev": true,
"optional": true
},
+ "undertaker": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz",
+ "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==",
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ }
+ },
+ "undertaker-registry": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
+ "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA="
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
"set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
+ }
+ },
+ "unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+ "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+ "requires": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"unorm": {
"version": "1.6.0",
@@ -14019,7 +15366,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
"requires": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@@ -14029,7 +15375,6 @@
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
"requires": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@@ -14040,7 +15385,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
"requires": {
"isarray": "1.0.0"
}
@@ -14050,11 +15394,20 @@
"has-values": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
}
}
},
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
"uri-js": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
@@ -14067,8 +15420,7 @@
"urix": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
},
"url-parse-lax": {
"version": "3.0.0",
@@ -14097,25 +15449,7 @@
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "utf-8-validate": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz",
- "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==",
- "dev": true,
- "requires": {
- "node-gyp-build": "~3.7.0"
- },
- "dependencies": {
- "node-gyp-build": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz",
- "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==",
- "dev": true
- }
- }
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
},
"utf8": {
"version": "3.0.0",
@@ -14127,8 +15461,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"util.promisify": {
"version": "1.0.1",
@@ -14155,12 +15488,27 @@
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"dev": true
},
- "varint": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
- "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==",
- "dev": true,
- "optional": true
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM="
},
"vary": {
"version": "1.1.2",
@@ -14180,6 +15528,101 @@
"extsprintf": "^1.2.0"
}
},
+ "vinyl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
+ "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+ "requires": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
+ "requires": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
"web3": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/web3/-/web3-1.2.11.tgz",
@@ -14194,6 +15637,13 @@
"web3-net": "1.2.11",
"web3-shh": "1.2.11",
"web3-utils": "1.2.11"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "12.12.53",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz",
+ "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ=="
+ }
}
},
"web3-bzz": {
@@ -14338,6 +15788,75 @@
"@ethersproject/abi": "5.0.0-beta.153",
"underscore": "1.9.1",
"web3-utils": "1.2.11"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.28",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.28.tgz",
+ "integrity": "sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ=="
+ },
+ "aes-js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
+ "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
+ },
+ "elliptic": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
+ "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "ethers": {
+ "version": "4.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.3.tgz",
+ "integrity": "sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog==",
+ "requires": {
+ "@types/node": "^10.3.2",
+ "aes-js": "3.0.0",
+ "bn.js": "^4.4.0",
+ "elliptic": "6.3.3",
+ "hash.js": "1.1.3",
+ "js-sha3": "0.5.7",
+ "scrypt-js": "2.0.3",
+ "setimmediate": "1.0.4",
+ "uuid": "2.0.1",
+ "xmlhttprequest": "1.8.0"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "js-sha3": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
+ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
+ },
+ "scrypt-js": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz",
+ "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q="
+ },
+ "setimmediate": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz",
+ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48="
+ },
+ "uuid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
+ "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w="
+ }
}
},
"web3-eth-accounts": {
@@ -14426,6 +15945,15 @@
"requires": {
"bn.js": "^4.11.9",
"web3-utils": "1.2.11"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true,
+ "optional": true
+ }
}
},
"web3-eth-personal": {
@@ -14520,6 +16048,12 @@
"ethereumjs-util": "^5.1.1"
}
},
+ "ethereum-common": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
+ "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
+ "dev": true
+ },
"ethereumjs-abi": {
"version": "git+https://git@github.com/ethereumjs/ethereumjs-abi.git#1ce6a1d64235fabe2aaf827fd606def55693508f",
"from": "git+https://github.com/ethereumjs/ethereumjs-abi.git",
@@ -14568,14 +16102,6 @@
"ethereumjs-tx": "^1.2.2",
"ethereumjs-util": "^5.0.0",
"merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz",
- "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==",
- "dev": true
- }
}
},
"ethereumjs-tx": {
@@ -14586,6 +16112,14 @@
"requires": {
"ethereum-common": "^0.0.18",
"ethereumjs-util": "^5.0.0"
+ },
+ "dependencies": {
+ "ethereum-common": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz",
+ "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=",
+ "dev": true
+ }
}
},
"ethereumjs-util": {
@@ -14772,36 +16306,13 @@
"prr": "~1.0.1",
"semver": "~5.4.1",
"xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
- "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
},
"dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
- "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
}
}
},
@@ -14835,23 +16346,56 @@
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
"dev": true
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ }
+ }
},
"ws": {
"version": "5.2.2",
@@ -14930,6 +16474,13 @@
"utf8": "3.0.0"
},
"dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true,
+ "optional": true
+ },
"eth-lib": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
@@ -14981,11 +16532,32 @@
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==",
"dev": true
},
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "3.3.3",
@@ -15056,23 +16628,69 @@
"cookiejar": "^2.1.1"
}
},
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+ },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
},
"yaeti": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
- "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
- "dev": true
+ "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
+ },
+ "yargs": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz",
+ "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "5.0.0-security.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0-security.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz",
+ "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
}
}
},
@@ -15468,8 +17086,7 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbol-support-x": {
"version": "1.4.2",
@@ -16035,8 +17652,7 @@
"is-negative-zero": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
- "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=",
- "dev": true
+ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE="
},
"is-number": {
"version": "7.0.0",
@@ -17347,6 +18963,52 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "multibase": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz",
+ "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base-x": "^3.0.8",
+ "buffer": "^5.5.0"
+ }
+ },
+ "multicodec": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz",
+ "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "varint": "^5.0.0"
+ }
+ },
+ "multihashes": {
+ "version": "0.4.21",
+ "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz",
+ "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "multibase": "^0.7.0",
+ "varint": "^5.0.0"
+ },
+ "dependencies": {
+ "multibase": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz",
+ "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base-x": "^3.0.8",
+ "buffer": "^5.5.0"
+ }
+ }
+ }
+ },
"multimatch": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
@@ -20476,6 +22138,15 @@
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true
},
+ "utf-8-validate": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.3.tgz",
+ "integrity": "sha512-jtJM6fpGv8C1SoH4PtG22pGto6x+Y8uPprW0tw3//gGFhDDTiuksgradgFN6yRayDP4SyZZa6ZMGHLIa17+M8A==",
+ "dev": true,
+ "requires": {
+ "node-gyp-build": "^4.2.0"
+ }
+ },
"utf8": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
@@ -20522,6 +22193,13 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "varint": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+ "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==",
+ "dev": true,
+ "optional": true
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/specs/harness/LendingPoolHarnessForVariableDebtToken.sol b/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
index f5ea9be1..b366d22a 100644
--- a/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
+++ b/specs/harness/LendingPoolHarnessForVariableDebtToken.sol
@@ -1,16 +1,12 @@
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
-import {
- ReserveConfiguration
-} from '../../contracts/libraries/configuration/ReserveConfiguration.sol';
-import {UserConfiguration} from '../../contracts/libraries/configuration/UserConfiguration.sol';
-import {ReserveLogic} from '../../contracts/libraries/logic/ReserveLogic.sol';
import {ILendingPool} from '../../contracts/interfaces/ILendingPool.sol';
import {LendingPool} from '../../contracts/lendingpool/LendingPool.sol';
import {
ILendingPoolAddressesProvider
} from '../../contracts/interfaces/ILendingPoolAddressesProvider.sol';
+import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';
/*
Certora: Harness that delegates calls to the original LendingPool.
@@ -71,38 +67,38 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
address collateral,
address asset,
address user,
- uint256 purchaseAmount,
+ uint256 debtToCover,
bool receiveAToken
) external override {
- originalPool.liquidationCall(collateral, asset, user, purchaseAmount, receiveAToken);
+ originalPool.liquidationCall(collateral, asset, user, debtToCover, receiveAToken);
}
- function getReservesList() external override view returns (address[] memory) {
+ function getReservesList() external view override returns (address[] memory) {
return originalPool.getReservesList();
}
function getReserveData(address asset)
external
- override
view
- returns (ReserveLogic.ReserveData memory)
+ override
+ returns (DataTypes.ReserveData memory)
{
return originalPool.getReserveData(asset);
}
function getUserConfiguration(address user)
external
- override
view
- returns (UserConfiguration.Map memory)
+ override
+ returns (DataTypes.UserConfigurationMap memory)
{
return originalPool.getUserConfiguration(user);
}
function getUserAccountData(address user)
external
- override
view
+ override
returns (
uint256 totalCollateralETH,
uint256 totalBorrowsETH,
@@ -144,16 +140,16 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
function getConfiguration(address asset)
external
- override
view
- returns (ReserveConfiguration.Map memory)
+ override
+ returns (DataTypes.ReserveConfigurationMap memory)
{
return originalPool.getConfiguration(asset);
}
mapping(uint256 => uint256) private reserveNormalizedIncome;
- function getReserveNormalizedIncome(address asset) external override view returns (uint256) {
+ function getReserveNormalizedIncome(address asset) external view override returns (uint256) {
require(reserveNormalizedIncome[block.timestamp] == 1e27);
return reserveNormalizedIncome[block.timestamp];
}
@@ -162,8 +158,8 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
function getReserveNormalizedVariableDebt(address asset)
external
- override
view
+ override
returns (uint256)
{
require(reserveNormalizedVariableDebt[block.timestamp] == 1e27);
@@ -174,7 +170,7 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
originalPool.setPause(val);
}
- function paused() external override view returns (bool) {
+ function paused() external view override returns (bool) {
return originalPool.paused();
}
@@ -201,7 +197,7 @@ contract LendingPoolHarnessForVariableDebtToken is ILendingPool {
originalPool.finalizeTransfer(asset, from, to, amount, balanceFromAfter, balanceToBefore);
}
- function getAddressesProvider() external override view returns (ILendingPoolAddressesProvider) {
+ function getAddressesProvider() external view override returns (ILendingPoolAddressesProvider) {
return originalPool.getAddressesProvider();
}
}
diff --git a/specs/harness/StableDebtTokenHarness.sol b/specs/harness/StableDebtTokenHarness.sol
index 3daf2261..69a9aa8a 100644
--- a/specs/harness/StableDebtTokenHarness.sol
+++ b/specs/harness/StableDebtTokenHarness.sol
@@ -1,4 +1,4 @@
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
import {StableDebtToken} from '../../contracts/tokenization/StableDebtToken.sol';
import {IncentivizedERC20} from '../../contracts/tokenization/IncentivizedERC20.sol';
diff --git a/specs/harness/UserConfigurationHarness.sol b/specs/harness/UserConfigurationHarness.sol
index 0ab1c495..38ca2686 100644
--- a/specs/harness/UserConfigurationHarness.sol
+++ b/specs/harness/UserConfigurationHarness.sol
@@ -1,4 +1,4 @@
-pragma solidity ^0.6.8;
+pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
import {UserConfiguration} from '../../contracts/libraries/configuration/UserConfiguration.sol';
@@ -7,7 +7,7 @@ import {UserConfiguration} from '../../contracts/libraries/configuration/UserCon
A wrapper contract for calling functions from the library UserConfiguration.
*/
contract UserConfigurationHarness {
- UserConfiguration.Map internal usersConfig;
+ DataTypes.UserConfigurationMap internal usersConfig;
function setBorrowing(
address user,
diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts
index 11d25729..b4da760f 100644
--- a/tasks/dev/5_initialize.ts
+++ b/tasks/dev/5_initialize.ts
@@ -1,4 +1,4 @@
-import {task} from 'hardhat/config';
+import { task } from 'hardhat/config';
import {
deployLendingPoolCollateralManager,
deployMockFlashLoanReceiver,
@@ -13,22 +13,25 @@ import {
loadPoolConfig,
} from '../../helpers/configuration';
-import {tEthereumAddress, AavePools, eContractid} from '../../helpers/types';
-import {waitForTx, filterMapBy} from '../../helpers/misc-utils';
+import { tEthereumAddress, AavePools, eContractid } from '../../helpers/types';
+import { waitForTx, filterMapBy } from '../../helpers/misc-utils';
import {
enableReservesToBorrowByHelper,
enableReservesAsCollateralByHelper,
initReservesByHelper,
} from '../../helpers/init-helpers';
-import {getAllTokenAddresses} from '../../helpers/mock-helpers';
-import {ZERO_ADDRESS} from '../../helpers/constants';
-import {getAllMockedTokens, getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
-import {insertContractAddressInDb} from '../../helpers/contracts-helpers';
+import { getAllTokenAddresses } from '../../helpers/mock-helpers';
+import { ZERO_ADDRESS } from '../../helpers/constants';
+import {
+ getAllMockedTokens,
+ getLendingPoolAddressesProvider,
+} from '../../helpers/contracts-getters';
+import { insertContractAddressInDb } from '../../helpers/contracts-helpers';
task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
- .setAction(async ({verify, pool}, localBRE) => {
+ .setAction(async ({ verify, pool }, localBRE) => {
await localBRE.run('set-DRE');
const poolConfig = loadPoolConfig(pool);
@@ -37,7 +40,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
const addressesProvider = await getLendingPoolAddressesProvider();
- const protoPoolReservesAddresses = <{[symbol: string]: tEthereumAddress}>(
+ const protoPoolReservesAddresses = <{ [symbol: string]: tEthereumAddress }>(
filterMapBy(allTokenAddresses, (key: string) => !key.includes('UNI_'))
);
@@ -47,7 +50,13 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
const admin = await addressesProvider.getPoolAdmin();
- await initReservesByHelper(reservesParams, protoPoolReservesAddresses, admin, ZERO_ADDRESS);
+ await initReservesByHelper(
+ reservesParams,
+ protoPoolReservesAddresses,
+ admin,
+ ZERO_ADDRESS,
+ verify
+ );
await enableReservesToBorrowByHelper(
reservesParams,
protoPoolReservesAddresses,
@@ -75,7 +84,7 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
mockFlashLoanReceiver.address
);
- await deployWalletBalancerProvider(addressesProvider.address, verify);
+ await deployWalletBalancerProvider(verify);
await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
diff --git a/tasks/dev/6_wallet_balance_provider.ts b/tasks/dev/6_wallet_balance_provider.ts
index be7f6419..1b444598 100644
--- a/tasks/dev/6_wallet_balance_provider.ts
+++ b/tasks/dev/6_wallet_balance_provider.ts
@@ -1,13 +1,12 @@
-import {task} from 'hardhat/config';
-import {deployWalletBalancerProvider} from '../../helpers/contracts-deployments';
+import { task } from 'hardhat/config';
+import { deployWalletBalancerProvider } from '../../helpers/contracts-deployments';
-import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
+import { getLendingPoolAddressesProvider } from '../../helpers/contracts-getters';
task('dev:wallet-balance-provider', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan')
- .setAction(async ({verify}, localBRE) => {
+ .setAction(async ({ verify }, localBRE) => {
await localBRE.run('set-DRE');
- const addressesProvider = await getLendingPoolAddressesProvider();
- await deployWalletBalancerProvider(addressesProvider.address, verify);
+ await deployWalletBalancerProvider(verify);
});
diff --git a/tasks/full/7_data-provider.ts b/tasks/full/4_data-provider.ts
similarity index 58%
rename from tasks/full/7_data-provider.ts
rename to tasks/full/4_data-provider.ts
index 4f0954a5..af03779f 100644
--- a/tasks/full/7_data-provider.ts
+++ b/tasks/full/4_data-provider.ts
@@ -1,11 +1,11 @@
-import {task} from 'hardhat/config';
-import {deployAaveProtocolDataProvider} from '../../helpers/contracts-deployments';
-import {exit} from 'process';
-import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
+import { task } from 'hardhat/config';
+import { deployAaveProtocolDataProvider } from '../../helpers/contracts-deployments';
+import { exit } from 'process';
+import { getLendingPoolAddressesProvider } from '../../helpers/contracts-getters';
task('full:data-provider', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan')
- .setAction(async ({verify}, localBRE) => {
+ .setAction(async ({ verify }, localBRE) => {
try {
await localBRE.run('set-DRE');
diff --git a/tasks/full/5_initialize.ts b/tasks/full/5_initialize.ts
index 99b55f15..e852c72e 100644
--- a/tasks/full/5_initialize.ts
+++ b/tasks/full/5_initialize.ts
@@ -1,45 +1,48 @@
-import {task} from 'hardhat/config';
-import {getParamPerNetwork} from '../../helpers/contracts-helpers';
+import { task } from 'hardhat/config';
+import { getParamPerNetwork } from '../../helpers/contracts-helpers';
import {
deployLendingPoolCollateralManager,
deployWalletBalancerProvider,
deployAaveProtocolDataProvider,
deployWETHGateway,
} from '../../helpers/contracts-deployments';
-import {loadPoolConfig, ConfigNames, getWethAddress} from '../../helpers/configuration';
-import {eEthereumNetwork, ICommonConfiguration} from '../../helpers/types';
-import {waitForTx} from '../../helpers/misc-utils';
+import { loadPoolConfig, ConfigNames, getWethAddress } from '../../helpers/configuration';
+import { eEthereumNetwork, ICommonConfiguration } from '../../helpers/types';
+import { waitForTx } from '../../helpers/misc-utils';
import {
initReservesByHelper,
enableReservesToBorrowByHelper,
enableReservesAsCollateralByHelper,
} from '../../helpers/init-helpers';
-import {exit} from 'process';
-import {getLendingPoolAddressesProvider} from '../../helpers/contracts-getters';
-import {ZERO_ADDRESS} from '../../helpers/constants';
+import { exit } from 'process';
+import {
+ getAaveProtocolDataProvider,
+ getLendingPoolAddressesProvider,
+} from '../../helpers/contracts-getters';
+import { ZERO_ADDRESS } from '../../helpers/constants';
task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
.addFlag('verify', 'Verify contracts at Etherscan')
.addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
- .setAction(async ({verify, pool}, localBRE) => {
+ .setAction(async ({ verify, pool }, localBRE) => {
try {
await localBRE.run('set-DRE');
const network = localBRE.network.name;
const poolConfig = loadPoolConfig(pool);
- const {ReserveAssets, ReservesConfig} = poolConfig as ICommonConfiguration;
+ const { ReserveAssets, ReservesConfig } = poolConfig as ICommonConfiguration;
const reserveAssets = await getParamPerNetwork(ReserveAssets, network);
const addressesProvider = await getLendingPoolAddressesProvider();
- const testHelpers = await deployAaveProtocolDataProvider(addressesProvider.address, verify);
+ const testHelpers = await getAaveProtocolDataProvider();
const admin = await addressesProvider.getPoolAdmin();
if (!reserveAssets) {
throw 'Reserve assets is undefined. Check ReserveAssets configuration at config directory';
}
- await initReservesByHelper(ReservesConfig, reserveAssets, admin, ZERO_ADDRESS);
+ await initReservesByHelper(ReservesConfig, reserveAssets, admin, ZERO_ADDRESS, verify);
await enableReservesToBorrowByHelper(ReservesConfig, reserveAssets, testHelpers, admin);
await enableReservesAsCollateralByHelper(ReservesConfig, reserveAssets, testHelpers, admin);
@@ -48,7 +51,7 @@ task('full:initialize-lending-pool', 'Initialize lending pool configuration.')
await addressesProvider.setLendingPoolCollateralManager(collateralManager.address)
);
- await deployWalletBalancerProvider(addressesProvider.address, verify);
+ await deployWalletBalancerProvider(verify);
const wethAddress = await getWethAddress(poolConfig);
const lendingPoolAddress = await addressesProvider.getLendingPool();
diff --git a/test/__setup.spec.ts b/test/__setup.spec.ts
index 9a66d087..f2a045f1 100644
--- a/test/__setup.spec.ts
+++ b/test/__setup.spec.ts
@@ -247,7 +247,7 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
]);
await insertContractAddressInDb(eContractid.UniswapRepayAdapter, UniswapRepayAdapter.address);
- await deployWalletBalancerProvider(addressesProvider.address);
+ await deployWalletBalancerProvider();
await deployWETHGateway([mockTokens.WETH.address, lendingPoolAddress]);
diff --git a/test/addresses-provider-registry.spec.ts b/test/addresses-provider-registry.spec.ts
index caa135e2..d26eae21 100644
--- a/test/addresses-provider-registry.spec.ts
+++ b/test/addresses-provider-registry.spec.ts
@@ -44,8 +44,7 @@ makeSuite('AddressesProviderRegistry', (testEnv: TestEnv) => {
it('Removes the mock addresses provider', async () => {
const {users, registry, addressesProvider} = testEnv;
- //checking the isAddressesProviderRegistered function
- const id = await registry.isAddressesProviderRegistered(users[1].address);
+ const id = await registry.getAddressesProviderIdByAddress(users[1].address);
expect(id).to.be.equal('2', 'Invalid isRegistered return value');
@@ -88,7 +87,7 @@ makeSuite('AddressesProviderRegistry', (testEnv: TestEnv) => {
const providers = await registry.getAddressesProvidersList();
- const id = await registry.isAddressesProviderRegistered(addressesProvider.address);
+ const id = await registry.getAddressesProviderIdByAddress(addressesProvider.address);
expect(providers.length).to.be.equal(2, 'Invalid length of the addresses providers list');
diff --git a/test/atoken-transfer.spec.ts b/test/atoken-transfer.spec.ts
index db57bd24..bba0da59 100644
--- a/test/atoken-transfer.spec.ts
+++ b/test/atoken-transfer.spec.ts
@@ -1,4 +1,4 @@
-import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants';
+import {APPROVAL_AMOUNT_LENDING_POOL, MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {expect} from 'chai';
import {ethers} from 'ethers';
@@ -6,8 +6,6 @@ import {RateMode, ProtocolErrors} from '../helpers/types';
import {makeSuite, TestEnv} from './helpers/make-suite';
import {CommonsConfig} from '../markets/aave/commons';
-const APPROVAL_AMOUNT_LENDING_POOL =
- CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore;
const AAVE_REFERRAL = CommonsConfig.ProtocolGlobalParams.AaveReferral;
makeSuite('AToken: Transfer', (testEnv: TestEnv) => {
diff --git a/test/configurator.spec.ts b/test/configurator.spec.ts
index 76f9ca39..7d8a64d4 100644
--- a/test/configurator.spec.ts
+++ b/test/configurator.spec.ts
@@ -1,11 +1,7 @@
import {TestEnv, makeSuite} from './helpers/make-suite';
-import {RAY} from '../helpers/constants';
+import {APPROVAL_AMOUNT_LENDING_POOL, RAY} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {ProtocolErrors} from '../helpers/types';
-import {CommonsConfig} from '../markets/aave/commons';
-
-const APPROVAL_AMOUNT_LENDING_POOL =
- CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore;
const {expect} = require('chai');
diff --git a/test/liquidation-atoken.spec.ts b/test/liquidation-atoken.spec.ts
index 32c4a2b2..9593fb52 100644
--- a/test/liquidation-atoken.spec.ts
+++ b/test/liquidation-atoken.spec.ts
@@ -1,16 +1,12 @@
import BigNumber from 'bignumber.js';
import {DRE} from '../helpers/misc-utils';
-import {oneEther} from '../helpers/constants';
+import {APPROVAL_AMOUNT_LENDING_POOL, oneEther} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {makeSuite} from './helpers/make-suite';
import {ProtocolErrors, RateMode} from '../helpers/types';
import {calcExpectedVariableDebtTokenBalance} from './helpers/utils/calculations';
import {getUserData, getReserveData} from './helpers/utils/helpers';
-import {CommonsConfig} from '../markets/aave/commons';
-
-const APPROVAL_AMOUNT_LENDING_POOL =
- CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore;
const chai = require('chai');
const {expect} = chai;
diff --git a/test/liquidation-underlying.spec.ts b/test/liquidation-underlying.spec.ts
index 39a68d7f..553a574a 100644
--- a/test/liquidation-underlying.spec.ts
+++ b/test/liquidation-underlying.spec.ts
@@ -1,7 +1,7 @@
import BigNumber from 'bignumber.js';
import {DRE, increaseTime} from '../helpers/misc-utils';
-import {oneEther} from '../helpers/constants';
+import {APPROVAL_AMOUNT_LENDING_POOL, oneEther} from '../helpers/constants';
import {convertToCurrencyDecimals} from '../helpers/contracts-helpers';
import {makeSuite} from './helpers/make-suite';
import {ProtocolErrors, RateMode} from '../helpers/types';
@@ -9,8 +9,6 @@ import {calcExpectedStableDebtTokenBalance} from './helpers/utils/calculations';
import {getUserData} from './helpers/utils/helpers';
import {CommonsConfig} from '../markets/aave/commons';
-const APPROVAL_AMOUNT_LENDING_POOL =
- CommonsConfig.ProtocolGlobalParams.ApprovalAmountLendingPoolCore;
import {parseEther} from 'ethers/lib/utils';
const chai = require('chai');