feat: clean debt bridge connector and payable fns

This commit is contained in:
gitpusha 2020-10-24 12:00:58 +02:00 committed by Luis Schliesske
parent 0b8ef845d9
commit a6107586d1
6 changed files with 118 additions and 114 deletions

View File

@ -217,7 +217,7 @@ abstract contract GelatoHelpers is Helpers {
return 0x169E633A2D1E6c10dD91238Ba11c4A708dfEF37C;
}
function _getGasPrice() internal view returns (uint256) {
function _getGelatoGasPrice() internal view returns (uint256) {
return
uint256(
GelatoGasPriceOracle(_getGelatoGasPriceOracle()).latestAnswer()
@ -259,24 +259,20 @@ abstract contract MakerResolver is GelatoHelpers {
}
}
/// @title ConnectGelatoDebtBridgeFromMaker
/// @notice InstaDapp connector for full or partial refinancing of Maker debt positions.
/// @author Gelato Team
contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
using GelatoBytes for bytes;
// solhint-disable-next-line const-name-snakecase
string public constant override name = "GelatoDebtBridge-v1.0";
uint256 public constant GAS_LIMIT = 1933090 + (19331 * 2); // 1933080 + ~2% (Estimated Value)
uint256 public constant GAS_COST = 1933090 + (19331 * 2); // 1933080 + ~2% (Estimated Value)
constructor(uint256 _id) {
__id = _id;
}
/// @notice Get gas price from gelato Gas Price Oracle and multiply
/// this gas price by the estimated amount of needed for executing
/// the transaction
function _getFees() internal view returns (uint256 gasCost) {
gasCost = _mul(GAS_LIMIT, _getGasPrice());
}
/// @notice Saves Data to InstaMemory that can be used for DebtBridge Maker->Compound
/// @dev Use wad for colRatios. The user has no influence over setUint or getUint.
/// @param _vaultId The id of the makerDAO vault.
@ -288,7 +284,7 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
/// method e.g. the function selector of MakerOracle's read function.
// @param _getId Id for writting in instaMemory.
// @param _setId Id for loading from instaMemory.
function saveDebtBridgeDataToMemory(
function savePartialRefinanceDataToMemory(
uint256 _vaultId,
uint256 _wMinColRatioMaker, // should be in ray because maker use ray standard
uint256 _wMinColRatioB, // should be in wad because compound use wad standard
@ -296,10 +292,10 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
bytes calldata _oraclePayload,
uint256, /*_getId,*/
uint256 /*_setId*/
) public virtual {
) public payable virtual {
(
uint256 wDaiDebtToMove,
uint256 wCollateralToMove,
uint256 wColToWithdrawFromMaker,
uint256 gasFeesPaidFromCol
) = computeDebtBridge(
_vaultId,
@ -311,56 +307,35 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
_setInstaMemoryUints(
wDaiDebtToMove,
_add(wCollateralToMove, gasFeesPaidFromCol),
wCollateralToMove,
wDaiDebtToMove,
wColToWithdrawFromMaker,
_sub(wColToWithdrawFromMaker, gasFeesPaidFromCol), // _wColToDepositInB
gasFeesPaidFromCol
);
}
/// @notice Save in instaMemory the needed values for doing full refinancing between makerDAO and Compound.
/// @notice Stores payload for full refinancing from a Maker position in InstaMemory.
/// @param _vaultID The ID of the makerDAO vault.
// @param _getID Id for writting in instaMemory.
// @param _setID Id for loading from instaMemory.
function saveFullRefinanceFromMakerDataToMemory(
function saveFullRefinanceDataToMemory(
uint256 _vaultID,
uint256, /*_getId,*/
uint256 /*_setId*/
) external payable {
uint256 fees = _getFees(); // get Fees
uint256 paybackAmount = getMakerVaultDebt(_vaultID);
uint256 collateralToWithdraw = getMakerVaultCollateralBalance(_vaultID);
) public payable virtual {
uint256 wDaiDebtToMove = getMakerVaultDebt(_vaultID);
uint256 wColToWithdrawFromMaker = getMakerVaultCollateralBalance(
_vaultID
);
uint256 gasFeesPaidFromCol = _getGelatoProviderFees();
_setInstaMemoryUints(
paybackAmount,
collateralToWithdraw,
_sub(collateralToWithdraw, fees),
paybackAmount,
fees
wDaiDebtToMove,
wColToWithdrawFromMaker,
_sub(wColToWithdrawFromMaker, gasFeesPaidFromCol), // _wColToDepositInB
gasFeesPaidFromCol
);
}
/// @notice Internal function to store values in InstaMemory
/// @param _makerDebtRepaymentAmount payback maker && flashloan borrow amount
/// @param _makerCollaToWithdraw withdraw maker
/// @param _compoundDepositAmount deposit compound
/// @param _compoundDebtAmount borrow compound
/// @param _fees pay the Gelato Provider (TO DO: unsafe)
function _setInstaMemoryUints(
uint256 _makerDebtRepaymentAmount,
uint256 _makerCollaToWithdraw,
uint256 _compoundDepositAmount,
uint256 _compoundDebtAmount,
uint256 _fees
) internal {
setUint(600, _makerDebtRepaymentAmount); // borrow flashloan
setUint(601, _makerDebtRepaymentAmount); // payback maker
setUint(602, _makerCollaToWithdraw); // withdraw maker
setUint(603, _compoundDepositAmount); // deposit compound
setUint(604, _compoundDebtAmount); // borrow compound
setUint(605, _fees); // pay the provider
}
/// @notice Computes values needed for DebtBridge Maker->ProtocolB
/// @dev Use wad for colRatios.
/// @param _vaultId The id of the makerDAO vault.
@ -371,7 +346,7 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
/// @param _oraclePayload The data for making the staticcall to the oracle's read
/// method e.g. the function selector of MakerOracle's read function.
/// @return wDaiDebtToMove DAI Debt (wad) to: flashBorrow->repay Maker->withdraw from B->flashPayback.
/// @return wCollateralToMove (wad) to: withdraw from Maker and deposit on B.
/// @return wColToWithdrawFromMaker (wad) to: withdraw from Maker and deposit on B.
/// @return gasFeesPaidFromCol Gelato automation-gas-fees paid from user's collateral
// solhint-disable function-max-lines
function computeDebtBridge(
@ -386,7 +361,7 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
virtual
returns (
uint256 wDaiDebtToMove,
uint256 wCollateralToMove,
uint256 wColToWithdrawFromMaker,
uint256 gasFeesPaidFromCol
)
{
@ -408,8 +383,8 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
}
// TO DO: add fee mechanism for non-ETH collateral debt bridge
// uint256 gasFeesPaidFromCol = _mul(GAS_LIMIT, wmul(_getGasPrice(), latestPrice));
gasFeesPaidFromCol = _getFees();
// uint256 gasFeesPaidFromCol = _mul(GAS_COST, wmul(_getGelatoGasPrice(), latestPrice));
gasFeesPaidFromCol = _getGelatoProviderFees();
uint256 wPricedCol = wmul(
_sub(getMakerVaultCollateralBalance(_vaultId), gasFeesPaidFromCol),
@ -418,7 +393,7 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
uint256 wDaiDebtOnMaker = getMakerVaultDebt(_vaultId);
wCollateralToMove = wCalcCollateralToWithdraw(
wColToWithdrawFromMaker = wCalcCollateralToWithdraw(
_wMinColRatioMaker,
_wMinColRatioB,
wColPrice,
@ -499,4 +474,28 @@ contract ConnectGelatoDebtBridgeFromMaker is MakerResolver {
)
);
}
// _gasFeesPaidFromCol == _wColToWithdrawFromMaker - _wColToDepositInB
function _setInstaMemoryUints(
uint256 _wDaiDebtToMove,
uint256 _wColToWithdrawFromMaker,
uint256 _wColToDepositInB,
uint256 _gasFeesPaidFromCol
) internal virtual {
setUint(600, _wDaiDebtToMove); // borrow flashloan
setUint(601, _wDaiDebtToMove); // payback maker
setUint(602, _wColToWithdrawFromMaker); // withdraw maker
setUint(603, _wColToDepositInB); // deposit compound
setUint(604, _wDaiDebtToMove); // borrow compound
setUint(605, _gasFeesPaidFromCol); // pay the provider
}
function _getGelatoProviderFees()
internal
view
virtual
returns (uint256 gasCost)
{
gasCost = _mul(GAS_COST, _getGelatoGasPrice());
}
}

View File

@ -12,8 +12,8 @@
"lint": "eslint --cache . && yarn lint:sol",
"lint:sol": "solhint contracts/**/*.sol",
"lint:fix": "eslint --cache --fix . && solhint --fix contracts/**/*.sol",
"test": "npx hardhat test",
"debug": "DEBUG=true npx hardhat test"
"test": "yarn compile --force && npx hardhat test",
"debug": "DEBUG=true yarn compile --force && npx hardhat test"
},
"devDependencies": {
"@gelatonetwork/core": "1.0.0",
@ -21,13 +21,13 @@
"@nomiclabs/hardhat-waffle": "2.0.0",
"chai": "4.2.0",
"dotenv": "8.2.0",
"eslint": "7.10.0",
"eslint-config-prettier": "6.12.0",
"ethereum-waffle": "3.1.1",
"eslint": "7.12.0",
"eslint-config-prettier": "6.14.0",
"ethereum-waffle": "3.1.2",
"ethers": "5.0.19",
"hardhat": "2.0.0",
"hardhat": "2.0.1",
"husky": ">=4",
"lint-staged": ">=10",
"lint-staged": "10.4.2",
"prettier": "2.1.2",
"prettier-plugin-solidity": "1.0.0-alpha.59",
"solhint": "3.2.2",

View File

@ -139,7 +139,7 @@ describe("Full Debt Bridge refinancing loan from Maker to Compound", function ()
// Bots constatly check whether the submitted task is executable (by calling canExec)
// If the task becomes executable (returns "OK"), the "exec" function will be called
// which will execute the debt refinancing on behalf of the user
it("#2: Use Maker Compound refinancing if the maker vault become unsafe after a market move.", async function () {
it("#3: Use Maker Compound refinancing if the maker vault become unsafe after a market move.", async function () {
// Steps
// Step 1: Market Move against the user (Mock)
// Step 2: Executor execute the user's task

View File

@ -478,7 +478,7 @@ class Helper {
addr: contracts.connectGelatoDebtBridgeFromMaker.address,
data: await hre.run("abi-encode-withselector", {
abi: ConnectGelatoDebtBridgeFromMakerABI,
functionname: "saveFullRefinanceFromMakerDataToMemory",
functionname: "saveFullRefinanceDataToMemory",
inputs: [vaultId, 0, 0],
}),
operation: GelatoCoreLib.Operation.Delegatecall,

View File

@ -541,7 +541,7 @@ describe("Debt Bridge with External Provider", function () {
addr: connectGelatoDebtBridgeFromMaker.address,
data: await hre.run("abi-encode-withselector", {
abi: ConnectGelatoDebtBridgeFromMakerABI,
functionname: "saveDebtBridgeDataToMemory",
functionname: "savePartialRefinanceDataToMemory",
inputs: [
vaultId,
MIN_COL_RATIO_MAKER,

109
yarn.lock
View File

@ -39,10 +39,10 @@
resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89"
integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==
"@eslint/eslintrc@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085"
integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==
"@eslint/eslintrc@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.0.tgz#bc7e3c4304d4c8720968ccaee793087dfb5fe6b4"
integrity sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==
dependencies:
ajv "^6.12.4"
debug "^4.1.1"
@ -55,18 +55,18 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@ethereum-waffle/chai@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.1.1.tgz#2d2594e19613cdee0eaa1a38fc8dac31f66460e6"
integrity sha512-gbpjfIz+XhM9sH8BtBiRmK+eU6WuAWPK5TqIMR7QwzcGQ4XkIoFzACRNc/kxnV5f9Townpgr7yp0yzbzJJCWiw==
"@ethereum-waffle/chai@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.1.2.tgz#f1a15085f6ab67397d1bfe89ec97938309f2d941"
integrity sha512-+rlfrBlWleY2zCjkR3tH9pleKHx10atI4CQ03ZKz4bw0sCU8FtD3Bq7pEt6gMWMpVH7h5hlemBTT++1hED9jyA==
dependencies:
"@ethereum-waffle/provider" "^3.1.1"
"@ethereum-waffle/provider" "^3.1.2"
ethers "^5.0.0"
"@ethereum-waffle/compiler@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.1.1.tgz#df3dba3c5dc556afe04f259e0789c16bc34333f5"
integrity sha512-vneBsbR7VaqZ0cDJRc+pr7aU6ZB8uO2h4ScKsn3GQIXE1GYB4i9eUxvRkdi5t/cS7YufnmUyKQU/IyAjivDcWw==
"@ethereum-waffle/compiler@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.1.2.tgz#4df177bc1c6b369061062514f166183181954abd"
integrity sha512-ko8fc1CYilS6txrNeyNgArRYgw1+cBKzs0nY6ZYPbxN6ywdm0efpcdYHuKPh8L0KeH5w9dIoKNkCLjL+vUEFjA==
dependencies:
"@resolver-engine/imports" "^0.3.3"
"@resolver-engine/imports-fs" "^0.3.3"
@ -77,29 +77,29 @@
node-fetch "^2.6.0"
solc "^0.6.3"
"@ethereum-waffle/ens@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.1.1.tgz#0e0d35ff8e10e871b7dfc81eef60e4345df8f610"
integrity sha512-36O7UBmPnDLoHaMcXBoCiF+lNrgiPs8DdLz8btMK231N68L/Bb1UdhzYhEeE0XsTpCkb+IxRr0Xl3gpI+y63Mg==
"@ethereum-waffle/ens@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.1.2.tgz#ed21ea9c376ec21f3c02649cc158cb60a69d94e9"
integrity sha512-otoTGCClgCbyNQ7YStyTtFkCYo+K9XKslijOcTOGBHEp/tbij76fToXMp6EPUGaNg2mbNrWw9H8x6Glp7UD8iw==
dependencies:
"@ensdomains/ens" "^0.4.4"
"@ensdomains/resolver" "^0.2.4"
ethers "^5.0.1"
"@ethereum-waffle/mock-contract@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.1.1.tgz#ae0fe5bcdb7a0ba64069098394ea4e54a02ed293"
integrity sha512-by4eUeL7FGQzczi4nM94YcnYWV9EPsjx9WI9A66LzLHHPdEyIvAUZyyBQ+9hLYwUqJ78ppLoVx+xYWEagHx/jg==
"@ethereum-waffle/mock-contract@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.1.2.tgz#4dd3c02454b797ad7a8e5d42fbd20eaee75af3cc"
integrity sha512-P3AZGqVWE1ZJ3Gqiko/oPC4CfnNSbHwq2awNsa4HLj2URHeRE5fIQMuAxCT3bCwf4QGdE7yxOVkFHDLu40hNuw==
dependencies:
"@ethersproject/abi" "^5.0.1"
ethers "^5.0.1"
"@ethereum-waffle/provider@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.1.1.tgz#74ac4f64a83f8d975d7e9e09f5b5f1ce8c794d19"
integrity sha512-2gwa7+OKSuJBvKR4Y/ljhvmQd2J31NY0n5ygLrykMrk/HMEGhzBKFu94O+cndnYRhHrB4Rl8sWcFH/0H2Qqx+Q==
"@ethereum-waffle/provider@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.1.2.tgz#8ff1d98b3725c9abbdd1b13d47784eccf57ae1e5"
integrity sha512-RQTt87qmPJOFqF3QP1ASSt/kGUB2WJKfEwFMuAMP9ZQ2icRXtyLXseU4dKNAU0gc/BckqrXk5r1xzirwJp+ANg==
dependencies:
"@ethereum-waffle/ens" "^3.1.1"
"@ethereum-waffle/ens" "^3.1.2"
ethers "^5.0.1"
ganache-core "^2.10.2"
patch-package "^6.2.2"
@ -2843,10 +2843,10 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-prettier@6.12.0:
version "6.12.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz#9eb2bccff727db1c52104f0b49e87ea46605a0d2"
integrity sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw==
eslint-config-prettier@6.14.0:
version "6.14.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz#390e7863a8ae99970981933826476169285b3a27"
integrity sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==
dependencies:
get-stdin "^6.0.0"
@ -2885,13 +2885,18 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
eslint@7.10.0:
version "7.10.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.10.0.tgz#494edb3e4750fb791133ca379e786a8f648c72b9"
integrity sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==
eslint-visitor-keys@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
eslint@7.12.0:
version "7.12.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.0.tgz#7b6a85f87a9adc239e979bb721cde5ce0dc27da6"
integrity sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==
dependencies:
"@babel/code-frame" "^7.0.0"
"@eslint/eslintrc" "^0.1.3"
"@eslint/eslintrc" "^0.2.0"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
@ -2900,7 +2905,7 @@ eslint@7.10.0:
enquirer "^2.3.5"
eslint-scope "^5.1.1"
eslint-utils "^2.1.0"
eslint-visitor-keys "^1.3.0"
eslint-visitor-keys "^2.0.0"
espree "^7.3.0"
esquery "^1.2.0"
esutils "^2.0.2"
@ -3209,15 +3214,15 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3:
secp256k1 "^4.0.1"
setimmediate "^1.0.5"
ethereum-waffle@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.1.1.tgz#2a63475104281dca1fd2ffed12ab8f6605219d51"
integrity sha512-kiJo7PPGKsRfNiQOB8Z/ogLTHrU7Cj7VOZrdU3nyx9xXobkTFN9F9FcwdYZRg3gw3C1XnuOd18Jk2hPfuQbORA==
ethereum-waffle@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.1.2.tgz#54ab4049d256185bb50de4e86328e521ea2ad816"
integrity sha512-q9fI4N2RN+OEIXoWpyj8LWhjaBNtIxKID9RHHIvWe32Jp5nRN8F3Ja+EAaJ5Qh3/eZMPdpauW4N5zBrY2qXQpQ==
dependencies:
"@ethereum-waffle/chai" "^3.1.1"
"@ethereum-waffle/compiler" "^3.1.1"
"@ethereum-waffle/mock-contract" "^3.1.1"
"@ethereum-waffle/provider" "^3.1.1"
"@ethereum-waffle/chai" "^3.1.2"
"@ethereum-waffle/compiler" "^3.1.2"
"@ethereum-waffle/mock-contract" "^3.1.2"
"@ethereum-waffle/provider" "^3.1.2"
ethers "^5.0.1"
ethereumjs-abi@0.6.5:
@ -4156,10 +4161,10 @@ har-validator@~5.1.3:
ajv "^6.12.3"
har-schema "^2.0.0"
hardhat@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.0.0.tgz#d2d5fcbcdbb9b6ec13e7c8e93706ddf0e5ac2a70"
integrity sha512-kwl4fTn5jU4n3rlT1PucKETZ6qWzZiGgcUAqoqLc2ZADbcm1N9KUCbKzleidvgn+gTYcvVkhPTskkU2Yop6Lag==
hardhat@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.0.1.tgz#2e7d1815654406199b88b31da9c2d2763e8f5577"
integrity sha512-9g67OkehLgHLgfqqbdR+FANshTUvFM3yuJr06ZScNErsvrdiLHpQ/Jbkd6rRiXjYovN/SMu4YZrhNEm62b7boA==
dependencies:
"@nomiclabs/ethereumjs-vm" "^4.1.1"
"@sentry/node" "^5.18.1"
@ -5206,10 +5211,10 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
lint-staged@>=10:
version "10.4.0"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.0.tgz#d18628f737328e0bbbf87d183f4020930e9a984e"
integrity sha512-uaiX4U5yERUSiIEQc329vhCTDDwUcSvKdRLsNomkYLRzijk3v8V9GWm2Nz0RMVB87VcuzLvtgy6OsjoH++QHIg==
lint-staged@10.4.2:
version "10.4.2"
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.2.tgz#9fee4635c4b5ddb845746f237c6d43494ccd21c1"
integrity sha512-OLCA9K1hS+Sl179SO6kX0JtnsaKj/MZalEhUj5yAgXsb63qPI/Gfn6Ua1KuZdbfkZNEu3/n5C/obYCu70IMt9g==
dependencies:
chalk "^4.1.0"
cli-truncate "^2.1.0"