diff --git a/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol b/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol index da23c1e..475e5fa 100644 --- a/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol +++ b/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol @@ -143,8 +143,8 @@ contract ConnectGelatoDataForFullRefinance is ConnectorInterface { _targets[2] = CONNECT_MAKER; // open ETH-B vault _targets[3] = CONNECT_MAKER; // deposit _targets[4] = CONNECT_MAKER; // borrow - _targets[5] = _connectGelatoProviderPayment; - _targets[6] = targets[0]; + _targets[5] = _connectGelatoProviderPayment; // payProvider + _targets[6] = INSTA_POOL_V2; // flashPayback bytes[] memory _datas = new bytes[](7); _datas[0] = _encodePaybackMakerVault(_vaultId, uint256(-1), 0, 0); @@ -188,8 +188,8 @@ contract ConnectGelatoDataForFullRefinance is ConnectorInterface { _targets[1] = CONNECT_MAKER; // withdraw _targets[2] = CONNECT_COMPOUND; // deposit _targets[3] = CONNECT_COMPOUND; // borrow - _targets[4] = _connectGelatoProviderPayment; - _targets[5] = INSTA_POOL_V2; + _targets[4] = _connectGelatoProviderPayment; // payProvider + _targets[5] = INSTA_POOL_V2; // flashPayback bytes[] memory _datas = new bytes[](6); _datas[0] = _encodePaybackMakerVault(_vaultId, uint256(-1), 0, 0); diff --git a/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol b/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol index 6a274df..a42ed40 100644 --- a/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol +++ b/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol @@ -161,8 +161,8 @@ contract ConnectGelatoDataForPartialRefinance is ConnectorInterface { _targets[2] = CONNECT_MAKER; // open ETH-B vault _targets[3] = CONNECT_MAKER; // deposit _targets[4] = CONNECT_MAKER; // borrow - _targets[5] = _connectGelatoProviderPayment; - _targets[6] = INSTA_POOL_V2; + _targets[5] = _connectGelatoProviderPayment; // payProvider + _targets[6] = INSTA_POOL_V2; // flashPayback bytes[] memory _datas = new bytes[](7); _datas[0] = _encodePaybackMakerVault( @@ -226,8 +226,8 @@ contract ConnectGelatoDataForPartialRefinance is ConnectorInterface { _targets[1] = CONNECT_MAKER; // withdraw _targets[2] = CONNECT_COMPOUND; // deposit _targets[3] = CONNECT_COMPOUND; // borrow - _targets[4] = _connectGelatoProviderPayment; - _targets[5] = INSTA_POOL_V2; + _targets[4] = _connectGelatoProviderPayment; // payProvider + _targets[5] = INSTA_POOL_V2; // flashPayback bytes[] memory _datas = new bytes[](6); _datas[0] = _encodePaybackMakerVault( diff --git a/contracts/mocks/FGelatoDebtBridgeMock.sol b/contracts/contracts/mocks/FGelatoDebtBridgeMock.sol similarity index 94% rename from contracts/mocks/FGelatoDebtBridgeMock.sol rename to contracts/contracts/mocks/FGelatoDebtBridgeMock.sol index 47bbfc9..739cd44 100644 --- a/contracts/mocks/FGelatoDebtBridgeMock.sol +++ b/contracts/contracts/mocks/FGelatoDebtBridgeMock.sol @@ -4,7 +4,7 @@ pragma solidity 0.7.4; import { _wCalcCollateralToWithdraw, _wCalcDebtToRepay -} from "../functions/gelato/FGelatoDebtBridge.sol"; +} from "../../functions/gelato/FGelatoDebtBridge.sol"; contract FGelatoDebtBridgeMock { function wCalcCollateralToWithdraw( diff --git a/deploy/connectors/ConnectGelatoDataForFullRefinance.deploy.js b/deploy/connectors/ConnectGelatoDataForFullRefinance.deploy.js new file mode 100644 index 0000000..bdfdd3b --- /dev/null +++ b/deploy/connectors/ConnectGelatoDataForFullRefinance.deploy.js @@ -0,0 +1,38 @@ +const {sleep} = require("@gelatonetwork/core"); + +const InstaConnector = require("../../pre-compiles/InstaConnectors.json"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying ConnectGelatoDataForFullRefinance to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + const instaConnectors = await hre.ethers.getContractAt( + InstaConnector.abi, + hre.network.config.InstaConnectors + ); + const connectorLength = await instaConnectors.connectorLength(); + const connectorId = connectorLength.add(1); + + // the following will only deploy "ConnectGelatoDataForFullRefinance" + // if the contract was never deployed or if the code changed since last deployment + await deploy("ConnectGelatoDataForFullRefinance", { + from: deployer, + args: [ + connectorId, + (await deployments.get("ConnectGelatoProviderPayment")).address, + ], + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.dependencies = ["ConnectGelatoProviderPayment"]; +module.exports.tags = ["ConnectGelatoDataForFullRefinance"]; diff --git a/deploy/connectors/ConnectGelatoDataForPartialRefinance.deploy.js b/deploy/connectors/ConnectGelatoDataForPartialRefinance.deploy.js new file mode 100644 index 0000000..93c036e --- /dev/null +++ b/deploy/connectors/ConnectGelatoDataForPartialRefinance.deploy.js @@ -0,0 +1,41 @@ +const {sleep} = require("@gelatonetwork/core"); + +const InstaConnector = require("../../pre-compiles/InstaConnectors.json"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying ConnectGelatoDataForPartialRefinance to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + const instaConnectors = await hre.ethers.getContractAt( + InstaConnector.abi, + hre.network.config.InstaConnectors + ); + const connectorLength = await instaConnectors.connectorLength(); + const connectorId = connectorLength.add(1); + + // the following will only deploy "ConnectGelatoDataForPartialRefinance" + // if the contract was never deployed or if the code changed since last deployment + await deploy("ConnectGelatoDataForPartialRefinance", { + from: deployer, + args: [ + connectorId, + (await deployments.get("ConnectGelatoProviderPayment")).address, + ], + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.skip = async (hre) => { + return hre.network.name === "mainnet" ? true : false; +}; +module.exports.tags = ["ConnectGelatoDataForPartialRefinance"]; +module.exports.dependencies = ["ConnectGelatoProviderPayment"]; diff --git a/deploy/connectors/ConnectGelatoProviderPayment.deploy.js b/deploy/connectors/ConnectGelatoProviderPayment.deploy.js new file mode 100644 index 0000000..468ee00 --- /dev/null +++ b/deploy/connectors/ConnectGelatoProviderPayment.deploy.js @@ -0,0 +1,33 @@ +const {sleep} = require("@gelatonetwork/core"); + +const InstaConnector = require("../../pre-compiles/InstaConnectors.json"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying ConnectGelatoProviderPayment to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + const {deployments} = hre; + const {deploy} = deployments; + const {deployer, gelatoProvider} = await hre.getNamedAccounts(); + + const instaConnectors = await hre.ethers.getContractAt( + InstaConnector.abi, + hre.network.config.InstaConnectors + ); + const connectorLength = await instaConnectors.connectorLength(); + const connectorId = connectorLength.add(1); + + // the following will only deploy "ConnectGelatoProviderPayment" + // if the contract was never deployed or if the code changed since last deployment + await deploy("ConnectGelatoProviderPayment", { + from: deployer, + args: [connectorId, gelatoProvider], + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.tags = ["ConnectGelatoProviderPayment"]; diff --git a/deploy/gelato/conditions/ConditionCompareUintsFromTwoSources.deploy.js b/deploy/gelato/conditions/ConditionCompareUintsFromTwoSources.deploy.js new file mode 100644 index 0000000..7b82c88 --- /dev/null +++ b/deploy/gelato/conditions/ConditionCompareUintsFromTwoSources.deploy.js @@ -0,0 +1,24 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying ConditionCompareUintsFromTwoSources to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + // the following will only deploy "ConditionCompareUintsFromTwoSources" + // if the contract was never deployed or if the code changed since last deployment + await deploy("ConditionCompareUintsFromTwoSources", { + from: deployer, + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.tags = ["ConditionCompareUintsFromTwoSources"]; diff --git a/deploy/gelato/conditions/ConditionMakerVaultUnsafe.deploy.js b/deploy/gelato/conditions/ConditionMakerVaultUnsafe.deploy.js new file mode 100644 index 0000000..0d3db29 --- /dev/null +++ b/deploy/gelato/conditions/ConditionMakerVaultUnsafe.deploy.js @@ -0,0 +1,24 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying ConditionMakerVaultUnsafe to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + // the following will only deploy "ConditionMakerVaultUnsafe" + // if the contract was never deployed or if the code changed since last deployment + await deploy("ConditionMakerVaultUnsafe", { + from: deployer, + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.tags = ["ConditionMakerVaultUnsafe"]; diff --git a/deploy/mocks/FGelatoDebtBridgeMock.js b/deploy/mocks/FGelatoDebtBridgeMock.js new file mode 100644 index 0000000..93a52b5 --- /dev/null +++ b/deploy/mocks/FGelatoDebtBridgeMock.js @@ -0,0 +1,27 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying FGelatoDebtBridgeMock to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + // the following will only deploy "FGelatoDebtBridgeMock" + // if the contract was never deployed or if the code changed since last deployment + await deploy("FGelatoDebtBridgeMock", { + from: deployer, + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.skip = async (hre) => { + return hre.network.name === "mainnet" ? true : false; +}; +module.exports.tags = ["FGelatoDebtBridgeMock"]; diff --git a/deploy/mocks/MockCDAI.deploy.js b/deploy/mocks/MockCDAI.deploy.js new file mode 100644 index 0000000..552ddb8 --- /dev/null +++ b/deploy/mocks/MockCDAI.deploy.js @@ -0,0 +1,28 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log("Deploying MockCDAI to mainnet. Hit ctrl + c to abort"); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + const APY_2_PERCENT_IN_SECONDS = "1000000000627937192491029810"; + + // the following will only deploy "MockCDAI" + // if the contract was never deployed or if the code changed since last deployment + await deploy("MockCDAI", { + from: deployer, + args: [APY_2_PERCENT_IN_SECONDS], + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.skip = async (hre) => { + return hre.network.name === "mainnet" ? true : false; +}; +module.exports.tags = ["MockCDAI"]; diff --git a/deploy/mocks/MockDSR.deploy.js b/deploy/mocks/MockDSR.deploy.js new file mode 100644 index 0000000..2187d39 --- /dev/null +++ b/deploy/mocks/MockDSR.deploy.js @@ -0,0 +1,28 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log("Deploying MockDSR to mainnet. Hit ctrl + c to abort"); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + const APY_2_PERCENT_IN_SECONDS = "1000000000627937192491029810"; + + // the following will only deploy "MockDSR" + // if the contract was never deployed or if the code changed since last deployment + await deploy("MockDSR", { + from: deployer, + args: [APY_2_PERCENT_IN_SECONDS], + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.skip = async (hre) => { + return hre.network.name === "mainnet" ? true : false; +}; +module.exports.tags = ["MockDSR"]; diff --git a/deploy/resolvers/MakerResolver.deploy.js b/deploy/resolvers/MakerResolver.deploy.js new file mode 100644 index 0000000..097ff9a --- /dev/null +++ b/deploy/resolvers/MakerResolver.deploy.js @@ -0,0 +1,22 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log("Deploying MakerResolver to mainnet. Hit ctrl + c to abort"); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + // the following will only deploy "MakerResolver" + // if the contract was never deployed or if the code changed since last deployment + await deploy("MakerResolver", { + from: deployer, + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.tags = ["MakerResolver"]; diff --git a/deploy/resolvers/PriceOracleResolver.deploy.js b/deploy/resolvers/PriceOracleResolver.deploy.js new file mode 100644 index 0000000..8cc18e7 --- /dev/null +++ b/deploy/resolvers/PriceOracleResolver.deploy.js @@ -0,0 +1,24 @@ +const {sleep} = require("@gelatonetwork/core"); + +module.exports = async (hre) => { + if (hre.network.name === "mainnet") { + console.log( + "Deploying PriceOracleResolver to mainnet. Hit ctrl + c to abort" + ); + await sleep(10000); + } + + const {deployments} = hre; + const {deploy} = deployments; + const {deployer} = await hre.getNamedAccounts(); + + // the following will only deploy "PriceOracleResolver" + // if the contract was never deployed or if the code changed since last deployment + await deploy("PriceOracleResolver", { + from: deployer, + gasPrice: hre.network.config.gasPrice, + log: hre.network.name === "mainnet" ? true : false, + }); +}; + +module.exports.tags = ["PriceOracleResolver"]; diff --git a/hardhat.config.js b/hardhat.config.js index 04fba57..87647cd 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -2,6 +2,7 @@ const {task, types} = require("hardhat/config"); require("@nomiclabs/hardhat-ethers"); require("@nomiclabs/hardhat-waffle"); +require("hardhat-deploy"); // Libraries const assert = require("assert"); @@ -15,11 +16,29 @@ require("dotenv").config(); // assert.ok(INFURA_ID, "no Infura ID in process.env"); const ALCHEMY_ID = process.env.ALCHEMY_ID; assert.ok(ALCHEMY_ID, "no Alchemy ID in process.env"); + +const DEPLOYER = "0xe1F076849B781b1395Fd332dC1758Dbc129be6EC"; // Gelato-Luis +const DEPLOYER_PK_MAINNET = process.env.DEPLOYER_PK_MAINNET; + const INSTA_MASTER = "0xb1DC62EC38E6E3857a887210C38418E4A17Da5B2"; // ================================= CONFIG ========================================= module.exports = { defaultNetwork: "hardhat", + // hardhat-deploy + namedAccounts: { + deployer: { + default: 0, + mainnet: DEPLOYER, + }, + gelatoProvider: { + default: 1, + mainnet: DEPLOYER, + }, + gelatoExecutor: { + default: 2, + }, + }, networks: { hardhat: { // Standard config @@ -53,6 +72,11 @@ module.exports = { GetCdps: "0x36a724Bd100c39f0Ea4D3A20F7097eE01A8Ff573", ProviderModuleDsa: "0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2", }, + mainnet: { + accounts: DEPLOYER_PK_MAINNET ? [DEPLOYER_PK_MAINNET] : [], + chainId: 1, + url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, + }, }, solidity: { version: "0.7.4", diff --git a/package.json b/package.json index e196abf..4250775 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "ethereum-waffle": "3.2.0", "ethers": "5.0.19", "hardhat": "2.0.2", + "hardhat-deploy": "0.7.0-beta.28", "husky": ">=4", "lint-staged": "10.5.1", "prettier": "2.1.2", diff --git a/yarn.lock b/yarn.lock index 6f3e875..f642763 100644 --- a/yarn.lock +++ b/yarn.lock @@ -120,7 +120,7 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" -"@ethersproject/abi@5.0.7", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.5": +"@ethersproject/abi@5.0.7", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.2", "@ethersproject/abi@^5.0.5": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== @@ -159,7 +159,7 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" -"@ethersproject/abstract-signer@5.0.7", "@ethersproject/abstract-signer@^5.0.6": +"@ethersproject/abstract-signer@5.0.7", "@ethersproject/abstract-signer@^5.0.2", "@ethersproject/abstract-signer@^5.0.6": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.7.tgz#cdbd3bd479edf77c71b7f6a6156b0275b1176ded" integrity sha512-8W8gy/QutEL60EoMEpvxZ8MFAEWs/JvH5nmZ6xeLXoZvmBCasGmxqHdYjo2cxg0nevkPkq9SeenSsBBZSCx+SQ== @@ -170,7 +170,7 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" -"@ethersproject/address@5.0.5", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": +"@ethersproject/address@5.0.5", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.5.tgz#2caa65f6b7125015395b1b54c985ee0b27059cc7" integrity sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA== @@ -197,7 +197,7 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/properties" "^5.0.3" -"@ethersproject/bignumber@5.0.8", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.0.8": +"@ethersproject/bignumber@5.0.8", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.5", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.8.tgz#cee33bd8eb0266176def0d371b45274b1d2c4ec0" integrity sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA== @@ -206,7 +206,7 @@ "@ethersproject/logger" "^5.0.5" bn.js "^4.4.0" -"@ethersproject/bytes@5.0.5", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4": +"@ethersproject/bytes@5.0.5", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.2", "@ethersproject/bytes@^5.0.4": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c" integrity sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ== @@ -220,7 +220,7 @@ dependencies: "@ethersproject/bignumber" "^5.0.7" -"@ethersproject/contracts@5.0.5": +"@ethersproject/contracts@5.0.5", "@ethersproject/contracts@^5.0.2": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.5.tgz#64831a341ec8ca225e83ff3e9437c26b970fd5d7" integrity sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw== @@ -356,7 +356,7 @@ bech32 "1.1.4" ws "7.2.3" -"@ethersproject/providers@5.0.14": +"@ethersproject/providers@5.0.14", "@ethersproject/providers@^5.0.5": version "5.0.14" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.14.tgz#751ccb14b4a8c8e9e4be171818c23f4601be90ba" integrity sha512-K9QRRkkHWyprm3g4L8U9aPx5uyivznL4RYemkN2shCQumyGqFJ5SO+OtQrgebVm0JpGwFAUGugnhRUh49sjErw== @@ -416,7 +416,7 @@ "@ethersproject/properties" "^5.0.3" elliptic "6.5.3" -"@ethersproject/solidity@5.0.5": +"@ethersproject/solidity@5.0.5", "@ethersproject/solidity@^5.0.2": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.5.tgz#97a7d8a67f2d944f208c948fed0d565512bcc2be" integrity sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg== @@ -436,7 +436,7 @@ "@ethersproject/constants" "^5.0.4" "@ethersproject/logger" "^5.0.5" -"@ethersproject/transactions@5.0.6", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.5": +"@ethersproject/transactions@5.0.6", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.2", "@ethersproject/transactions@^5.0.5": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c" integrity sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA== @@ -481,7 +481,7 @@ "@ethersproject/transactions" "^5.0.5" "@ethersproject/wordlists" "^5.0.4" -"@ethersproject/wallet@5.0.7": +"@ethersproject/wallet@5.0.7", "@ethersproject/wallet@^5.0.2": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.7.tgz#9d4540f97d534e3d61548ace30f15857209b3f02" integrity sha512-n2GX1+2Tc0qV8dguUcLkjNugINKvZY7u/5fEsn0skW9rz5+jHTR5IKMV6jSfXA+WjQT8UCNMvkI3CNcdhaPbTQ== @@ -744,6 +744,11 @@ dependencies: "@types/node" "*" +"@types/qs@^6.9.4": + version "6.9.5" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" + integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== + "@types/secp256k1@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" @@ -1086,6 +1091,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -1101,6 +1111,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2478,6 +2495,13 @@ debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.2.0: dependencies: ms "2.1.2" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2702,6 +2726,11 @@ emoji-regex@^9.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.1.1.tgz#1d5ffce26d8191e6c3f3a9d27987b1c5bba7d20a" integrity sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA== +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3831,6 +3860,20 @@ flow-stoplight@^1.0.0: resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= + dependencies: + imul "^1.0.0" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.12.1: version "1.13.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" @@ -3927,6 +3970,16 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4138,7 +4191,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -4161,6 +4214,31 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hardhat-deploy@0.7.0-beta.28: + version "0.7.0-beta.28" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.0-beta.28.tgz#e71dc7d7a97903773c717818e8ecb7eef8f97a5c" + integrity sha512-oWAVa636zyOXecvLkZ/hpph1PvqwoK0DnqjA21En4amfTjLx5Do6XlrGcNJAKrH9LRTnfg2dc7zmTauBqFM5+g== + dependencies: + "@ethersproject/abi" "^5.0.2" + "@ethersproject/abstract-signer" "^5.0.2" + "@ethersproject/address" "^5.0.2" + "@ethersproject/bignumber" "^5.0.5" + "@ethersproject/bytes" "^5.0.2" + "@ethersproject/contracts" "^5.0.2" + "@ethersproject/providers" "^5.0.5" + "@ethersproject/solidity" "^5.0.2" + "@ethersproject/transactions" "^5.0.2" + "@ethersproject/wallet" "^5.0.2" + "@types/qs" "^6.9.4" + axios "^0.19.2" + chalk "^4.1.0" + chokidar "^3.4.0" + debug "^4.1.1" + fs-extra "^9.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + hardhat@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.0.2.tgz#30c3c5a49f950aad2e39c479208b4132052dc735" @@ -4472,6 +4550,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4975,6 +5058,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5387,6 +5479,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5700,6 +5797,15 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6481,7 +6587,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.7.0: +qs@^6.7.0, qs@^6.9.4: version "6.9.4" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== @@ -7823,6 +7929,16 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unorm@^1.3.3: version "1.6.0" resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af"