From 155a8d6e0eb6eb1d58ef0da3b20c789321d53558 Mon Sep 17 00:00:00 2001
From: Mubaris NK <mubaris@instadapp.io>
Date: Mon, 15 Mar 2021 17:56:22 +0530
Subject: [PATCH] Add deployment script

---
 .env.example                            |    3 +-
 contracts/connectors/1inch/main.sol     |    2 +-
 contracts/connectors/COMP/main.sol      |    2 +-
 contracts/connectors/aave/v1/main.sol   |    2 +-
 contracts/connectors/aave/v2/main.sol   |    2 +-
 contracts/connectors/authority/main.sol |    2 +-
 contracts/connectors/basic/main.sol     |    2 +-
 contracts/connectors/chi/main.sol       |    2 +-
 contracts/connectors/compound/main.sol  |    2 +-
 contracts/connectors/dydx/main.sol      |    2 +-
 contracts/connectors/dydxFlash/main.sol |    2 +-
 contracts/connectors/fee/main.sol       |    2 +-
 contracts/connectors/gelato/main.sol    |    2 +-
 contracts/connectors/instapool/main.sol |    2 +-
 contracts/connectors/kyber/main.sol     |    4 +
 contracts/connectors/makerdao/main.sol  |    2 +-
 contracts/connectors/oasis/main.sol     |    2 +-
 contracts/connectors/uniswap/main.sol   |    2 +-
 hardhat.config.js                       |   13 +-
 package-lock.json                       | 1417 ++++++++++++++++++++---
 package.json                            |    2 +
 scripts/deploy.js                       |   47 +
 scripts/deployConnector.js              |   24 +
 scripts/deploySingle.js                 |   23 +
 24 files changed, 1382 insertions(+), 183 deletions(-)
 create mode 100644 scripts/deploy.js
 create mode 100644 scripts/deployConnector.js
 create mode 100644 scripts/deploySingle.js

diff --git a/.env.example b/.env.example
index b00eaa9a..2525a67a 100644
--- a/.env.example
+++ b/.env.example
@@ -1,4 +1,5 @@
 ETHERSCAN_API_KEY=""
 PRIVATE_KEY=""
 TENDERLY_PROJECT=""
-TENDERLY_USERNAME=""
\ No newline at end of file
+TENDERLY_USERNAME=""
+ALCHEMY_ID=""
\ No newline at end of file
diff --git a/contracts/connectors/1inch/main.sol b/contracts/connectors/1inch/main.sol
index 3a67efc4..cb83c94a 100644
--- a/contracts/connectors/1inch/main.sol
+++ b/contracts/connectors/1inch/main.sol
@@ -377,6 +377,6 @@ abstract contract OneInch is OneProto {
     }
 }
 
-contract ConnectOne is OneInch {
+contract ConnectV2OneInch is OneInch {
     string public name = "1inch-1proto-v1";
 }
diff --git a/contracts/connectors/COMP/main.sol b/contracts/connectors/COMP/main.sol
index 45cc23fc..0df77c69 100644
--- a/contracts/connectors/COMP/main.sol
+++ b/contracts/connectors/COMP/main.sol
@@ -86,6 +86,6 @@ abstract contract CompResolver is Events, Helpers {
     }
 }
 
-contract ConnectCOMP is CompResolver {
+contract ConnectV2COMP is CompResolver {
     string public name = "COMP-v1";
 }
diff --git a/contracts/connectors/aave/v1/main.sol b/contracts/connectors/aave/v1/main.sol
index b80f6d84..76b83564 100644
--- a/contracts/connectors/aave/v1/main.sol
+++ b/contracts/connectors/aave/v1/main.sol
@@ -154,6 +154,6 @@ abstract contract AaveResolver is Events, Helpers {
     }
 }
 
-contract ConnectAave is AaveResolver {
+contract ConnectV2AaveV1 is AaveResolver {
     string public name = "Aave-v1.1";
 }
diff --git a/contracts/connectors/aave/v2/main.sol b/contracts/connectors/aave/v2/main.sol
index cbf717ee..16cc0dcd 100644
--- a/contracts/connectors/aave/v2/main.sol
+++ b/contracts/connectors/aave/v2/main.sol
@@ -178,6 +178,6 @@ abstract contract AaveResolver is Events, Helpers {
     }
 }
 
-contract ConnectAave is AaveResolver {
+contract ConnectV2AaveV2 is AaveResolver {
     string public name = "AaveV2-v1.1";
 }
diff --git a/contracts/connectors/authority/main.sol b/contracts/connectors/authority/main.sol
index 0fd8417b..683cf454 100644
--- a/contracts/connectors/authority/main.sol
+++ b/contracts/connectors/authority/main.sol
@@ -33,6 +33,6 @@ abstract contract AuthorityResolver is Events, Helpers {
     }
 }
 
-contract ConnectAuth is AuthorityResolver {
+contract ConnectV2Auth is AuthorityResolver {
     string public constant name = "Auth-v1";
 }
diff --git a/contracts/connectors/basic/main.sol b/contracts/connectors/basic/main.sol
index 77c50bcd..4d59beac 100644
--- a/contracts/connectors/basic/main.sol
+++ b/contracts/connectors/basic/main.sol
@@ -69,6 +69,6 @@ abstract contract BasicResolver is Events, DSMath, Basic {
     }
 }
 
-contract ConnectBasic is BasicResolver {
+contract ConnectV2Basic is BasicResolver {
     string public constant name = "Basic-v1.1";
 }
diff --git a/contracts/connectors/chi/main.sol b/contracts/connectors/chi/main.sol
index 4a398edd..155dfbff 100644
--- a/contracts/connectors/chi/main.sol
+++ b/contracts/connectors/chi/main.sol
@@ -24,6 +24,6 @@ abstract contract ChiResolver is Events, Helpers {
         chi.free(_amt);
     }
 }
-contract ConnectCHI is ChiResolver {
+contract ConnectV2CHI is ChiResolver {
     string public name = "CHI-v1";
 }
diff --git a/contracts/connectors/compound/main.sol b/contracts/connectors/compound/main.sol
index e3db45be..2a60c3b7 100644
--- a/contracts/connectors/compound/main.sol
+++ b/contracts/connectors/compound/main.sol
@@ -245,6 +245,6 @@ abstract contract CompoundResolver is Events, Helpers {
     }
 }
 
-contract ConnectCompound is CompoundResolver {
+contract ConnectV2Compound is CompoundResolver {
     string public name = "Compound-v1.3";
 }
diff --git a/contracts/connectors/dydx/main.sol b/contracts/connectors/dydx/main.sol
index 99345a84..5cfa9aeb 100644
--- a/contracts/connectors/dydx/main.sol
+++ b/contracts/connectors/dydx/main.sol
@@ -155,6 +155,6 @@ abstract contract DyDxResolver is Events, Helpers {
 
 }
 
-contract ConnectDydx is DyDxResolver {
+contract ConnectV2Dydx is DyDxResolver {
     string public name = "Dydx-v1";
 }
diff --git a/contracts/connectors/dydxFlash/main.sol b/contracts/connectors/dydxFlash/main.sol
index f93f9ed3..40c6df53 100644
--- a/contracts/connectors/dydxFlash/main.sol
+++ b/contracts/connectors/dydxFlash/main.sol
@@ -33,6 +33,6 @@ abstract contract FlashLoanResolver is DSMath, Basic, Events {
     }
 }
 
-contract ConnectDydxFlashLoan is FlashLoanResolver {
+contract ConnectV2DydxFlashLoan is FlashLoanResolver {
     string public constant name = "dydx-flashloan-v1";
 }
diff --git a/contracts/connectors/fee/main.sol b/contracts/connectors/fee/main.sol
index e65eb52d..b09c2684 100644
--- a/contracts/connectors/fee/main.sol
+++ b/contracts/connectors/fee/main.sol
@@ -25,6 +25,6 @@ abstract contract FeeResolver is DSMath, Basic {
     }
 }
 
-contract ConnectFee is FeeResolver {
+contract ConnectV2Fee is FeeResolver {
     string public constant name = "Fee-v1";
 }
diff --git a/contracts/connectors/gelato/main.sol b/contracts/connectors/gelato/main.sol
index b761d937..3ed7c4f0 100644
--- a/contracts/connectors/gelato/main.sol
+++ b/contracts/connectors/gelato/main.sol
@@ -162,6 +162,6 @@ abstract contract GelatoResolver is DSMath, Basic, Events {
 
 }
 
-contract ConnectGelato is GelatoResolver {
+contract ConnectV2Gelato is GelatoResolver {
     string public name = "Gelato-v1.0";
 }
diff --git a/contracts/connectors/instapool/main.sol b/contracts/connectors/instapool/main.sol
index 4d8e459e..2b4d921e 100644
--- a/contracts/connectors/instapool/main.sol
+++ b/contracts/connectors/instapool/main.sol
@@ -272,6 +272,6 @@ contract LiquidityAccessMulti is LiquidityAccess {
     // }
 }
 
-contract ConnectInstaPool is LiquidityAccessMulti {
+contract ConnectV2InstaPool is LiquidityAccessMulti {
     string public name = "InstaPool-v2.1";
 }
diff --git a/contracts/connectors/kyber/main.sol b/contracts/connectors/kyber/main.sol
index b9662804..0d6b5b88 100644
--- a/contracts/connectors/kyber/main.sol
+++ b/contracts/connectors/kyber/main.sol
@@ -49,4 +49,8 @@ abstract contract KyberResolver is Helpers, Events {
         _eventName = "LogSell(address,address,uint256,uint256,uint256,uint256)";
         _eventParam = abi.encode(buyAddr, sellAddr, _buyAmt, _sellAmt, getId, setId);
     }
+}
+
+contract ConnectV2Kyber is KyberResolver {
+    string public name = "Kyber-v2.1";
 }
\ No newline at end of file
diff --git a/contracts/connectors/makerdao/main.sol b/contracts/connectors/makerdao/main.sol
index f457d02d..5f88c6be 100644
--- a/contracts/connectors/makerdao/main.sol
+++ b/contracts/connectors/makerdao/main.sol
@@ -483,6 +483,6 @@ abstract contract MakerResolver is Helpers, Events {
     }
 }
 
-contract ConnectMaker is MakerResolver {
+contract ConnectV2Maker is MakerResolver {
     string public constant name = "MakerDao-v1.4";
 }
diff --git a/contracts/connectors/oasis/main.sol b/contracts/connectors/oasis/main.sol
index 26b3f9f4..cd2905ce 100644
--- a/contracts/connectors/oasis/main.sol
+++ b/contracts/connectors/oasis/main.sol
@@ -117,6 +117,6 @@ contract OasisResolver is DSMath, Basic, Events {
     }
 }
 
-contract ConnectOasis is OasisResolver {
+contract ConnectV2Oasis is OasisResolver {
     string public name = "Oasis-v1.1";
 }
diff --git a/contracts/connectors/uniswap/main.sol b/contracts/connectors/uniswap/main.sol
index 880a2d6b..af20129d 100644
--- a/contracts/connectors/uniswap/main.sol
+++ b/contracts/connectors/uniswap/main.sol
@@ -178,6 +178,6 @@ abstract contract UniswapResolver is Helpers, Events {
     }
 }
 
-contract ConnectUniswapV2 is UniswapResolver {
+contract ConnectV2UniswapV2 is UniswapResolver {
     string public name = "UniswapV2-v1";
 }
diff --git a/hardhat.config.js b/hardhat.config.js
index 09ac4d3c..8ebf1333 100644
--- a/hardhat.config.js
+++ b/hardhat.config.js
@@ -1,7 +1,11 @@
+require("@nomiclabs/hardhat-ethers");
 require("@tenderly/hardhat-tenderly");
 require("@nomiclabs/hardhat-etherscan");
 require('dotenv').config();
 
+const PRIVATE_KEY = process.env.PRIVATE_KEY;
+const ALCHEMY_ID = process.env.ALCHEMY_ID;
+
 /**
  * @type import('hardhat/config').HardhatUserConfig
  */
@@ -27,17 +31,22 @@ module.exports = {
       url: process.env.ETH_NODE_URL,
       chainId: 1,
       timeout: 500000,
+      accounts: [`0x${PRIVATE_KEY}`]
+    },
+    kovan: {
+      url: `https://eth-kovan.alchemyapi.io/v2/${ALCHEMY_ID}`,
+      accounts: [`0x${PRIVATE_KEY}`]
     },
     tenderlyMainnet: {
       url: 'https://mainnet.tenderly.co',
-      accounts: [process.env.PRIVATE_KEY],
+      accounts: [`0x${PRIVATE_KEY}`],
       chainId: 1,
       gasPrice: 25120000000,
       timeout: 500000
     },
     tenderlyKovan: {
       url: 'https://kovan.tenderly.co',
-      accounts: [process.env.PRIVATE_KEY],
+      accounts: [`0x${PRIVATE_KEY}`],
       chainId: 42,
       gasPrice: 40000000000,
       timeout: 50000
diff --git a/package-lock.json b/package-lock.json
index 1428592a..2209d220 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,10 +26,12 @@
         "@nomiclabs/buidler": "^1.3.8",
         "@nomiclabs/buidler-truffle5": "^1.3.4",
         "@nomiclabs/buidler-web3": "^1.3.4",
+        "@nomiclabs/hardhat-ethers": "^2.0.2",
         "@nomiclabs/hardhat-etherscan": "^2.1.1",
         "@openzeppelin/test-helpers": "^0.5.6",
         "@studydefi/money-legos": "^2.3.7",
         "@tenderly/hardhat-tenderly": "^1.0.6",
+        "ethers": "^5.0.32",
         "ganache-cli": "^6.10.0-beta.2",
         "hardhat": "^2.0.8",
         "sol-merger": "^2.0.1",
@@ -56,10 +58,20 @@
       }
     },
     "node_modules/@ethersproject/abstract-provider": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz",
-      "integrity": "sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz",
+      "integrity": "sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bignumber": "^5.0.13",
         "@ethersproject/bytes": "^5.0.9",
@@ -71,10 +83,20 @@
       }
     },
     "node_modules/@ethersproject/abstract-signer": {
-      "version": "5.0.11",
-      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.11.tgz",
-      "integrity": "sha512-RKOgPSEYafknA62SrD3OCK42AllHE4YBfKYXyQeM+sBP7Nq3X5FpzeoY4uzC43P4wIhmNoTHCKQuwnX7fBqb6Q==",
+      "version": "5.0.14",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz",
+      "integrity": "sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/abstract-provider": "^5.0.8",
         "@ethersproject/bignumber": "^5.0.13",
@@ -84,10 +106,20 @@
       }
     },
     "node_modules/@ethersproject/address": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.9.tgz",
-      "integrity": "sha512-gKkmbZDMyGbVjr8nA5P0md1GgESqSGH7ILIrDidPdNXBl4adqbuA3OAuZx/O2oGpL6PtJ9BDa0kHheZ1ToHU3w==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.11.tgz",
+      "integrity": "sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bignumber": "^5.0.13",
         "@ethersproject/bytes": "^5.0.9",
@@ -97,19 +129,59 @@
       }
     },
     "node_modules/@ethersproject/base64": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.7.tgz",
-      "integrity": "sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.9.tgz",
+      "integrity": "sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9"
       }
     },
-    "node_modules/@ethersproject/bignumber": {
-      "version": "5.0.13",
-      "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.13.tgz",
-      "integrity": "sha512-b89bX5li6aK492yuPP5mPgRVgIxxBP7ksaBtKX5QQBsrZTpNOjf/MR4CjcUrAw8g+RQuD6kap9lPjFgY4U1/5A==",
+    "node_modules/@ethersproject/basex": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.0.9.tgz",
+      "integrity": "sha512-FANswl1IN3PS0eltQxH2aM2+utPrkLUVG4XVFi6SafRG9EpAqXCgycxC8PU90mPGhigYTpg9cnTB5mCZ6ejQjw==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/properties": "^5.0.7"
+      }
+    },
+    "node_modules/@ethersproject/bignumber": {
+      "version": "5.0.15",
+      "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.15.tgz",
+      "integrity": "sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8",
@@ -117,28 +189,112 @@
       }
     },
     "node_modules/@ethersproject/bytes": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.9.tgz",
-      "integrity": "sha512-k+17ZViDtAugC0s7HM6rdsTWEdIYII4RPCDkPEuxKc6i40Bs+m6tjRAtCECX06wKZnrEoR9pjOJRXHJ/VLoOcA==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.11.tgz",
+      "integrity": "sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/logger": "^5.0.8"
       }
     },
     "node_modules/@ethersproject/constants": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.8.tgz",
-      "integrity": "sha512-sCc73pFBsl59eDfoQR5OCEZCRv5b0iywadunti6MQIr5lt3XpwxK1Iuzd8XSFO02N9jUifvuZRrt0cY0+NBgTg==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.10.tgz",
+      "integrity": "sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bignumber": "^5.0.13"
       }
     },
-    "node_modules/@ethersproject/hash": {
-      "version": "5.0.10",
-      "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.10.tgz",
-      "integrity": "sha512-Tf0bvs6YFhw28LuHnhlDWyr0xfcDxSXdwM4TcskeBbmXVSKLv3bJQEEEBFUcRX0fJuslR3gCVySEaSh7vuMx5w==",
+    "node_modules/@ethersproject/contracts": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.0.12.tgz",
+      "integrity": "sha512-srijy31idjz8bE+gL1I6IRj2H4I9dUwfQ+QroLrIgNdGArqY8y2iFUKa3QTy+JBX26fJsdYiCQi1kKkaNpnMpQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/abi": "^5.0.10",
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7"
+      }
+    },
+    "node_modules/@ethersproject/contracts/node_modules/@ethersproject/abi": {
+      "version": "5.0.13",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.13.tgz",
+      "integrity": "sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
+      }
+    },
+    "node_modules/@ethersproject/hash": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.12.tgz",
+      "integrity": "sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/abstract-signer": "^5.0.10",
         "@ethersproject/address": "^5.0.9",
@@ -150,67 +306,355 @@
         "@ethersproject/strings": "^5.0.8"
       }
     },
-    "node_modules/@ethersproject/keccak256": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.7.tgz",
-      "integrity": "sha512-zpUBmofWvx9PGfc7IICobgFQSgNmTOGTGLUxSYqZzY/T+b4y/2o5eqf/GGmD7qnTGzKQ42YlLNo+LeDP2qe55g==",
+    "node_modules/@ethersproject/hdnode": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.0.10.tgz",
+      "integrity": "sha512-ZLwMtIcXK7xz2lSITDCl40W04CtRq4K9NwBxhCzdzPdaz6XnoJMwGz2YMVLg+8ksseq+RYtTwIIXtlK6vyvQyg==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/basex": "^5.0.7",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/pbkdf2": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/signing-key": "^5.0.8",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/wordlists": "^5.0.8"
+      }
+    },
+    "node_modules/@ethersproject/json-wallets": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.0.12.tgz",
+      "integrity": "sha512-nac553zGZnOewpjlqbfy7WBl8m3y7qudzRsI2dCxrediYtPIVIs9f6Pbnou8vDmmp8X4/U4W788d+Ma88o+Gbg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hdnode": "^5.0.8",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/pbkdf2": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "aes-js": "3.0.0",
+        "scrypt-js": "3.0.1"
+      }
+    },
+    "node_modules/@ethersproject/keccak256": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.9.tgz",
+      "integrity": "sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9",
         "js-sha3": "0.5.7"
       }
     },
     "node_modules/@ethersproject/logger": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.8.tgz",
-      "integrity": "sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A==",
-      "dev": true
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.10.tgz",
+      "integrity": "sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ]
     },
     "node_modules/@ethersproject/networks": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.7.tgz",
-      "integrity": "sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.9.tgz",
+      "integrity": "sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/logger": "^5.0.8"
       }
     },
-    "node_modules/@ethersproject/properties": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.7.tgz",
-      "integrity": "sha512-812H1Rus2vjw0zbasfDI1GLNPDsoyX1pYqiCgaR1BuyKxUTbwcH1B+214l6VGe1v+F6iEVb7WjIwMjKhb4EUsg==",
+    "node_modules/@ethersproject/pbkdf2": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.0.9.tgz",
+      "integrity": "sha512-ItE/wQ/WVw/ajEHPUVgfu0aEvksPgOQc+278bke8sGKnGO3ppjmqp0MHh17tHc1EBTzJbSms5aLIqc56qZ/oiA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/sha2": "^5.0.7"
+      }
+    },
+    "node_modules/@ethersproject/properties": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.9.tgz",
+      "integrity": "sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/logger": "^5.0.8"
+      }
+    },
+    "node_modules/@ethersproject/providers": {
+      "version": "5.0.24",
+      "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.0.24.tgz",
+      "integrity": "sha512-M4Iw1r4gGJkt7ZUa++iREuviKL/DIpmIMsaUlVlXtV+ZrUXeN8xQ3zOTrbz7R4h9W9oljBZM7i4D3Kn1krJ30A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/basex": "^5.0.7",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/networks": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/rlp": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/web": "^5.0.12",
+        "bech32": "1.1.4",
+        "ws": "7.2.3"
+      }
+    },
+    "node_modules/@ethersproject/providers/node_modules/ws": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
+      "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@ethersproject/random": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.0.9.tgz",
+      "integrity": "sha512-DANG8THsKqFbJOantrxumtG6gyETNE54VfbsWa+SQAT8WKpDo9W/X5Zhh73KuhClaey1UI32uVmISZeq/Zxn1A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8"
       }
     },
     "node_modules/@ethersproject/rlp": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.7.tgz",
-      "integrity": "sha512-ulUTVEuV7PT4jJTPpfhRHK57tkLEDEY9XSYJtrSNHOqdwMvH0z7BM2AKIMq4LVDlnu4YZASdKrkFGEIO712V9w==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.9.tgz",
+      "integrity": "sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8"
       }
     },
-    "node_modules/@ethersproject/signing-key": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.8.tgz",
-      "integrity": "sha512-YKxQM45eDa6WAD+s3QZPdm1uW1MutzVuyoepdRRVmMJ8qkk7iOiIhUkZwqKLNxKzEJijt/82ycuOREc9WBNAKg==",
+    "node_modules/@ethersproject/sha2": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.0.9.tgz",
+      "integrity": "sha512-5FH4s47gM7N1fFAYQ1+m7aX0SbLg0Xr+6tvqndmNqc382/qBIbzXiGlUookrsjlPb6gLNurnTssCXjNM72J6lQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/logger": "^5.0.8",
+        "hash.js": "1.1.3"
+      }
+    },
+    "node_modules/@ethersproject/signing-key": {
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.11.tgz",
+      "integrity": "sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8",
         "@ethersproject/properties": "^5.0.7",
-        "elliptic": "6.5.3"
+        "elliptic": "6.5.4"
+      }
+    },
+    "node_modules/@ethersproject/signing-key/node_modules/elliptic": {
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+      "dev": true,
+      "dependencies": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "node_modules/@ethersproject/solidity": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.0.10.tgz",
+      "integrity": "sha512-8OG3HLqynWXDA6mVIHuHfF/ojTTwBahON7hc9GAKCqglzXCkVA3OpyxOJXPzjHClRIAUUiU7r9oy9Z/nsjtT/g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
       }
     },
     "node_modules/@ethersproject/strings": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.8.tgz",
-      "integrity": "sha512-5IsdXf8tMY8QuHl8vTLnk9ehXDDm6x9FB9S9Og5IA1GYhLe5ZewydXSjlJlsqU2t9HRbfv97OJZV/pX8DVA/Hw==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.10.tgz",
+      "integrity": "sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/constants": "^5.0.8",
@@ -218,10 +662,20 @@
       }
     },
     "node_modules/@ethersproject/transactions": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.9.tgz",
-      "integrity": "sha512-0Fu1yhdFBkrbMjenEr+39tmDxuHmaw0pe9Jb18XuKoItj7Z3p7+UzdHLr2S/okvHDHYPbZE5gtANDdQ3ZL1nBA==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.11.tgz",
+      "integrity": "sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/address": "^5.0.9",
         "@ethersproject/bignumber": "^5.0.13",
@@ -234,11 +688,75 @@
         "@ethersproject/signing-key": "^5.0.8"
       }
     },
-    "node_modules/@ethersproject/web": {
-      "version": "5.0.12",
-      "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.12.tgz",
-      "integrity": "sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g==",
+    "node_modules/@ethersproject/units": {
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.0.11.tgz",
+      "integrity": "sha512-nOSPmcCWyB/dwoBRhhTtPGCsTbiXqmc7Q0Adwvafc432AC7hy3Fj3IFZtnSXsbtJ/GdHCIUIoA8gtvxSsFuBJg==",
       "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/logger": "^5.0.8"
+      }
+    },
+    "node_modules/@ethersproject/wallet": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.0.12.tgz",
+      "integrity": "sha512-rboJebGf47/KPZrKZQdYg9BAYuXbc/OwcUyML1K1f2jnJeo1ObWV11U1PAWTjTbhhSy6/Fg+34GO2yMb5Dt1Rw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/hdnode": "^5.0.8",
+        "@ethersproject/json-wallets": "^5.0.10",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/signing-key": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/wordlists": "^5.0.8"
+      }
+    },
+    "node_modules/@ethersproject/web": {
+      "version": "5.0.14",
+      "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.14.tgz",
+      "integrity": "sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
         "@ethersproject/base64": "^5.0.7",
         "@ethersproject/bytes": "^5.0.9",
@@ -247,6 +765,29 @@
         "@ethersproject/strings": "^5.0.8"
       }
     },
+    "node_modules/@ethersproject/wordlists": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.0.10.tgz",
+      "integrity": "sha512-jWsEm1iJzpg9SCXnNfFz+tcp4Ofzv0TJb6mj+soCNcar9GcT0yGz62ZsHC3pLQWaF4LkCzGwRJHJTXKjHQfG1A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
+      }
+    },
     "node_modules/@nomiclabs/buidler": {
       "version": "1.4.8",
       "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.4.8.tgz",
@@ -579,6 +1120,16 @@
         "safe-buffer": "^5.1.1"
       }
     },
+    "node_modules/@nomiclabs/hardhat-ethers": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz",
+      "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==",
+      "dev": true,
+      "peerDependencies": {
+        "ethers": "^5.0.0",
+        "hardhat": "^2.0.0"
+      }
+    },
     "node_modules/@nomiclabs/hardhat-etherscan": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.1.tgz",
@@ -691,6 +1242,29 @@
         "source-map-support": "^0.5.19"
       }
     },
+    "node_modules/@nomiclabs/truffle-contract/node_modules/ethers": {
+      "version": "4.0.48",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "dev": true,
+      "dependencies": {
+        "aes-js": "3.0.0",
+        "bn.js": "^4.4.0",
+        "elliptic": "6.5.3",
+        "hash.js": "1.1.3",
+        "js-sha3": "0.5.7",
+        "scrypt-js": "2.0.4",
+        "setimmediate": "1.0.4",
+        "uuid": "2.0.1",
+        "xmlhttprequest": "1.8.0"
+      }
+    },
+    "node_modules/@nomiclabs/truffle-contract/node_modules/scrypt-js": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+      "dev": true
+    },
     "node_modules/@openzeppelin/contract-loader": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz",
@@ -884,6 +1458,27 @@
         "node": ">=4"
       }
     },
+    "node_modules/@openzeppelin/upgrades/node_modules/ethers": {
+      "version": "4.0.48",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "dependencies": {
+        "aes-js": "3.0.0",
+        "bn.js": "^4.4.0",
+        "elliptic": "6.5.3",
+        "hash.js": "1.1.3",
+        "js-sha3": "0.5.7",
+        "scrypt-js": "2.0.4",
+        "setimmediate": "1.0.4",
+        "uuid": "2.0.1",
+        "xmlhttprequest": "1.8.0"
+      }
+    },
+    "node_modules/@openzeppelin/upgrades/node_modules/scrypt-js": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw=="
+    },
     "node_modules/@openzeppelin/upgrades/node_modules/web3": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.2.tgz",
@@ -1368,6 +1963,29 @@
         "xhr-request-promise": "^0.1.2"
       }
     },
+    "node_modules/@truffle/contract/node_modules/ethers": {
+      "version": "4.0.48",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "dev": true,
+      "dependencies": {
+        "aes-js": "3.0.0",
+        "bn.js": "^4.4.0",
+        "elliptic": "6.5.3",
+        "hash.js": "1.1.3",
+        "js-sha3": "0.5.7",
+        "scrypt-js": "2.0.4",
+        "setimmediate": "1.0.4",
+        "uuid": "2.0.1",
+        "xmlhttprequest": "1.8.0"
+      }
+    },
+    "node_modules/@truffle/contract/node_modules/ethers/node_modules/scrypt-js": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+      "dev": true
+    },
     "node_modules/@truffle/contract/node_modules/scrypt-js": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz",
@@ -1845,6 +2463,41 @@
         "ms": "2.0.0"
       }
     },
+    "node_modules/@truffle/interface-adapter/node_modules/ethers": {
+      "version": "4.0.48",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "dev": true,
+      "dependencies": {
+        "aes-js": "3.0.0",
+        "bn.js": "^4.4.0",
+        "elliptic": "6.5.3",
+        "hash.js": "1.1.3",
+        "js-sha3": "0.5.7",
+        "scrypt-js": "2.0.4",
+        "setimmediate": "1.0.4",
+        "uuid": "2.0.1",
+        "xmlhttprequest": "1.8.0"
+      }
+    },
+    "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/scrypt-js": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+      "dev": true
+    },
+    "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/setimmediate": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz",
+      "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=",
+      "dev": true
+    },
+    "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/uuid": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
+      "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=",
+      "dev": true
+    },
     "node_modules/@truffle/interface-adapter/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
@@ -3017,6 +3670,12 @@
         "tweetnacl": "^0.14.3"
       }
     },
+    "node_modules/bech32": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+      "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+      "dev": true
+    },
     "node_modules/big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -5233,11 +5892,6 @@
         "minimalistic-assert": "^1.0.1"
       }
     },
-    "node_modules/ethereum-cryptography/node_modules/scrypt-js": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
-      "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
-    },
     "node_modules/ethereum-cryptography/node_modules/setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -5386,19 +6040,78 @@
       }
     },
     "node_modules/ethers": {
-      "version": "4.0.48",
-      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
-      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "version": "5.0.32",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.0.32.tgz",
+      "integrity": "sha512-rORfGWR0HsA4pjKMMcWZorw12DHsXqfIAuPVHJsXt+vI24jvXcVqx+rLsSvgOoLdaCMdxiN5qlIq2+4axKG31g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
       "dependencies": {
-        "aes-js": "3.0.0",
-        "bn.js": "^4.4.0",
-        "elliptic": "6.5.3",
-        "hash.js": "1.1.3",
-        "js-sha3": "0.5.7",
-        "scrypt-js": "2.0.4",
-        "setimmediate": "1.0.4",
-        "uuid": "2.0.1",
-        "xmlhttprequest": "1.8.0"
+        "@ethersproject/abi": "5.0.13",
+        "@ethersproject/abstract-provider": "5.0.10",
+        "@ethersproject/abstract-signer": "5.0.14",
+        "@ethersproject/address": "5.0.11",
+        "@ethersproject/base64": "5.0.9",
+        "@ethersproject/basex": "5.0.9",
+        "@ethersproject/bignumber": "5.0.15",
+        "@ethersproject/bytes": "5.0.11",
+        "@ethersproject/constants": "5.0.10",
+        "@ethersproject/contracts": "5.0.12",
+        "@ethersproject/hash": "5.0.12",
+        "@ethersproject/hdnode": "5.0.10",
+        "@ethersproject/json-wallets": "5.0.12",
+        "@ethersproject/keccak256": "5.0.9",
+        "@ethersproject/logger": "5.0.10",
+        "@ethersproject/networks": "5.0.9",
+        "@ethersproject/pbkdf2": "5.0.9",
+        "@ethersproject/properties": "5.0.9",
+        "@ethersproject/providers": "5.0.24",
+        "@ethersproject/random": "5.0.9",
+        "@ethersproject/rlp": "5.0.9",
+        "@ethersproject/sha2": "5.0.9",
+        "@ethersproject/signing-key": "5.0.11",
+        "@ethersproject/solidity": "5.0.10",
+        "@ethersproject/strings": "5.0.10",
+        "@ethersproject/transactions": "5.0.11",
+        "@ethersproject/units": "5.0.11",
+        "@ethersproject/wallet": "5.0.12",
+        "@ethersproject/web": "5.0.14",
+        "@ethersproject/wordlists": "5.0.10"
+      }
+    },
+    "node_modules/ethers/node_modules/@ethersproject/abi": {
+      "version": "5.0.13",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.13.tgz",
+      "integrity": "sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.buymeacoffee.com/ricmoo"
+        }
+      ],
+      "dependencies": {
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
       }
     },
     "node_modules/ethjs-abi": {
@@ -11271,9 +11984,9 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "node_modules/scrypt-js": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
-      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw=="
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+      "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
     },
     "node_modules/scrypt-shim": {
       "resolved": "git+ssh://git@github.com/web3-js/scrypt-shim.git#aafdadda13e660e25e1c525d1f5b2443f5eb1ebb",
@@ -15099,12 +15812,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/web3/node_modules/scrypt-js": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
-      "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
-      "dev": true
-    },
     "node_modules/web3/node_modules/setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -15892,9 +16599,9 @@
       }
     },
     "@ethersproject/abstract-provider": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.8.tgz",
-      "integrity": "sha512-fqJXkewcGdi8LogKMgRyzc/Ls2js07yor7+g9KfPs09uPOcQLg7cc34JN+lk34HH9gg2HU0DIA5797ZR8znkfw==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz",
+      "integrity": "sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ==",
       "dev": true,
       "requires": {
         "@ethersproject/bignumber": "^5.0.13",
@@ -15907,9 +16614,9 @@
       }
     },
     "@ethersproject/abstract-signer": {
-      "version": "5.0.11",
-      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.11.tgz",
-      "integrity": "sha512-RKOgPSEYafknA62SrD3OCK42AllHE4YBfKYXyQeM+sBP7Nq3X5FpzeoY4uzC43P4wIhmNoTHCKQuwnX7fBqb6Q==",
+      "version": "5.0.14",
+      "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz",
+      "integrity": "sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g==",
       "dev": true,
       "requires": {
         "@ethersproject/abstract-provider": "^5.0.8",
@@ -15920,9 +16627,9 @@
       }
     },
     "@ethersproject/address": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.9.tgz",
-      "integrity": "sha512-gKkmbZDMyGbVjr8nA5P0md1GgESqSGH7ILIrDidPdNXBl4adqbuA3OAuZx/O2oGpL6PtJ9BDa0kHheZ1ToHU3w==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.11.tgz",
+      "integrity": "sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw==",
       "dev": true,
       "requires": {
         "@ethersproject/bignumber": "^5.0.13",
@@ -15933,18 +16640,28 @@
       }
     },
     "@ethersproject/base64": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.7.tgz",
-      "integrity": "sha512-S5oh5DVfCo06xwJXT8fQC68mvJfgScTl2AXvbYMsHNfIBTDb084Wx4iA9MNlEReOv6HulkS+gyrUM/j3514rSw==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.9.tgz",
+      "integrity": "sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9"
       }
     },
+    "@ethersproject/basex": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.0.9.tgz",
+      "integrity": "sha512-FANswl1IN3PS0eltQxH2aM2+utPrkLUVG4XVFi6SafRG9EpAqXCgycxC8PU90mPGhigYTpg9cnTB5mCZ6ejQjw==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/properties": "^5.0.7"
+      }
+    },
     "@ethersproject/bignumber": {
-      "version": "5.0.13",
-      "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.13.tgz",
-      "integrity": "sha512-b89bX5li6aK492yuPP5mPgRVgIxxBP7ksaBtKX5QQBsrZTpNOjf/MR4CjcUrAw8g+RQuD6kap9lPjFgY4U1/5A==",
+      "version": "5.0.15",
+      "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.15.tgz",
+      "integrity": "sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9",
@@ -15953,27 +16670,63 @@
       }
     },
     "@ethersproject/bytes": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.9.tgz",
-      "integrity": "sha512-k+17ZViDtAugC0s7HM6rdsTWEdIYII4RPCDkPEuxKc6i40Bs+m6tjRAtCECX06wKZnrEoR9pjOJRXHJ/VLoOcA==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.11.tgz",
+      "integrity": "sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg==",
       "dev": true,
       "requires": {
         "@ethersproject/logger": "^5.0.8"
       }
     },
     "@ethersproject/constants": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.8.tgz",
-      "integrity": "sha512-sCc73pFBsl59eDfoQR5OCEZCRv5b0iywadunti6MQIr5lt3XpwxK1Iuzd8XSFO02N9jUifvuZRrt0cY0+NBgTg==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.10.tgz",
+      "integrity": "sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw==",
       "dev": true,
       "requires": {
         "@ethersproject/bignumber": "^5.0.13"
       }
     },
+    "@ethersproject/contracts": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.0.12.tgz",
+      "integrity": "sha512-srijy31idjz8bE+gL1I6IRj2H4I9dUwfQ+QroLrIgNdGArqY8y2iFUKa3QTy+JBX26fJsdYiCQi1kKkaNpnMpQ==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/abi": "^5.0.10",
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7"
+      },
+      "dependencies": {
+        "@ethersproject/abi": {
+          "version": "5.0.13",
+          "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.13.tgz",
+          "integrity": "sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg==",
+          "dev": true,
+          "requires": {
+            "@ethersproject/address": "^5.0.9",
+            "@ethersproject/bignumber": "^5.0.13",
+            "@ethersproject/bytes": "^5.0.9",
+            "@ethersproject/constants": "^5.0.8",
+            "@ethersproject/hash": "^5.0.10",
+            "@ethersproject/keccak256": "^5.0.7",
+            "@ethersproject/logger": "^5.0.8",
+            "@ethersproject/properties": "^5.0.7",
+            "@ethersproject/strings": "^5.0.8"
+          }
+        }
+      }
+    },
     "@ethersproject/hash": {
-      "version": "5.0.10",
-      "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.10.tgz",
-      "integrity": "sha512-Tf0bvs6YFhw28LuHnhlDWyr0xfcDxSXdwM4TcskeBbmXVSKLv3bJQEEEBFUcRX0fJuslR3gCVySEaSh7vuMx5w==",
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.12.tgz",
+      "integrity": "sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q==",
       "dev": true,
       "requires": {
         "@ethersproject/abstract-signer": "^5.0.10",
@@ -15986,10 +16739,51 @@
         "@ethersproject/strings": "^5.0.8"
       }
     },
+    "@ethersproject/hdnode": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.0.10.tgz",
+      "integrity": "sha512-ZLwMtIcXK7xz2lSITDCl40W04CtRq4K9NwBxhCzdzPdaz6XnoJMwGz2YMVLg+8ksseq+RYtTwIIXtlK6vyvQyg==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/basex": "^5.0.7",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/pbkdf2": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/signing-key": "^5.0.8",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/wordlists": "^5.0.8"
+      }
+    },
+    "@ethersproject/json-wallets": {
+      "version": "5.0.12",
+      "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.0.12.tgz",
+      "integrity": "sha512-nac553zGZnOewpjlqbfy7WBl8m3y7qudzRsI2dCxrediYtPIVIs9f6Pbnou8vDmmp8X4/U4W788d+Ma88o+Gbg==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hdnode": "^5.0.8",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/pbkdf2": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "aes-js": "3.0.0",
+        "scrypt-js": "3.0.1"
+      }
+    },
     "@ethersproject/keccak256": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.7.tgz",
-      "integrity": "sha512-zpUBmofWvx9PGfc7IICobgFQSgNmTOGTGLUxSYqZzY/T+b4y/2o5eqf/GGmD7qnTGzKQ42YlLNo+LeDP2qe55g==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.9.tgz",
+      "integrity": "sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9",
@@ -15997,55 +16791,152 @@
       }
     },
     "@ethersproject/logger": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.8.tgz",
-      "integrity": "sha512-SkJCTaVTnaZ3/ieLF5pVftxGEFX56pTH+f2Slrpv7cU0TNpUZNib84QQdukd++sWUp/S7j5t5NW+WegbXd4U/A==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.10.tgz",
+      "integrity": "sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw==",
       "dev": true
     },
     "@ethersproject/networks": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.7.tgz",
-      "integrity": "sha512-dI14QATndIcUgcCBL1c5vUr/YsI5cCHLN81rF7PU+yS7Xgp2/Rzbr9+YqpC6NBXHFUASjh6GpKqsVMpufAL0BQ==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.9.tgz",
+      "integrity": "sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg==",
       "dev": true,
       "requires": {
         "@ethersproject/logger": "^5.0.8"
       }
     },
+    "@ethersproject/pbkdf2": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.0.9.tgz",
+      "integrity": "sha512-ItE/wQ/WVw/ajEHPUVgfu0aEvksPgOQc+278bke8sGKnGO3ppjmqp0MHh17tHc1EBTzJbSms5aLIqc56qZ/oiA==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/sha2": "^5.0.7"
+      }
+    },
     "@ethersproject/properties": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.7.tgz",
-      "integrity": "sha512-812H1Rus2vjw0zbasfDI1GLNPDsoyX1pYqiCgaR1BuyKxUTbwcH1B+214l6VGe1v+F6iEVb7WjIwMjKhb4EUsg==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.9.tgz",
+      "integrity": "sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg==",
       "dev": true,
       "requires": {
         "@ethersproject/logger": "^5.0.8"
       }
     },
-    "@ethersproject/rlp": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.7.tgz",
-      "integrity": "sha512-ulUTVEuV7PT4jJTPpfhRHK57tkLEDEY9XSYJtrSNHOqdwMvH0z7BM2AKIMq4LVDlnu4YZASdKrkFGEIO712V9w==",
+    "@ethersproject/providers": {
+      "version": "5.0.24",
+      "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.0.24.tgz",
+      "integrity": "sha512-M4Iw1r4gGJkt7ZUa++iREuviKL/DIpmIMsaUlVlXtV+ZrUXeN8xQ3zOTrbz7R4h9W9oljBZM7i4D3Kn1krJ30A==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/basex": "^5.0.7",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/networks": "^5.0.7",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/rlp": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/web": "^5.0.12",
+        "bech32": "1.1.4",
+        "ws": "7.2.3"
+      },
+      "dependencies": {
+        "ws": {
+          "version": "7.2.3",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
+          "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==",
+          "dev": true,
+          "requires": {}
+        }
+      }
+    },
+    "@ethersproject/random": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.0.9.tgz",
+      "integrity": "sha512-DANG8THsKqFbJOantrxumtG6gyETNE54VfbsWa+SQAT8WKpDo9W/X5Zhh73KuhClaey1UI32uVmISZeq/Zxn1A==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8"
       }
     },
+    "@ethersproject/rlp": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.9.tgz",
+      "integrity": "sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/logger": "^5.0.8"
+      }
+    },
+    "@ethersproject/sha2": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.0.9.tgz",
+      "integrity": "sha512-5FH4s47gM7N1fFAYQ1+m7aX0SbLg0Xr+6tvqndmNqc382/qBIbzXiGlUookrsjlPb6gLNurnTssCXjNM72J6lQ==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/logger": "^5.0.8",
+        "hash.js": "1.1.3"
+      }
+    },
     "@ethersproject/signing-key": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.8.tgz",
-      "integrity": "sha512-YKxQM45eDa6WAD+s3QZPdm1uW1MutzVuyoepdRRVmMJ8qkk7iOiIhUkZwqKLNxKzEJijt/82ycuOREc9WBNAKg==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.11.tgz",
+      "integrity": "sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9",
         "@ethersproject/logger": "^5.0.8",
         "@ethersproject/properties": "^5.0.7",
-        "elliptic": "6.5.3"
+        "elliptic": "6.5.4"
+      },
+      "dependencies": {
+        "elliptic": {
+          "version": "6.5.4",
+          "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+          "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+          "dev": true,
+          "requires": {
+            "bn.js": "^4.11.9",
+            "brorand": "^1.1.0",
+            "hash.js": "^1.0.0",
+            "hmac-drbg": "^1.0.1",
+            "inherits": "^2.0.4",
+            "minimalistic-assert": "^1.0.1",
+            "minimalistic-crypto-utils": "^1.0.1"
+          }
+        }
+      }
+    },
+    "@ethersproject/solidity": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.0.10.tgz",
+      "integrity": "sha512-8OG3HLqynWXDA6mVIHuHfF/ojTTwBahON7hc9GAKCqglzXCkVA3OpyxOJXPzjHClRIAUUiU7r9oy9Z/nsjtT/g==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/sha2": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
       }
     },
     "@ethersproject/strings": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.8.tgz",
-      "integrity": "sha512-5IsdXf8tMY8QuHl8vTLnk9ehXDDm6x9FB9S9Og5IA1GYhLe5ZewydXSjlJlsqU2t9HRbfv97OJZV/pX8DVA/Hw==",
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.10.tgz",
+      "integrity": "sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w==",
       "dev": true,
       "requires": {
         "@ethersproject/bytes": "^5.0.9",
@@ -16054,9 +16945,9 @@
       }
     },
     "@ethersproject/transactions": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.9.tgz",
-      "integrity": "sha512-0Fu1yhdFBkrbMjenEr+39tmDxuHmaw0pe9Jb18XuKoItj7Z3p7+UzdHLr2S/okvHDHYPbZE5gtANDdQ3ZL1nBA==",
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.11.tgz",
+      "integrity": "sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA==",
       "dev": true,
       "requires": {
         "@ethersproject/address": "^5.0.9",
@@ -16070,10 +16961,44 @@
         "@ethersproject/signing-key": "^5.0.8"
       }
     },
-    "@ethersproject/web": {
+    "@ethersproject/units": {
+      "version": "5.0.11",
+      "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.0.11.tgz",
+      "integrity": "sha512-nOSPmcCWyB/dwoBRhhTtPGCsTbiXqmc7Q0Adwvafc432AC7hy3Fj3IFZtnSXsbtJ/GdHCIUIoA8gtvxSsFuBJg==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/constants": "^5.0.8",
+        "@ethersproject/logger": "^5.0.8"
+      }
+    },
+    "@ethersproject/wallet": {
       "version": "5.0.12",
-      "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.12.tgz",
-      "integrity": "sha512-gVxS5iW0bgidZ76kr7LsTxj4uzN5XpCLzvZrLp8TP+4YgxHfCeetFyQkRPgBEAJdNrexdSBayvyJvzGvOq0O8g==",
+      "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.0.12.tgz",
+      "integrity": "sha512-rboJebGf47/KPZrKZQdYg9BAYuXbc/OwcUyML1K1f2jnJeo1ObWV11U1PAWTjTbhhSy6/Fg+34GO2yMb5Dt1Rw==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/abstract-provider": "^5.0.8",
+        "@ethersproject/abstract-signer": "^5.0.10",
+        "@ethersproject/address": "^5.0.9",
+        "@ethersproject/bignumber": "^5.0.13",
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/hdnode": "^5.0.8",
+        "@ethersproject/json-wallets": "^5.0.10",
+        "@ethersproject/keccak256": "^5.0.7",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/random": "^5.0.7",
+        "@ethersproject/signing-key": "^5.0.8",
+        "@ethersproject/transactions": "^5.0.9",
+        "@ethersproject/wordlists": "^5.0.8"
+      }
+    },
+    "@ethersproject/web": {
+      "version": "5.0.14",
+      "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.14.tgz",
+      "integrity": "sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA==",
       "dev": true,
       "requires": {
         "@ethersproject/base64": "^5.0.7",
@@ -16083,6 +17008,19 @@
         "@ethersproject/strings": "^5.0.8"
       }
     },
+    "@ethersproject/wordlists": {
+      "version": "5.0.10",
+      "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.0.10.tgz",
+      "integrity": "sha512-jWsEm1iJzpg9SCXnNfFz+tcp4Ofzv0TJb6mj+soCNcar9GcT0yGz62ZsHC3pLQWaF4LkCzGwRJHJTXKjHQfG1A==",
+      "dev": true,
+      "requires": {
+        "@ethersproject/bytes": "^5.0.9",
+        "@ethersproject/hash": "^5.0.10",
+        "@ethersproject/logger": "^5.0.8",
+        "@ethersproject/properties": "^5.0.7",
+        "@ethersproject/strings": "^5.0.8"
+      }
+    },
     "@nomiclabs/buidler": {
       "version": "1.4.8",
       "resolved": "https://registry.npmjs.org/@nomiclabs/buidler/-/buidler-1.4.8.tgz",
@@ -16379,6 +17317,13 @@
         }
       }
     },
+    "@nomiclabs/hardhat-ethers": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz",
+      "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==",
+      "dev": true,
+      "requires": {}
+    },
     "@nomiclabs/hardhat-etherscan": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.1.tgz",
@@ -16476,6 +17421,31 @@
         "ethereum-ens": "^0.8.0",
         "ethers": "^4.0.0-beta.1",
         "source-map-support": "^0.5.19"
+      },
+      "dependencies": {
+        "ethers": {
+          "version": "4.0.48",
+          "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+          "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+          "dev": true,
+          "requires": {
+            "aes-js": "3.0.0",
+            "bn.js": "^4.4.0",
+            "elliptic": "6.5.3",
+            "hash.js": "1.1.3",
+            "js-sha3": "0.5.7",
+            "scrypt-js": "2.0.4",
+            "setimmediate": "1.0.4",
+            "uuid": "2.0.1",
+            "xmlhttprequest": "1.8.0"
+          }
+        },
+        "scrypt-js": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+          "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+          "dev": true
+        }
       }
     },
     "@openzeppelin/contract-loader": {
@@ -16645,6 +17615,27 @@
             "supports-color": "^5.3.0"
           }
         },
+        "ethers": {
+          "version": "4.0.48",
+          "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+          "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+          "requires": {
+            "aes-js": "3.0.0",
+            "bn.js": "^4.4.0",
+            "elliptic": "6.5.3",
+            "hash.js": "1.1.3",
+            "js-sha3": "0.5.7",
+            "scrypt-js": "2.0.4",
+            "setimmediate": "1.0.4",
+            "uuid": "2.0.1",
+            "xmlhttprequest": "1.8.0"
+          }
+        },
+        "scrypt-js": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+          "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw=="
+        },
         "web3": {
           "version": "1.2.2",
           "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.2.tgz",
@@ -17060,6 +18051,31 @@
             "xhr-request-promise": "^0.1.2"
           }
         },
+        "ethers": {
+          "version": "4.0.48",
+          "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+          "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+          "dev": true,
+          "requires": {
+            "aes-js": "3.0.0",
+            "bn.js": "^4.4.0",
+            "elliptic": "6.5.3",
+            "hash.js": "1.1.3",
+            "js-sha3": "0.5.7",
+            "scrypt-js": "2.0.4",
+            "setimmediate": "1.0.4",
+            "uuid": "2.0.1",
+            "xmlhttprequest": "1.8.0"
+          },
+          "dependencies": {
+            "scrypt-js": {
+              "version": "2.0.4",
+              "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+              "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+              "dev": true
+            }
+          }
+        },
         "scrypt-js": {
           "version": "2.0.3",
           "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz",
@@ -17492,6 +18508,43 @@
             "ms": "2.0.0"
           }
         },
+        "ethers": {
+          "version": "4.0.48",
+          "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
+          "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+          "dev": true,
+          "requires": {
+            "aes-js": "3.0.0",
+            "bn.js": "^4.4.0",
+            "elliptic": "6.5.3",
+            "hash.js": "1.1.3",
+            "js-sha3": "0.5.7",
+            "scrypt-js": "2.0.4",
+            "setimmediate": "1.0.4",
+            "uuid": "2.0.1",
+            "xmlhttprequest": "1.8.0"
+          },
+          "dependencies": {
+            "scrypt-js": {
+              "version": "2.0.4",
+              "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
+              "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==",
+              "dev": true
+            },
+            "setimmediate": {
+              "version": "1.0.4",
+              "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz",
+              "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=",
+              "dev": true
+            },
+            "uuid": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
+              "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=",
+              "dev": true
+            }
+          }
+        },
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
@@ -18489,6 +19542,12 @@
         "tweetnacl": "^0.14.3"
       }
     },
+    "bech32": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+      "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==",
+      "dev": true
+    },
     "big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -20415,11 +21474,6 @@
             "minimalistic-assert": "^1.0.1"
           }
         },
-        "scrypt-js": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
-          "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
-        },
         "setimmediate": {
           "version": "1.0.5",
           "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -20571,19 +21625,60 @@
       }
     },
     "ethers": {
-      "version": "4.0.48",
-      "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz",
-      "integrity": "sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g==",
+      "version": "5.0.32",
+      "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.0.32.tgz",
+      "integrity": "sha512-rORfGWR0HsA4pjKMMcWZorw12DHsXqfIAuPVHJsXt+vI24jvXcVqx+rLsSvgOoLdaCMdxiN5qlIq2+4axKG31g==",
+      "dev": true,
       "requires": {
-        "aes-js": "3.0.0",
-        "bn.js": "^4.4.0",
-        "elliptic": "6.5.3",
-        "hash.js": "1.1.3",
-        "js-sha3": "0.5.7",
-        "scrypt-js": "2.0.4",
-        "setimmediate": "1.0.4",
-        "uuid": "2.0.1",
-        "xmlhttprequest": "1.8.0"
+        "@ethersproject/abi": "5.0.13",
+        "@ethersproject/abstract-provider": "5.0.10",
+        "@ethersproject/abstract-signer": "5.0.14",
+        "@ethersproject/address": "5.0.11",
+        "@ethersproject/base64": "5.0.9",
+        "@ethersproject/basex": "5.0.9",
+        "@ethersproject/bignumber": "5.0.15",
+        "@ethersproject/bytes": "5.0.11",
+        "@ethersproject/constants": "5.0.10",
+        "@ethersproject/contracts": "5.0.12",
+        "@ethersproject/hash": "5.0.12",
+        "@ethersproject/hdnode": "5.0.10",
+        "@ethersproject/json-wallets": "5.0.12",
+        "@ethersproject/keccak256": "5.0.9",
+        "@ethersproject/logger": "5.0.10",
+        "@ethersproject/networks": "5.0.9",
+        "@ethersproject/pbkdf2": "5.0.9",
+        "@ethersproject/properties": "5.0.9",
+        "@ethersproject/providers": "5.0.24",
+        "@ethersproject/random": "5.0.9",
+        "@ethersproject/rlp": "5.0.9",
+        "@ethersproject/sha2": "5.0.9",
+        "@ethersproject/signing-key": "5.0.11",
+        "@ethersproject/solidity": "5.0.10",
+        "@ethersproject/strings": "5.0.10",
+        "@ethersproject/transactions": "5.0.11",
+        "@ethersproject/units": "5.0.11",
+        "@ethersproject/wallet": "5.0.12",
+        "@ethersproject/web": "5.0.14",
+        "@ethersproject/wordlists": "5.0.10"
+      },
+      "dependencies": {
+        "@ethersproject/abi": {
+          "version": "5.0.13",
+          "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.13.tgz",
+          "integrity": "sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg==",
+          "dev": true,
+          "requires": {
+            "@ethersproject/address": "^5.0.9",
+            "@ethersproject/bignumber": "^5.0.13",
+            "@ethersproject/bytes": "^5.0.9",
+            "@ethersproject/constants": "^5.0.8",
+            "@ethersproject/hash": "^5.0.10",
+            "@ethersproject/keccak256": "^5.0.7",
+            "@ethersproject/logger": "^5.0.8",
+            "@ethersproject/properties": "^5.0.7",
+            "@ethersproject/strings": "^5.0.8"
+          }
+        }
       }
     },
     "ethjs-abi": {
@@ -25270,9 +26365,9 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "scrypt-js": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz",
-      "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw=="
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+      "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
     },
     "scrypt-shim": {
       "version": "git+ssh://git@github.com/web3-js/scrypt-shim.git#aafdadda13e660e25e1c525d1f5b2443f5eb1ebb",
@@ -28144,12 +29239,6 @@
           "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
           "dev": true
         },
-        "scrypt-js": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
-          "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
-          "dev": true
-        },
         "setimmediate": {
           "version": "1.0.5",
           "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
diff --git a/package.json b/package.json
index 6060cc36..54de7d3c 100644
--- a/package.json
+++ b/package.json
@@ -39,10 +39,12 @@
     "@nomiclabs/buidler": "^1.3.8",
     "@nomiclabs/buidler-truffle5": "^1.3.4",
     "@nomiclabs/buidler-web3": "^1.3.4",
+    "@nomiclabs/hardhat-ethers": "^2.0.2",
     "@nomiclabs/hardhat-etherscan": "^2.1.1",
     "@openzeppelin/test-helpers": "^0.5.6",
     "@studydefi/money-legos": "^2.3.7",
     "@tenderly/hardhat-tenderly": "^1.0.6",
+    "ethers": "^5.0.32",
     "ganache-cli": "^6.10.0-beta.2",
     "hardhat": "^2.0.8",
     "sol-merger": "^2.0.1",
diff --git a/scripts/deploy.js b/scripts/deploy.js
new file mode 100644
index 00000000..1e721c31
--- /dev/null
+++ b/scripts/deploy.js
@@ -0,0 +1,47 @@
+const hre = require("hardhat");
+const { ethers } = hre;
+
+const deployConnector = require("./deployConnector");
+
+async function main() {
+
+    const accounts = await hre.ethers.getSigners()
+    const wallet = accounts[0]
+
+    const connectMapping = {
+        '1inch': 'ConnectV2OneInch',
+        'aaveV1': 'ConnectV2AaveV1',
+        // 'aaveV2': 'ConnectV2AaveV2',
+        // 'auth': 'ConnectV2Auth',
+        // 'basic': 'ConnectV2Basic',
+        // 'comp': 'ConnectV2COMP',
+        // 'compound': 'ConnectV2Compound',
+        // 'dydx': 'ConnectV2Dydx',
+        // 'fee': 'ConnectV2Fee',
+        // 'gelato': 'ConnectV2Gelato',
+        // 'maker': 'ConnectV2Maker',
+        // 'uniswap': 'ConnectV2UniswapV2'
+    }
+
+    const addressMapping = {}
+
+    for (const key in connectMapping) {
+        addressMapping[key] = await deployConnector(connectMapping[key])
+    }
+
+    // const connectorsAbi = [
+    //     "function addConnectors(string[] _connectorNames, address[] _connectors)"
+    // ]
+
+    // // Replace the address with correct v2 connectors registry address
+    // const connectorsContract = new ethers.Contract("0x84b457c6D31025d56449D5A01F0c34bF78636f67", connectorsAbi, wallet)
+
+    // await connectorsContract.addConnectors(Object.keys(addressMapping), Object.values(addressMapping))
+}
+
+main()
+  .then(() => process.exit(0))
+  .catch(error => {
+    console.error(error);
+    process.exit(1);
+  });
\ No newline at end of file
diff --git a/scripts/deployConnector.js b/scripts/deployConnector.js
new file mode 100644
index 00000000..f0ae463d
--- /dev/null
+++ b/scripts/deployConnector.js
@@ -0,0 +1,24 @@
+const hre = require("hardhat");
+const { ethers } = hre;
+
+module.exports = async (connectorName) => {
+    const Connector = await ethers.getContractFactory(connectorName);
+    const connector = await Connector.deploy();
+    await connector.deployed();
+
+    console.log(`${connectorName} Deployed: ${connector.address}`);
+
+    try {
+        await hre.run("verify:verify", {
+            address: connector.address,
+            constructorArguments: []
+          }
+        )
+    } catch (error) {
+        console.log(`Failed to verify: ${connectorName}@${connector.address}`)
+        console.log(error)
+        console.log()
+    }
+
+    return connector.address
+}
\ No newline at end of file
diff --git a/scripts/deploySingle.js b/scripts/deploySingle.js
new file mode 100644
index 00000000..50ed7298
--- /dev/null
+++ b/scripts/deploySingle.js
@@ -0,0 +1,23 @@
+const hre = require("hardhat");
+const { ethers } = hre;
+
+const deployConnector = require("./deployConnector");
+
+async function main() {
+    const address = await deployConnector("ConnectOne") // Example
+
+    const connectorsAbi = [
+        "function addConnectors(string[] _connectorNames, address[] _connectors)"
+    ]
+
+    const connectorsContract = new ethers.Contract("0x84b457c6D31025d56449D5A01F0c34bF78636f67", connectorsAbi, ethers.provider);
+
+    await connectorsContract.addConnectors(['1inch'], [address])
+}
+
+main()
+  .then(() => process.exit(0))
+  .catch(error => {
+    console.error(error);
+    process.exit(1);
+  });
\ No newline at end of file