From 9ba2885a0facd0c9dc685129ae56273641cd77a9 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 2 Jun 2021 05:41:02 +0530 Subject: [PATCH 01/52] aave polygon claim function update --- contracts/mainnet/connectors/polygon-bridge/main.sol | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/contracts/mainnet/connectors/polygon-bridge/main.sol b/contracts/mainnet/connectors/polygon-bridge/main.sol index a1b3fc6f..0540f3c0 100644 --- a/contracts/mainnet/connectors/polygon-bridge/main.sol +++ b/contracts/mainnet/connectors/polygon-bridge/main.sol @@ -35,8 +35,13 @@ abstract contract PolygonBridgeResolver is Events, Helpers { } else { TokenInterface _token = TokenInterface(token); _amt = _amt == uint(-1) ? _token.balanceOf(address(this)) : _amt; - _token.approve(erc20Predicate, _amt); - migrator.depositFor(targetDsa, token, abi.encode(_amt)); + if (migrator.rootToChildToken(token) != address(0)) { + _token.approve(erc20Predicate, _amt); + migrator.depositFor(targetDsa, token, abi.encode(_amt)); + } else { + _token.approve(address(migratorPlasma), _amt); + migratorPlasma.depositERC20ForUser(token, targetDsa, _amt); + } } setUint(setId, _amt); @@ -47,5 +52,5 @@ abstract contract PolygonBridgeResolver is Events, Helpers { } contract ConnectV2PolygonBridge is PolygonBridgeResolver { - string public constant name = "Polygon-Bridge-v1"; + string public constant name = "Polygon-Bridge-v1.1"; } \ No newline at end of file From 1fd9c651f58505e8c299617b1e59e578e30c22c0 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 2 Jun 2021 05:41:26 +0530 Subject: [PATCH 02/52] polygon aave claim function update --- contracts/polygon/connectors/aave/aave-rewards/main.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/polygon/connectors/aave/aave-rewards/main.sol b/contracts/polygon/connectors/aave/aave-rewards/main.sol index 5f37c8ec..da49f2bc 100644 --- a/contracts/polygon/connectors/aave/aave-rewards/main.sol +++ b/contracts/polygon/connectors/aave/aave-rewards/main.sol @@ -33,6 +33,11 @@ abstract contract IncentivesResolver is Helpers, Events { _amt = incentives.claimRewards(assets, _amt, address(this)); + + TokenInterface wmatic = TokenInterface(wmaticAddr); + uint256 wmaticAmount = wmatic.balanceOf(address(this)); + convertWmaticToMatic(wmaticAmount > 0, wmatic, wmaticAmount); + setUint(setId, _amt); _eventName = "LogClaimed(address[],uint256,uint256,uint256)"; From 33af44419330d9a58f8389194d62d80f571efd42 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 2 Jun 2021 22:43:15 +0530 Subject: [PATCH 03/52] Updated connector addresses list --- .../connectors/polygon-bridge/helpers.sol | 7 +- .../connectors/polygon-bridge/interface.sol | 9 + .../mainnet/connectors_old/polygon-bridge.sol | 462 ++++++++++++++++++ docs/connectors.json | 5 +- hardhat.config.js | 6 +- 5 files changed, 485 insertions(+), 4 deletions(-) create mode 100644 contracts/mainnet/connectors_old/polygon-bridge.sol diff --git a/contracts/mainnet/connectors/polygon-bridge/helpers.sol b/contracts/mainnet/connectors/polygon-bridge/helpers.sol index 6bbdd5c3..262ca81a 100644 --- a/contracts/mainnet/connectors/polygon-bridge/helpers.sol +++ b/contracts/mainnet/connectors/polygon-bridge/helpers.sol @@ -2,7 +2,7 @@ pragma solidity ^0.7.0; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; -import { RootChainManagerInterface } from "./interface.sol"; +import { RootChainManagerInterface, DepositManagerProxyInterface } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { /** @@ -14,4 +14,9 @@ abstract contract Helpers is DSMath, Basic { * @dev Polygon POS Bridge Manager */ RootChainManagerInterface internal constant migrator = RootChainManagerInterface(0xA0c68C638235ee32657e8f720a23ceC1bFc77C77); + + /** + * @dev Polygon Plasma Bridge Manager + */ + DepositManagerProxyInterface internal constant migratorPlasma = DepositManagerProxyInterface(0x401F6c983eA34274ec46f84D70b31C151321188b); } \ No newline at end of file diff --git a/contracts/mainnet/connectors/polygon-bridge/interface.sol b/contracts/mainnet/connectors/polygon-bridge/interface.sol index 6043e9a7..266b2a2f 100644 --- a/contracts/mainnet/connectors/polygon-bridge/interface.sol +++ b/contracts/mainnet/connectors/polygon-bridge/interface.sol @@ -2,10 +2,19 @@ pragma solidity ^0.7.0; interface RootChainManagerInterface { function depositEtherFor(address user) external payable; + function rootToChildToken(address user) external view returns(address); function depositFor( address user, address rootToken, bytes calldata depositData ) external; function exit(bytes calldata inputData) external; +} + +interface DepositManagerProxyInterface { + function depositERC20ForUser( + address _token, + address _user, + uint256 _amount + ) external; } \ No newline at end of file diff --git a/contracts/mainnet/connectors_old/polygon-bridge.sol b/contracts/mainnet/connectors_old/polygon-bridge.sol new file mode 100644 index 00000000..137b4584 --- /dev/null +++ b/contracts/mainnet/connectors_old/polygon-bridge.sol @@ -0,0 +1,462 @@ +pragma solidity ^0.7.0; + +interface TokenInterface { + function approve(address, uint256) external; + function transfer(address, uint) external; + function transferFrom(address, address, uint) external; + function deposit() external payable; + function withdraw(uint) external; + function balanceOf(address) external view returns (uint); + function decimals() external view returns (uint); +} + +interface MemoryInterface { + function getUint(uint id) external returns (uint num); + function setUint(uint id, uint val) external; +} + +interface InstaMapping { + function cTokenMapping(address) external view returns (address); + function gemJoinMapping(bytes32) external view returns (address); +} + +interface AccountInterface { + function enable(address) external; + function disable(address) external; + function isAuth(address) external view returns (bool); +} + +abstract contract Stores { + + /** + * @dev Return ethereum address + */ + address constant internal ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + /** + * @dev Return Wrapped ETH address + */ + address constant internal wethAddr = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; + + /** + * @dev Return memory variable address + */ + MemoryInterface constant internal instaMemory = MemoryInterface(0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F); + + /** + * @dev Return InstaDApp Mapping Addresses + */ + InstaMapping constant internal instaMapping = InstaMapping(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); + + /** + * @dev Get Uint value from InstaMemory Contract. + */ + function getUint(uint getId, uint val) internal returns (uint returnVal) { + returnVal = getId == 0 ? val : instaMemory.getUint(getId); + } + + /** + * @dev Set Uint value in InstaMemory Contract. + */ + function setUint(uint setId, uint val) virtual internal { + if (setId != 0) instaMemory.setUint(setId, val); + } + +} + +/** + * @dev Wrappers over Solidity's arithmetic operations with added overflow + * checks. + * + * Arithmetic operations in Solidity wrap on overflow. This can easily result + * in bugs, because programmers usually assume that an overflow raises an + * error, which is the standard behavior in high level programming languages. + * `SafeMath` restores this intuition by reverting the transaction when an + * operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + */ +library SafeMath { + /** + * @dev Returns the addition of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { + uint256 c = a + b; + if (c < a) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the substraction of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b > a) return (false, 0); + return (true, a - b); + } + + /** + * @dev Returns the multiplication of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) return (true, 0); + uint256 c = a * b; + if (c / a != b) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the division of two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a / b); + } + + /** + * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a % b); + } + + /** + * @dev Returns the addition of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * + * - Addition cannot overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "SafeMath: addition overflow"); + return c; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting on + * overflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(b <= a, "SafeMath: subtraction overflow"); + return a - b; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) return 0; + uint256 c = a * b; + require(c / a == b, "SafeMath: multiplication overflow"); + return c; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting on + * division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: division by zero"); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: modulo by zero"); + return a % b; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting with custom message on + * overflow (when the result is negative). + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {trySub}. + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b <= a, errorMessage); + return a - b; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting with custom message on + * division by zero. The result is rounded towards zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryDiv}. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting with custom message when dividing by zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryMod}. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a % b; + } +} + +contract DSMath { + uint constant WAD = 10 ** 18; + uint constant RAY = 10 ** 27; + + function add(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.add(x, y); + } + + function sub(uint x, uint y) internal virtual pure returns (uint z) { + z = SafeMath.sub(x, y); + } + + function mul(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.mul(x, y); + } + + function div(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.div(x, y); + } + + function wmul(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.add(SafeMath.mul(x, y), WAD / 2) / WAD; + } + + function wdiv(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.add(SafeMath.mul(x, WAD), y / 2) / y; + } + + function rdiv(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.add(SafeMath.mul(x, RAY), y / 2) / y; + } + + function rmul(uint x, uint y) internal pure returns (uint z) { + z = SafeMath.add(SafeMath.mul(x, y), RAY / 2) / RAY; + } + + function toInt(uint x) internal pure returns (int y) { + y = int(x); + require(y >= 0, "int-overflow"); + } + + function toRad(uint wad) internal pure returns (uint rad) { + rad = mul(wad, 10 ** 27); + } + +} + +abstract contract Basic is DSMath, Stores { + + function convert18ToDec(uint _dec, uint256 _amt) internal pure returns (uint256 amt) { + amt = (_amt / 10 ** (18 - _dec)); + } + + function convertTo18(uint _dec, uint256 _amt) internal pure returns (uint256 amt) { + amt = mul(_amt, 10 ** (18 - _dec)); + } + + function getTokenBal(TokenInterface token) internal view returns(uint _amt) { + _amt = address(token) == ethAddr ? address(this).balance : token.balanceOf(address(this)); + } + + function getTokensDec(TokenInterface buyAddr, TokenInterface sellAddr) internal view returns(uint buyDec, uint sellDec) { + buyDec = address(buyAddr) == ethAddr ? 18 : buyAddr.decimals(); + sellDec = address(sellAddr) == ethAddr ? 18 : sellAddr.decimals(); + } + + function encodeEvent(string memory eventName, bytes memory eventParam) internal pure returns (bytes memory) { + return abi.encode(eventName, eventParam); + } + + function changeEthAddress(address buy, address sell) internal pure returns(TokenInterface _buy, TokenInterface _sell){ + _buy = buy == ethAddr ? TokenInterface(wethAddr) : TokenInterface(buy); + _sell = sell == ethAddr ? TokenInterface(wethAddr) : TokenInterface(sell); + } + + function convertEthToWeth(bool isEth, TokenInterface token, uint amount) internal { + if(isEth) token.deposit{value: amount}(); + } + + function convertWethToEth(bool isEth, TokenInterface token, uint amount) internal { + if(isEth) { + token.approve(address(token), amount); + token.withdraw(amount); + } + } +} + +interface RootChainManagerInterface { + function rootToChildToken(address user) external view returns(address); + function depositEtherFor(address user) external payable; + function depositFor( + address user, + address rootToken, + bytes calldata depositData + ) external; + function exit(bytes calldata inputData) external; +} + +interface DepositManagerProxyInterface { + function depositERC20ForUser( + address _token, + address _user, + uint256 _amount + ) external; +} + + +abstract contract Helpers is DSMath, Basic { + /** + * @dev Polygon POS Bridge ERC20 Predicate + */ + address internal constant erc20Predicate = 0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf; + + /** + * @dev Polygon POS Bridge Manager + */ + RootChainManagerInterface internal constant migrator = RootChainManagerInterface(0xA0c68C638235ee32657e8f720a23ceC1bFc77C77); + + /** + * @dev Polygon Plasma Bridge Manager + */ + DepositManagerProxyInterface internal constant migratorPlasma = DepositManagerProxyInterface(0x401F6c983eA34274ec46f84D70b31C151321188b); +} + +contract Events { + event LogDeposit( + address targetDsa, + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogWithdraw(bytes proof); +} + + +abstract contract PolygonBridgeResolver is Events, Helpers { + /** + * @dev Deposit assets to the bridge. + * @notice Deposit assets to the bridge. + * @param targetDsa The address to receive the token on Polygon + * @param token The address of the token to deposit. (For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of tokens to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposit. + */ + function deposit( + address targetDsa, + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) external payable { + uint _amt = getUint(getId, amt); + + if (token == ethAddr) { + _amt = _amt == uint(-1) ? address(this).balance : _amt; + migrator.depositEtherFor{value: _amt}(targetDsa); + } else { + TokenInterface _token = TokenInterface(token); + _amt = _amt == uint(-1) ? _token.balanceOf(address(this)) : _amt; + if (migrator.rootToChildToken(token) != address(0)) { + _token.approve(erc20Predicate, _amt); + migrator.depositFor(targetDsa, token, abi.encode(_amt)); + } else { + _token.approve(address(migratorPlasma), _amt); + migratorPlasma.depositERC20ForUser(token, targetDsa, _amt); + } + } + + setUint(setId, _amt); + emit LogDeposit(targetDsa, token, _amt, getId, setId); + } +} + +contract ConnectPolygonBridge is PolygonBridgeResolver { + /** + * @dev Connector Details + */ + function connectorID() public pure returns(uint _type, uint _id) { + (_type, _id) = (1, 100); + } + + string public constant name = "Polygon-Bridge-v1.1"; +} \ No newline at end of file diff --git a/docs/connectors.json b/docs/connectors.json index 6bbcbea2..8a75fb05 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -1,6 +1,6 @@ { "1" : { - "1INCH-A": "0x6C7256cf7C003dD85683339F75DdE9971f98f2FD", + "1INCH-A": "0x2A6d6d4EE84015F7D64B4d1F66a409bA3f2BAC00", "AAVE-V1-A": "0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14", "AAVE-V2-A": "0x497Bc53507DF17e60F731e9534cff74E8BC9DBb8", "AUTHORITY-A": "0x6CE3e607C808b4f4C26B7F6aDAeB619e49CAbb25", @@ -9,7 +9,7 @@ "COMPOUND-A": "0x911F4e4e762AeFA6F2Fc1b24e6B1A928200a88a8", "MAKERDAO-A": "0x839c2D3aDe63DF5b0b8F3E57D5e145057Ab41556", "UNISWAP-A": "0xA4BF319968986D2352FA1c550D781bBFCCE3FcaB", - "POLYGON-BRIDGE-A": "0x697860CeE594c577F18f71cAf3d8B68D913c7366", + "POLYGON-BRIDGE-A": "0x1b79B302132370B434fb7807b36CB72FB0510aD5", "AAVE-CLAIM-A": "0x611C1FA59Aa1d6352c4C8bD44882063c6aEE85E0", "AAVE-STAKE-A": "0xf73c94402bc24148b744083ed02654eec2c37d5b" }, @@ -19,4 +19,5 @@ "BASIC-A": "0x1cAF5EC802ca602E98139AD96A8f2B7BC524264E", "AAVE-CLAIM-A": "0xC7Cb1dE2721BFC0E0DA1b9D526bCdC54eF1C0eFC", "PARASWAP-A": "0xFb3a1D56eD56F046721B9aCa749895100754578b" + } } diff --git a/hardhat.config.js b/hardhat.config.js index b48aa2f3..d592c5f7 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -13,6 +13,10 @@ const { utils } = require("ethers"); const PRIVATE_KEY = process.env.PRIVATE_KEY; const ALCHEMY_ID = process.env.ALCHEMY_ID; +if (!process.env.ALCHEMY_ID) { + throw new Error("ENV Variable ALCHEMY_ID not set!"); +} + /** * @type import('hardhat/config').HardhatUserConfig */ @@ -43,7 +47,7 @@ module.exports = { url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, accounts: [`0x${PRIVATE_KEY}`], timeout: 150000, - gasPrice: parseInt(utils.parseUnits("132", "gwei")) + gasPrice: parseInt(utils.parseUnits("34", "gwei")) }, hardhat: { forking: { From 47ea4ffdff1d8a6cc143c01060c5b29d1ff31e97 Mon Sep 17 00:00:00 2001 From: Daksh Miglani Date: Fri, 4 Jun 2021 16:17:16 +0530 Subject: [PATCH 04/52] =?UTF-8?q?perf:=20=E2=9A=A1=EF=B8=8F=20add=20utils?= =?UTF-8?q?=20for=20adding=20liq,=20impersonating=20and=20master=20sign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/addLiquidity.js | 78 ++++++++++++++++++++++++++++++++++++++ scripts/getMasterSigner.js | 34 +++++++++-------- scripts/impersonate.js | 15 ++++++++ 3 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 scripts/addLiquidity.js create mode 100644 scripts/impersonate.js diff --git a/scripts/addLiquidity.js b/scripts/addLiquidity.js new file mode 100644 index 00000000..0fb51156 --- /dev/null +++ b/scripts/addLiquidity.js @@ -0,0 +1,78 @@ +const { ethers } = require("hardhat"); +const impersonateAccounts = require("./impersonate"); + +const mineTx = async (tx) => { + await (await tx).wait(); +}; + +const tokenMapping = { + usdc: { + impersonateSigner: "0xfcb19e6a322b27c06842a71e8c725399f049ae3a", + address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + abi: [ + "function mint(address _to, uint256 _amount) external returns (bool);", + ], + process: async function(owner, to, amt) { + const contract = new ethers.Contract(this.address, this.abi, owner); + + await mineTx(contract.mint(to, amt)); + }, + }, + dai: { + impersonateSigner: "0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503", + abi: ["function transfer(address to, uint value)"], + address: "0x6b175474e89094c44da98b954eedeac495271d0f", + process: async function(owner, to, amt) { + const contract = new ethers.Contract(this.address, this.abi, owner); + await mineTx(contract.transfer(to, amt)); + }, + }, + usdt: { + impersonateSigner: "0xc6cde7c39eb2f0f0095f41570af89efc2c1ea828", + address: "0xdac17f958d2ee523a2206206994597c13d831ec7", + abi: [ + "function issue(uint amount)", + "function transfer(address to, uint value)", + ], + process: async function(owner, address, amt) { + const contract = new ethers.Contract(this.address, this.abi, owner); + + await mineTx(contract.issue(amt)); + await mineTx(contract.transfer(address, amt)); + }, + }, + wbtc: { + impersonateSigner: "0xCA06411bd7a7296d7dbdd0050DFc846E95fEBEB7", + address: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + abi: ["function mint(address _to, uint256 _amount) public returns (bool)"], + process: async function(owner, address, amt) { + const contract = new ethers.Contract(this.address, this.abi, owner); + await mineTx(contract.mint(address, amt)); + }, + }, +}; + +module.exports = async (tokenName, address, amt) => { + const [signer] = await ethers.getSigners(); + tokenName = tokenName.toLowerCase(); + if (!tokenMapping[tokenName]) { + throw new Error( + "Add liquidity doesn't support the following token: ", + tokenName + ); + } + + const token = tokenMapping[tokenName]; + + const [impersonatedSigner] = await impersonateAccounts([ + token.impersonateSigner, + ]); + + // send 1 eth to cover any tx costs. + await signer.sendTransaction({ + to: impersonatedSigner.address, + value: ethers.utils.parseEther("1"), + }); + + await token.process(impersonatedSigner, address, amt); +}; diff --git a/scripts/getMasterSigner.js b/scripts/getMasterSigner.js index 5388f041..d0c19d6a 100644 --- a/scripts/getMasterSigner.js +++ b/scripts/getMasterSigner.js @@ -1,23 +1,25 @@ const hre = require("hardhat"); -const { ethers, waffle } = hre; +const { ethers } = hre; const addresses = require("./constant/addresses"); const abis = require("./constant/abis"); -const { provider, deployContract } = waffle +module.exports = async function() { + const [_, __, ___, wallet3] = await ethers.getSigners(); + const instaIndex = new ethers.Contract( + addresses.core.instaIndex, + abis.core.instaIndex, + wallet3 + ); -module.exports = async function () { - const instaIndex = await ethers.getContractAt(abis.core.instaIndex, addresses.core.instaIndex) + const masterAddress = await instaIndex.master(); // TODO: make it constant? + await hre.network.provider.request({ + method: "hardhat_impersonateAccount", + params: [masterAddress], + }); + await wallet3.sendTransaction({ + to: masterAddress, + value: ethers.utils.parseEther("10"), + }); - const masterAddress = await instaIndex.master(); // TODO: make it constant? - await hre.network.provider.request({ - method: "hardhat_impersonateAccount", - params: [ masterAddress] - }) - const [wallet0, wallet1, wallet2, wallet3] = await ethers.getSigners() - await wallet3.sendTransaction({ - to: masterAddress, - value: ethers.utils.parseEther("10") - }); - - return await ethers.getSigner(masterAddress); + return await ethers.getSigner(masterAddress); }; diff --git a/scripts/impersonate.js b/scripts/impersonate.js new file mode 100644 index 00000000..fb485cee --- /dev/null +++ b/scripts/impersonate.js @@ -0,0 +1,15 @@ +const { ethers, network } = require("hardhat"); + +module.exports = async (accounts) => { + const signers = []; + for (const account of accounts) { + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [account], + }); + + signers.push(await ethers.getSigner(account)); + } + + return signers; +}; From 678fd641fb59341cdb4c3568aecf6b77262c4760 Mon Sep 17 00:00:00 2001 From: Daksh Miglani Date: Fri, 4 Jun 2021 16:17:41 +0530 Subject: [PATCH 05/52] =?UTF-8?q?test:=20=F0=9F=92=8D=20add=20aave=20v1=20?= =?UTF-8?q?and=20v2=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hardhat.config.js | 3 + test/aave/v1.test.js | 151 +++++++++++++++++++++++ test/aave/v2.test.js | 214 +++++++++++++++++++++++++++++++++ test/compound/compound.test.js | 2 +- 4 files changed, 369 insertions(+), 1 deletion(-) create mode 100644 test/aave/v1.test.js create mode 100644 test/aave/v2.test.js diff --git a/hardhat.config.js b/hardhat.config.js index d592c5f7..45b17f9d 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -69,5 +69,8 @@ module.exports = { tenderly: { project: process.env.TENDERLY_PROJECT, username: process.env.TENDERLY_USERNAME, + }, + mocha: { + timeout: 100 * 1000 } }; diff --git a/test/aave/v1.test.js b/test/aave/v1.test.js new file mode 100644 index 00000000..aea2a222 --- /dev/null +++ b/test/aave/v1.test.js @@ -0,0 +1,151 @@ +const { expect } = require("chai"); +const hre = require("hardhat"); +const abis = require("../../scripts/constant/abis"); +const addresses = require("../../scripts/constant/addresses"); +const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector"); +const getMasterSigner = require("../../scripts/getMasterSigner"); +const buildDSAv2 = require("../../scripts/buildDSAv2"); +const ConnectV2AaveV1 = require("../../artifacts/contracts/mainnet/connectors/aave/v1/main.sol/ConnectV2AaveV1.json"); +const { parseEther } = require("@ethersproject/units"); +const encodeSpells = require("../../scripts/encodeSpells"); +const tokens = require("../../scripts/constant/tokens"); +const constants = require("../../scripts/constant/constant"); +const addLiquidity = require("../../scripts/addLiquidity"); +const { ethers } = hre; + +describe("Aave V1", function() { + const connectorName = "AAVEV1-TEST-A"; + + let wallet0, wallet1; + let dsaWallet0; + let instaConnectorsV2; + let connector; + let masterSigner; + + before(async () => { + [wallet0, wallet1] = await ethers.getSigners(); + masterSigner = await getMasterSigner(); + instaConnectorsV2 = await ethers.getContractAt( + abis.core.connectorsV2, + addresses.core.connectorsV2 + ); + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2AaveV1, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + console.log("Connector address", connector.address); + }); + + it("should have contracts deployed", async () => { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!masterSigner.address).to.be.true; + }); + + describe("DSA wallet setup", function() { + it("Should build DSA v2", async function() { + dsaWallet0 = await buildDSAv2(wallet0.address); + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit ETH into DSA wallet", async function() { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: parseEther("10"), + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + parseEther("10") + ); + }); + }); + + describe("Main", function() { + it("should deposit ETH in Aave V1", async function() { + const amt = parseEther("1"); + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, amt, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + + await tx.wait(); + + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.eq( + parseEther("9") + ); + }); + + it("Should borrow and payback DAI from Aave V1", async function() { + const amt = parseEther("100"); // 100 DAI + + // add a little amount of dai to cover any shortfalls + await addLiquidity("dai", dsaWallet0.address, parseEther("1")); + + const spells = [ + { + connector: connectorName, + method: "borrow", + args: [tokens.dai.address, amt, 0, 0], + }, + { + connector: connectorName, + method: "payback", + // FIXME: we need to pass max_value because of roundoff/shortfall errors + args: [tokens.dai.address, constants.max_value, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + }); + + it("Should deposit all ETH in Aave V1", async function() { + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, constants.max_value, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("0") + ); + }); + + it("Should withdraw all ETH from Aave V1", async function() { + const spells = [ + { + connector: connectorName, + method: "withdraw", + args: [tokens.eth.address, constants.max_value, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("10") + ); + }); + }); +}); diff --git a/test/aave/v2.test.js b/test/aave/v2.test.js new file mode 100644 index 00000000..09b023e6 --- /dev/null +++ b/test/aave/v2.test.js @@ -0,0 +1,214 @@ +const { expect } = require("chai"); +const hre = require("hardhat"); +const abis = require("../../scripts/constant/abis"); +const addresses = require("../../scripts/constant/addresses"); +const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector"); +const getMasterSigner = require("../../scripts/getMasterSigner"); +const buildDSAv2 = require("../../scripts/buildDSAv2"); +const ConnectV2AaveV2 = require("../../artifacts/contracts/mainnet/connectors/aave/v2/main.sol/ConnectV2AaveV2.json"); +const { parseEther } = require("@ethersproject/units"); +const encodeSpells = require("../../scripts/encodeSpells"); +const tokens = require("../../scripts/constant/tokens"); +const constants = require("../../scripts/constant/constant"); +const addLiquidity = require("../../scripts/addLiquidity"); +const { ethers } = hre; + +describe("Aave V2", function() { + const connectorName = "AAVEV2-TEST-A"; + + let wallet0, wallet1; + let dsaWallet0; + let instaConnectorsV2; + let connector; + let masterSigner; + + before(async () => { + [wallet0, wallet1] = await ethers.getSigners(); + masterSigner = await getMasterSigner(); + instaConnectorsV2 = await ethers.getContractAt( + abis.core.connectorsV2, + addresses.core.connectorsV2 + ); + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: ConnectV2AaveV2, + signer: masterSigner, + connectors: instaConnectorsV2, + }); + console.log("Connector address", connector.address); + }); + + it("should have contracts deployed", async () => { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!masterSigner.address).to.be.true; + }); + + describe("DSA wallet setup", function() { + it("Should build DSA v2", async function() { + dsaWallet0 = await buildDSAv2(wallet0.address); + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit ETH into DSA wallet", async function() { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: parseEther("10"), + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + parseEther("10") + ); + }); + }); + + describe("Main", function() { + it("should deposit ETH in Aave V2", async function() { + const amt = parseEther("1"); + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, amt, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + + await tx.wait(); + + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.eq( + parseEther("9") + ); + }); + + it("Should borrow and payback DAI from Aave V2", async function() { + const amt = parseEther("100"); // 100 DAI + const setId = "83478237"; + const spells = [ + { + connector: connectorName, + method: "borrow", + args: [tokens.dai.address, amt, 2, 0, setId], + }, + { + connector: connectorName, + method: "payback", + args: [tokens.dai.address, amt, 2, setId, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + }); + + it("Should borrow and payback half DAI from Aave V2", async function() { + const amt = parseEther("100"); // 100 DAI + // const setId = "83478237"; + await addLiquidity("dai", dsaWallet0.address, parseEther("1")); + let spells = [ + { + connector: connectorName, + method: "borrow", + args: [tokens.dai.address, amt, 2, 0, 0], + }, + { + connector: connectorName, + method: "payback", + args: [tokens.dai.address, amt.div(2), 2, 0, 0], + }, + ]; + + let tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + + spells = [ + { + connector: connectorName, + method: "payback", + args: [tokens.dai.address, constants.max_value, 2, 0, 0], + }, + ]; + + tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("9") + ); + }); + + it("Should deposit all ETH in Aave V2", async function() { + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, constants.max_value, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte( + ethers.utils.parseEther("0") + ); + }); + + it("Should withdraw all ETH from Aave V2", async function() { + const spells = [ + { + connector: connectorName, + method: "withdraw", + args: [tokens.eth.address, constants.max_value, 0, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("10") + ); + }); + + it("should deposit and withdraw", async () => { + const amt = parseEther("1"); // 1 eth + const setId = "834782373"; + const spells = [ + { + connector: connectorName, + method: "deposit", + args: [tokens.eth.address, amt, 0, setId], + }, + { + connector: connectorName, + method: "withdraw", + args: [tokens.eth.address, amt, setId, 0], + }, + ]; + + const tx = await dsaWallet0 + .connect(wallet0) + .cast(...encodeSpells(spells), wallet1.address); + await tx.wait(); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte( + ethers.utils.parseEther("10") + ); + }); + }); +}); diff --git a/test/compound/compound.test.js b/test/compound/compound.test.js index a3b79965..d1c77475 100644 --- a/test/compound/compound.test.js +++ b/test/compound/compound.test.js @@ -124,4 +124,4 @@ describe("Compound", function () { expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); }); }) -}) \ No newline at end of file +}) From 5656c94717b073b4f4bcb8e22bc216ce8a0f9a99 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Mon, 7 Jun 2021 23:32:13 +0530 Subject: [PATCH 06/52] Uniswap v3 erc20 pool basic setup done --- .../connectors/uniswap_v3_erc20/events.sol | 4 + .../connectors/uniswap_v3_erc20/helpers.sol | 10 +++ .../connectors/uniswap_v3_erc20/interface.sol | 53 ++++++++++++ .../connectors/uniswap_v3_erc20/main.sol | 86 +++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20/events.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20/main.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol new file mode 100644 index 00000000..435e3220 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol @@ -0,0 +1,4 @@ +pragma solidity ^0.7.0; + +contract Events { +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol new file mode 100644 index 00000000..f5254277 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol @@ -0,0 +1,10 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { ListInterface } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + +} diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol new file mode 100644 index 00000000..863a8344 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol @@ -0,0 +1,53 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +interface ERC20WrapperInterface { + + function token0() external view returns (IERC20); + + function token1() external view returns (IERC20); + + function mint( + uint256 amount0Max, + uint256 amount1Max, + address receiver + ) external + returns ( + uint256 amount0, + uint256 amount1, + uint256 mintAmount + ); + + function burn( + uint256 _burnAmount, + address _receiver + ) external + returns ( + uint256 amount0, + uint256 amount1, + uint128 liquidityBurned + ); + + function getMintAmounts( + uint256 amount0Max, + uint256 amount1Max + ) external view + returns ( + uint256 amount0, + uint256 amount1, + uint256 mintAmount + ); + +} + +interface TokenInterface { + function approve(address, uint256) external; + function transfer(address, uint) external; + function transferFrom(address, address, uint) external; + function deposit() external payable; + function withdraw(uint) external; + function balanceOf(address) external view returns (uint); + function decimals() external view returns (uint); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol new file mode 100644 index 00000000..08dc54f6 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -0,0 +1,86 @@ +pragma solidity ^0.7.0; + +/** + * @title Authority. + * @dev Manage Authorities to DSA. + */ + +import { ERC20WrapperInterface, IERC20, TokenInterface } from "../../common/interfaces.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; + +abstract contract AuthorityResolver is Events, Helpers { + + function deposit( + address pool, + uint256 amt0Max, + uint256 amt0Min, + uint256 amt1Max, + uint256 amt1Min, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + + ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); + + (uint256 amount0In, uint256 amount1In, ) = poolContract.getMintAmounts(amt0Max, amt1Max); + + require( + amount0In >= amount0Min && amount1In >= amount1Min, + "below min amounts" + ); + + if (amount0In > 0) { + IERC20 _token0 = pool.token0(); + convertEthToWeth(address(_token0) == wethAddr, TokenInterface(address(_token0)), amount0In); + _token0.safeAllowance(address(pool), amount0In); + } + if (amount1In > 0) { + IERC20 _token1 = pool.token0(); + convertEthToWeth(address(_token1) == wethAddr, TokenInterface(address(_token1)), amount1In); + _token1.safeAllowance(address(pool), amount1In); + } + + (uint amount0, uint amount1, uint mintAmount) = poolContract.mint(amount0In, amount1In, address(this)); + + require(amount0 == amount0In && amount1 == amount1In, "unexpected amounts deposited"); + + // TODO: Add event + } + + function withdraw( + address pool, + uint256 liqAmt, + uint256 minAmtA, + uint256 minAmtB, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + + ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); + + (uint amount0, uint amount1, uint128 liquidityBurned) = poolContract.burn(liqAmt, address(this)); + + if (amount0 > 0) { + IERC20 _token0 = poolContract.token0(); + convertWethToEth(address(_token0) == wethAddr, TokenInterface(address(_token0)), _amt); + } + + if (amount1 > 0) { + IERC20 _token1 = poolContract.token0(); + convertWethToEth(address(_token1) == wethAddr, TokenInterface(address(_token1)), _amt); + } + + require(amount0 >= minAmtA && amount1 >= minAmtB, "received below minimum"); + + // TODO: Add event + + } + +} + +contract ConnectV2Auth is AuthorityResolver { + + string public constant name = "Uniswap-v3-erc20"; + +} From 9b69841fec2e310b831bf528895c9aae0e252cb5 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 8 Jun 2021 00:20:44 +0530 Subject: [PATCH 07/52] added events --- .../connectors/uniswap_v3_erc20/events.sol | 19 +++++++++++++++++++ .../connectors/uniswap_v3_erc20/main.sol | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol index 435e3220..56809dc1 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol @@ -1,4 +1,23 @@ pragma solidity ^0.7.0; contract Events { + + event LogDepositLiquidity( + address indexed pool, + uint256 amtA, + uint256 amtB, + uint256 uniAmount, + uint256 getId, + uint256 setId + ); + + event LogWithdrawLiquidity( + address indexed pool, + uint256 amountA, + uint256 amountB, + uint256 uniAmount, + uint256 getId, + uint256 setId + ); + } \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 08dc54f6..1fd8aa83 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -45,7 +45,8 @@ abstract contract AuthorityResolver is Events, Helpers { require(amount0 == amount0In && amount1 == amount1In, "unexpected amounts deposited"); - // TODO: Add event + _eventName = "LogDepositLiquidity(address,uint256,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(pool, amount0, amount1, mintAmount, getId, setId); } function withdraw( @@ -73,7 +74,8 @@ abstract contract AuthorityResolver is Events, Helpers { require(amount0 >= minAmtA && amount1 >= minAmtB, "received below minimum"); - // TODO: Add event + _eventName = "LogWithdrawLiquidity(address,uint256,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setId); } From 2476cc4390033912d0b3d3cd500f0f2bbb0f502e Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 8 Jun 2021 00:21:31 +0530 Subject: [PATCH 08/52] Update contracts/mainnet/connectors/uniswap_v3_erc20/main.sol Co-authored-by: Thrilok kumar --- contracts/mainnet/connectors/uniswap_v3_erc20/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 1fd8aa83..71b9010d 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -36,7 +36,7 @@ abstract contract AuthorityResolver is Events, Helpers { _token0.safeAllowance(address(pool), amount0In); } if (amount1In > 0) { - IERC20 _token1 = pool.token0(); + IERC20 _token1 = pool.token1(); convertEthToWeth(address(_token1) == wethAddr, TokenInterface(address(_token1)), amount1In); _token1.safeAllowance(address(pool), amount1In); } From 927e1e2f1ccd4918c22e8e5aef6b0fb2970aa57c Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 8 Jun 2021 00:21:41 +0530 Subject: [PATCH 09/52] Update contracts/mainnet/connectors/uniswap_v3_erc20/main.sol Co-authored-by: Thrilok kumar --- contracts/mainnet/connectors/uniswap_v3_erc20/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 71b9010d..3ee00d8e 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -68,7 +68,7 @@ abstract contract AuthorityResolver is Events, Helpers { } if (amount1 > 0) { - IERC20 _token1 = poolContract.token0(); + IERC20 _token1 = poolContract.token1(); convertWethToEth(address(_token1) == wethAddr, TokenInterface(address(_token1)), _amt); } From 22ebfac88da9030c1127b8cdd6c7f0e660dd68bd Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 8 Jun 2021 00:22:34 +0530 Subject: [PATCH 10/52] minor fix --- contracts/mainnet/connectors/uniswap_v3_erc20/main.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 3ee00d8e..dba1fd15 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -64,12 +64,12 @@ abstract contract AuthorityResolver is Events, Helpers { if (amount0 > 0) { IERC20 _token0 = poolContract.token0(); - convertWethToEth(address(_token0) == wethAddr, TokenInterface(address(_token0)), _amt); + convertWethToEth(address(_token0) == wethAddr, TokenInterface(address(_token0)), amount0); } if (amount1 > 0) { IERC20 _token1 = poolContract.token1(); - convertWethToEth(address(_token1) == wethAddr, TokenInterface(address(_token1)), _amt); + convertWethToEth(address(_token1) == wethAddr, TokenInterface(address(_token1)), amount1); } require(amount0 >= minAmtA && amount1 >= minAmtB, "received below minimum"); From 8067874d214029b7dd25257392e4e37df0b95d99 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Tue, 8 Jun 2021 00:46:32 +0530 Subject: [PATCH 11/52] Fixes --- .../connectors/uniswap_v3_erc20/helpers.sol | 1 - .../connectors/uniswap_v3_erc20/main.sol | 49 ++++++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol index f5254277..5315ccbe 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol @@ -3,7 +3,6 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; -import { ListInterface } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index dba1fd15..2bc54116 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -1,16 +1,31 @@ pragma solidity ^0.7.0; /** - * @title Authority. - * @dev Manage Authorities to DSA. + * @title Uniswap V3 ERC20 Wrapper. + * @dev Uniswap V3 Wrapper to deposit and withdraw. */ -import { ERC20WrapperInterface, IERC20, TokenInterface } from "../../common/interfaces.sol"; +import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; + +import { TokenInterface } from "../../common/interfaces.sol"; +import { ERC20WrapperInterface, IERC20 } from "./interface.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -abstract contract AuthorityResolver is Events, Helpers { +abstract contract UniswapV3Resolver is Events, Helpers { + using SafeERC20 for IERC20; + /** + * @dev Deposit Liquidity. + * @notice Deposit Liquidity to a Uniswap V3 pool. + * @param pool The address of pool. + * @param amt0Max Amount0 Max amount + * @param amt0Min Amount0 Min amount + * @param amt1Max Amount1 Max amount + * @param amt1Min Amount1 Min amount + * @param getId ID to retrieve amount. + * @param setId ID stores the amount of pools tokens received. + */ function deposit( address pool, uint256 amt0Max, @@ -26,19 +41,19 @@ abstract contract AuthorityResolver is Events, Helpers { (uint256 amount0In, uint256 amount1In, ) = poolContract.getMintAmounts(amt0Max, amt1Max); require( - amount0In >= amount0Min && amount1In >= amount1Min, + amount0In >= amt0Min && amount1In >= amt1Min, "below min amounts" ); if (amount0In > 0) { - IERC20 _token0 = pool.token0(); + IERC20 _token0 = poolContract.token0(); convertEthToWeth(address(_token0) == wethAddr, TokenInterface(address(_token0)), amount0In); - _token0.safeAllowance(address(pool), amount0In); + _token0.safeApprove(address(pool), amount0In); } if (amount1In > 0) { - IERC20 _token1 = pool.token1(); + IERC20 _token1 = poolContract.token1(); convertEthToWeth(address(_token1) == wethAddr, TokenInterface(address(_token1)), amount1In); - _token1.safeAllowance(address(pool), amount1In); + _token1.safeApprove(address(pool), amount1In); } (uint amount0, uint amount1, uint mintAmount) = poolContract.mint(amount0In, amount1In, address(this)); @@ -49,6 +64,17 @@ abstract contract AuthorityResolver is Events, Helpers { _eventParam = abi.encode(pool, amount0, amount1, mintAmount, getId, setId); } + + /** + * @dev Withdraw Liquidity. + * @notice Withdraw Liquidity from a Uniswap V3 pool. + * @param pool The address of pool. + * @param liqAmt Amount0 Max amount + * @param minAmtA Min AmountA amount + * @param minAmtB Min AmountB amount + * @param getId ID to retrieve liqAmt. + * @param setId ID stores the amount of pools tokens received. + */ function withdraw( address pool, uint256 liqAmt, @@ -76,13 +102,12 @@ abstract contract AuthorityResolver is Events, Helpers { _eventName = "LogWithdrawLiquidity(address,uint256,uint256,uint256,uint256,uint256)"; _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setId); - } } -contract ConnectV2Auth is AuthorityResolver { +contract ConnectV2UniswapV3ERC20 is UniswapV3Resolver { - string public constant name = "Uniswap-v3-erc20"; + string public constant name = "Uniswap-v3-ERC20"; } From 1c6c7bc358af011c663e3967a217b223f54a5e3d Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 8 Jun 2021 02:04:38 +0530 Subject: [PATCH 12/52] new updates --- contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol | 3 +-- contracts/mainnet/connectors/uniswap_v3_erc20/main.sol | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol index 863a8344..72f7d59a 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol @@ -10,8 +10,7 @@ interface ERC20WrapperInterface { function token1() external view returns (IERC20); function mint( - uint256 amount0Max, - uint256 amount1Max, + uint256 mintAmount, address receiver ) external returns ( diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 2bc54116..8ca85a01 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -38,7 +38,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); - (uint256 amount0In, uint256 amount1In, ) = poolContract.getMintAmounts(amt0Max, amt1Max); + (uint256 amount0In, uint256 amount1In, uint256 mintAmount) = poolContract.getMintAmounts(amt0Max, amt1Max); require( amount0In >= amt0Min && amount1In >= amt1Min, @@ -56,7 +56,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { _token1.safeApprove(address(pool), amount1In); } - (uint amount0, uint amount1, uint mintAmount) = poolContract.mint(amount0In, amount1In, address(this)); + (uint amount0, uint amount1,) = poolContract.mint(mintAmount, address(this)); require(amount0 == amount0In && amount1 == amount1In, "unexpected amounts deposited"); From 2bd7492e56c564e88e7edb922e27a37ed9c0d553 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 03:00:34 +0530 Subject: [PATCH 13/52] Gelato connector updated with swap & mint --- .../connectors/uniswap_v3_erc20/events.sol | 15 +++- .../connectors/uniswap_v3_erc20/helpers.sol | 4 ++ .../connectors/uniswap_v3_erc20/interface.sol | 68 +++++++++++++++++++ .../connectors/uniswap_v3_erc20/main.sol | 64 +++++++++++++++++ 4 files changed, 149 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol index 56809dc1..a50c8386 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol @@ -6,7 +6,7 @@ contract Events { address indexed pool, uint256 amtA, uint256 amtB, - uint256 uniAmount, + uint256 mintAmount, uint256 getId, uint256 setId ); @@ -15,7 +15,18 @@ contract Events { address indexed pool, uint256 amountA, uint256 amountB, - uint256 uniAmount, + uint256 burnAmount, + uint256 getId, + uint256 setId + ); + + event LogSwapAndDepositLiquidity( + address indexed pool, + uint256 amtA, + uint256 amtB, + uint256 mintAmount, + bool zeroForOne, + uint swapAmount, uint256 getId, uint256 setId ); diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol index 5315ccbe..006c91e6 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol @@ -4,6 +4,10 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; +import { IGUniRouter } from "./interface.sol"; + abstract contract Helpers is DSMath, Basic { + + IGUniRouter public constant gUniRouter = IGUniRouter(0x8CA6fa325bc32f86a12cC4964Edf1f71655007A7); } diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol index 72f7d59a..503774fe 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol @@ -41,6 +41,74 @@ interface ERC20WrapperInterface { } + +interface IGUniRouter { + function rebalanceAndAddLiquidity( + IGUniPool pool, + uint256 amount0In, + uint256 amount1In, + bool zeroForOne, + uint256 swapAmount, + uint160 swapThreshold, + uint256 amount0Min, + uint256 amount1Min, + address receiver + ) + external + returns ( + uint256 amount0, + uint256 amount1, + uint256 mintAmount + ); + + function rebalanceAndAddLiquidityETH( + IGUniPool pool, + uint256 amount0In, + uint256 amount1In, + bool zeroForOne, + uint256 swapAmount, + uint160 swapThreshold, + uint256 amount0Min, + uint256 amount1Min, + address receiver + ) + external + payable + returns ( + uint256 amount0, + uint256 amount1, + uint256 mintAmount + ); + + function removeLiquidity( + IGUniPool pool, + uint256 burnAmount, + uint256 amount0Min, + uint256 amount1Min, + address receiver + ) + external + returns ( + uint256 amount0, + uint256 amount1, + uint128 liquidityBurned + ); + + function removeLiquidityETH( + IGUniPool pool, + uint256 burnAmount, + uint256 amount0Min, + uint256 amount1Min, + address payable receiver + ) + external + returns ( + uint256 amount0, + uint256 amount1, + uint128 liquidityBurned + ); +} + interface TokenInterface { function approve(address, uint256) external; function transfer(address, uint) external; diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index 8ca85a01..df148a5a 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -104,6 +104,70 @@ abstract contract UniswapV3Resolver is Events, Helpers { _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setId); } + function swapAndDeposit( + address pool, + uint256 amount0In, + uint256 amount1In, + bool zeroForOne, + uint256 swapAmount, + uint160 swapThreshold + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + + ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); + IERC20 _token0 = poolContract.token0(); + IERC20 _token1 = poolContract.token1(); + + uint amount0; + uint amount1; + uint mintAmount; + + if (address(_token0) == wethAddr) { + _token1.approve(address(gUniRouter), amount1In); + (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidityETH{value: amount0In}( + poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); + } else if (address(_token1) == wethAddr) { + _token0.approve(address(gUniRouter), amount0In); + (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidityETH{value: amount1In}( + poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); + } else { + _token0.approve(address(gUniRouter), amount0In); + _token1.approve(address(gUniRouter), amount1In); + (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidity( + poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); + } + + _eventName = "LogSwapAndDepositLiquidity(address,uint256,uint256,uint256,bool,uint256,uint256,uint256)"; + _eventParam = abi.encode(pool, amount0, amount1, mintAmount, zeroForOne, swapAmount, getId, setId); + + } + } contract ConnectV2UniswapV3ERC20 is UniswapV3Resolver { From a483299e5030da62245b2d80eadeaa99cc48e8ec Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 16:44:38 +0530 Subject: [PATCH 14/52] added slippage on deposit --- contracts/mainnet/connectors/uniswap_v3_erc20/main.sol | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index df148a5a..fb3e208c 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -20,18 +20,16 @@ abstract contract UniswapV3Resolver is Events, Helpers { * @notice Deposit Liquidity to a Uniswap V3 pool. * @param pool The address of pool. * @param amt0Max Amount0 Max amount - * @param amt0Min Amount0 Min amount * @param amt1Max Amount1 Max amount - * @param amt1Min Amount1 Min amount + * @param slippage use to calculate minimum deposit. 100% = 1e18 * @param getId ID to retrieve amount. * @param setId ID stores the amount of pools tokens received. */ function deposit( address pool, uint256 amt0Max, - uint256 amt0Min, uint256 amt1Max, - uint256 amt1Min, + uint slippage, uint256 getId, uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { @@ -40,6 +38,9 @@ abstract contract UniswapV3Resolver is Events, Helpers { (uint256 amount0In, uint256 amount1In, uint256 mintAmount) = poolContract.getMintAmounts(amt0Max, amt1Max); + uint amt0Min = wmul(amt0Max, slippage); + uint amt1Min = wmul(amt1Max, slippage); + require( amount0In >= amt0Min && amount1In >= amt1Min, "below min amounts" From dbcf960bf987b36ef6f616974fef9e16e3336479 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 16:56:05 +0530 Subject: [PATCH 15/52] updated connector with setId & getId --- .../connectors/uniswap_v3_erc20/events.sol | 4 +-- .../connectors/uniswap_v3_erc20/main.sol | 28 ++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol index a50c8386..e5ed811d 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol @@ -7,7 +7,7 @@ contract Events { uint256 amtA, uint256 amtB, uint256 mintAmount, - uint256 getId, + uint256[] getIds, uint256 setId ); @@ -17,7 +17,7 @@ contract Events { uint256 amountB, uint256 burnAmount, uint256 getId, - uint256 setId + uint256[] setIds ); event LogSwapAndDepositLiquidity( diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index fb3e208c..f34ff8da 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -30,10 +30,13 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 amt0Max, uint256 amt1Max, uint slippage, - uint256 getId, + uint256[] getIds, uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { + amt0Max = getUint(getIds[0], amt0Max); + amt1Max = getUint(getIds[1], amt1Max); + ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); (uint256 amount0In, uint256 amount1In, uint256 mintAmount) = poolContract.getMintAmounts(amt0Max, amt1Max); @@ -61,8 +64,10 @@ abstract contract UniswapV3Resolver is Events, Helpers { require(amount0 == amount0In && amount1 == amount1In, "unexpected amounts deposited"); - _eventName = "LogDepositLiquidity(address,uint256,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(pool, amount0, amount1, mintAmount, getId, setId); + setUint(setId, mintAmount); + + _eventName = "LogDepositLiquidity(address,uint256,uint256,uint256,uint256[],uint256)"; + _eventParam = abi.encode(pool, amount0, amount1, mintAmount, getIds, setId); } @@ -82,9 +87,11 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 minAmtA, uint256 minAmtB, uint256 getId, - uint256 setId + uint256[] setIds ) external payable returns (string memory _eventName, bytes memory _eventParam) { + liqAmt = getUint(getId, liqAmt); + ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); (uint amount0, uint amount1, uint128 liquidityBurned) = poolContract.burn(liqAmt, address(this)); @@ -101,8 +108,11 @@ abstract contract UniswapV3Resolver is Events, Helpers { require(amount0 >= minAmtA && amount1 >= minAmtB, "received below minimum"); - _eventName = "LogWithdrawLiquidity(address,uint256,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setId); + setUint(setIds[0], amount0); + setUint(setIds[1], amount1); + + _eventName = "LogWithdrawLiquidity(address,uint256,uint256,uint256,uint256,uint256[])"; + _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setIds); } function swapAndDeposit( @@ -111,7 +121,9 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 amount1In, bool zeroForOne, uint256 swapAmount, - uint160 swapThreshold + uint160 swapThreshold, + uint256 getId, + uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); @@ -164,6 +176,8 @@ abstract contract UniswapV3Resolver is Events, Helpers { ); } + setUint(setId, mintAmount); + _eventName = "LogSwapAndDepositLiquidity(address,uint256,uint256,uint256,bool,uint256,uint256,uint256)"; _eventParam = abi.encode(pool, amount0, amount1, mintAmount, zeroForOne, swapAmount, getId, setId); From 1cc2e4ba1a7771556b41aaaeabea6fa2fe0015cf Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 17:26:39 +0530 Subject: [PATCH 16/52] staking connector added --- .../connectors/erc20_staking/events.sol | 28 +++++ .../connectors/erc20_staking/helpers.sol | 47 ++++++++ .../connectors/erc20_staking/interface.sol | 21 ++++ .../mainnet/connectors/erc20_staking/main.sol | 108 ++++++++++++++++++ 4 files changed, 204 insertions(+) create mode 100644 contracts/mainnet/connectors/erc20_staking/events.sol create mode 100644 contracts/mainnet/connectors/erc20_staking/helpers.sol create mode 100644 contracts/mainnet/connectors/erc20_staking/interface.sol create mode 100644 contracts/mainnet/connectors/erc20_staking/main.sol diff --git a/contracts/mainnet/connectors/erc20_staking/events.sol b/contracts/mainnet/connectors/erc20_staking/events.sol new file mode 100644 index 00000000..9c0cc2f4 --- /dev/null +++ b/contracts/mainnet/connectors/erc20_staking/events.sol @@ -0,0 +1,28 @@ +pragma solidity ^0.7.0; + +contract Events { + + event LogDeposit( + address indexed stakingToken, + bytes32 indexed stakingType, + uint256 amount, + uint getId, + uint setId + ); + + event LogWithdraw( + address indexed stakingToken, + bytes32 indexed stakingType, + uint256 amount, + uint getId, + uint setId + ); + + event LogClaimedReward( + address indexed rewardToken, + bytes32 indexed stakingType, + uint256 rewardAmt, + uint setId + ); + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/erc20_staking/helpers.sol b/contracts/mainnet/connectors/erc20_staking/helpers.sol new file mode 100644 index 00000000..73f405c5 --- /dev/null +++ b/contracts/mainnet/connectors/erc20_staking/helpers.sol @@ -0,0 +1,47 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { IStakingRewards, SynthetixMapping } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + + /** + * @dev Convert String to bytes32. + */ + function stringToBytes32(string memory str) internal pure returns (bytes32 result) { + require(bytes(str).length != 0, "string-empty"); + // solium-disable-next-line security/no-inline-assembly + assembly { + result := mload(add(str, 32)) + } + } + + /** + * @dev Get staking data + */ + function getStakingData(string memory stakingName) + internal + view + returns ( + IStakingRewards stakingContract, + TokenInterface stakingToken, + TokenInterface rewardToken, + bytes32 stakingType + ) + { + stakingType = stringToBytes32(stakingName); + SynthetixMapping.StakingData memory stakingData = SynthetixMapping(getMappingAddr()).stakingMapping(stakingType); + require(stakingData.stakingPool != address(0) && stakingData.stakingToken != address(0), "Wrong Staking Name"); + stakingContract = IStakingRewards(stakingData.stakingPool); + stakingToken = TokenInterface(stakingData.stakingToken); + rewardToken = TokenInterface(stakingData.rewardToken); + } + + function getMappingAddr() internal virtual view returns (address) { + return 0x772590F33eD05b0E83553650BF9e75A04b337526; // InstaMapping Address + } + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/erc20_staking/interface.sol b/contracts/mainnet/connectors/erc20_staking/interface.sol new file mode 100644 index 00000000..dad42611 --- /dev/null +++ b/contracts/mainnet/connectors/erc20_staking/interface.sol @@ -0,0 +1,21 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +interface IStakingRewards { + function stake(uint256 amount) external; + function withdraw(uint256 amount) external; + function getReward() external; + function balanceOf(address) external view returns(uint); +} + +interface SynthetixMapping { + + struct StakingData { + address stakingPool; + address stakingToken; + address rewardToken; + } + + function stakingMapping(bytes32) external view returns(StakingData memory); + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/erc20_staking/main.sol b/contracts/mainnet/connectors/erc20_staking/main.sol new file mode 100644 index 00000000..513c4bf5 --- /dev/null +++ b/contracts/mainnet/connectors/erc20_staking/main.sol @@ -0,0 +1,108 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + + +import { TokenInterface } from "../../common/interfaces.sol"; +import { Stores } from "../../common/stores.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; +import { IStakingRewards, SynthetixMapping } from "./interface.sol"; + +contract Main { + + /** + * @dev Deposit Token. + * @param stakingPoolName staking token address. + * @param amt staking token amount. + * @param getId Get token amount at this ID from `InstaMemory` Contract. + * @param setId Set token amount at this ID in `InstaMemory` Contract. + */ + function deposit( + string calldata stakingPoolName, + uint amt, + uint getId, + uint setId + ) external payable { + uint _amt = getUint(getId, amt); + ( + IStakingRewards stakingContract, + TokenInterface stakingToken, + , + bytes32 stakingType + ) = getStakingData(stakingPoolName); + + _amt = _amt == uint(-1) ? stakingToken.balanceOf(address(this)) : _amt; + + stakingToken.approve(address(stakingContract), _amt); + stakingContract.stake(_amt); + + setUint(setId, _amt); + emit LogDeposit(address(stakingToken), stakingType, _amt, getId, setId); + } + + /** + * @dev Withdraw Token. + * @param stakingPoolName staking token address. + * @param amt staking token amount. + * @param getId Get token amount at this ID from `InstaMemory` Contract. + * @param setIdAmount Set token amount at this ID in `InstaMemory` Contract. + * @param setIdReward Set reward amount at this ID in `InstaMemory` Contract. + */ + function withdraw( + string calldata stakingPoolName, + uint amt, + uint getId, + uint setIdAmount, + uint setIdReward + ) external payable { + uint _amt = getUint(getId, amt); + ( + IStakingRewards stakingContract, + TokenInterface stakingToken, + TokenInterface rewardToken, + bytes32 stakingType + ) = getStakingData(stakingPoolName); + + _amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt; + uint intialBal = rewardToken.balanceOf(address(this)); + stakingContract.withdraw(_amt); + stakingContract.getReward(); + uint finalBal = rewardToken.balanceOf(address(this)); + + uint rewardAmt = sub(finalBal, intialBal); + + setUint(setIdAmount, _amt); + setUint(setIdReward, rewardAmt); + + emit LogWithdraw(address(stakingToken), stakingType, _amt, getId, setIdAmount); + + emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setIdReward); + } + + /** + * @dev Claim Reward. + * @param stakingPoolName staking token address. + * @param setId Set reward amount at this ID in `InstaMemory` Contract. + */ + function claimReward( + string calldata stakingPoolName, + uint setId + ) external payable { + ( + IStakingRewards stakingContract, + , + TokenInterface rewardToken, + bytes32 stakingType + ) = getStakingData(stakingPoolName); + + uint intialBal = rewardToken.balanceOf(address(this)); + stakingContract.getReward(); + uint finalBal = rewardToken.balanceOf(address(this)); + + uint rewardAmt = sub(finalBal, intialBal); + + setUint(setId, rewardAmt); + emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setId); + } + +} \ No newline at end of file From ef5c6e9edb26ebe60e9bf2c9968d74e7a90390da Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 19:45:21 +0530 Subject: [PATCH 17/52] added comments on connector --- .../mainnet/connectors/uniswap_v3_erc20/main.sol | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index f34ff8da..f18e0400 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -17,7 +17,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { /** * @dev Deposit Liquidity. - * @notice Deposit Liquidity to a Uniswap V3 pool. + * @notice Deposit Liquidity to Gelato Uniswap V3 pool. * @param pool The address of pool. * @param amt0Max Amount0 Max amount * @param amt1Max Amount1 Max amount @@ -73,7 +73,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { /** * @dev Withdraw Liquidity. - * @notice Withdraw Liquidity from a Uniswap V3 pool. + * @notice Withdraw Liquidity from Gelato Uniswap V3 pool. * @param pool The address of pool. * @param liqAmt Amount0 Max amount * @param minAmtA Min AmountA amount @@ -115,6 +115,18 @@ abstract contract UniswapV3Resolver is Events, Helpers { _eventParam = abi.encode(pool, amount0, amount1, uint256(liquidityBurned), getId, setIds); } + /** + * @dev Swap & Deposit Liquidity. + * @notice Withdraw Liquidity to Gelato Uniswap V3 pool. + * @param pool The address of pool. + * @param amount0In amount of token0 to deposit. + * @param amount1In amount of token1 to deposit. + * @param zeroForOne Swap excess of one token to deposit in equal ratio. + * @param swapAmount Amount of tokens to swap + * @param swapThreshold Slippage that the swap could take. + * @param getId Not used anywhere here. + * @param setId Set the amount of tokens minted. + */ function swapAndDeposit( address pool, uint256 amount0In, From 7e6b83e5fec510f4d404f29e2a83c89aff7c75ef Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Thu, 10 Jun 2021 21:55:57 +0530 Subject: [PATCH 18/52] updated stake mapping --- contracts/mainnet/connectors/erc20_staking/helpers.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/erc20_staking/helpers.sol b/contracts/mainnet/connectors/erc20_staking/helpers.sol index 73f405c5..674b2de9 100644 --- a/contracts/mainnet/connectors/erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/erc20_staking/helpers.sol @@ -41,7 +41,7 @@ abstract contract Helpers is DSMath, Basic { } function getMappingAddr() internal virtual view returns (address) { - return 0x772590F33eD05b0E83553650BF9e75A04b337526; // InstaMapping Address + return 0x4a56E4209F0757CE630a2ebCF45DCe5BAfcb9782; // InstaMapping Address } } \ No newline at end of file From f2d163c8aeec8c79e9e92130c2e8e0ecf03d7132 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 10 Jun 2021 23:27:27 +0530 Subject: [PATCH 19/52] Minor changes --- .../connectors/erc20_staking/events.sol | 6 ++- .../mainnet/connectors/erc20_staking/main.sol | 51 ++++++++++++------- .../connectors/uniswap_v3_erc20/main.sol | 14 +++-- 3 files changed, 42 insertions(+), 29 deletions(-) diff --git a/contracts/mainnet/connectors/erc20_staking/events.sol b/contracts/mainnet/connectors/erc20_staking/events.sol index 9c0cc2f4..a8b5ce2d 100644 --- a/contracts/mainnet/connectors/erc20_staking/events.sol +++ b/contracts/mainnet/connectors/erc20_staking/events.sol @@ -10,12 +10,14 @@ contract Events { uint setId ); - event LogWithdraw( + event LogWithdrawAndClaimedReward( address indexed stakingToken, bytes32 indexed stakingType, uint256 amount, + uint256 rewardAmt, uint getId, - uint setId + uint setIdAmount, + uint setIdReward ); event LogClaimedReward( diff --git a/contracts/mainnet/connectors/erc20_staking/main.sol b/contracts/mainnet/connectors/erc20_staking/main.sol index 513c4bf5..9b3e5194 100644 --- a/contracts/mainnet/connectors/erc20_staking/main.sol +++ b/contracts/mainnet/connectors/erc20_staking/main.sol @@ -1,6 +1,11 @@ pragma solidity ^0.7.0; pragma experimental ABIEncoderV2; +/** + * @title Token Staking. + * @dev Stake ERC20 for earning rewards. + */ + import { TokenInterface } from "../../common/interfaces.sol"; import { Stores } from "../../common/stores.sol"; @@ -11,18 +16,19 @@ import { IStakingRewards, SynthetixMapping } from "./interface.sol"; contract Main { /** - * @dev Deposit Token. - * @param stakingPoolName staking token address. + * @dev Deposit ERC20. + * @notice Deposit Tokens to staking pool. + * @param stakingPoolName staking pool name. * @param amt staking token amount. - * @param getId Get token amount at this ID from `InstaMemory` Contract. - * @param setId Set token amount at this ID in `InstaMemory` Contract. + * @param getId ID to retrieve amount. + * @param setId ID stores the amount of staked tokens. */ function deposit( string calldata stakingPoolName, uint amt, uint getId, uint setId - ) external payable { + ) external payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); ( IStakingRewards stakingContract, @@ -37,16 +43,18 @@ contract Main { stakingContract.stake(_amt); setUint(setId, _amt); - emit LogDeposit(address(stakingToken), stakingType, _amt, getId, setId); + _eventName = "LogDeposit(address,bytes32,uint256,uint256,uint256)"; + _eventParam = abi.encode(address(stakingToken), stakingType, _amt, getId, setId); } /** - * @dev Withdraw Token. - * @param stakingPoolName staking token address. + * @dev Withdraw ERC20. + * @notice Withdraw Tokens from the staking pool. + * @param stakingPoolName staking pool name. * @param amt staking token amount. - * @param getId Get token amount at this ID from `InstaMemory` Contract. - * @param setIdAmount Set token amount at this ID in `InstaMemory` Contract. - * @param setIdReward Set reward amount at this ID in `InstaMemory` Contract. + * @param getId ID to retrieve amount. + * @param setIdAmount ID stores the amount of stake tokens withdrawn. + * @param setIdReward ID stores the amount of reward tokens claimed. */ function withdraw( string calldata stakingPoolName, @@ -54,7 +62,7 @@ contract Main { uint getId, uint setIdAmount, uint setIdReward - ) external payable { + ) external payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); ( IStakingRewards stakingContract, @@ -74,20 +82,20 @@ contract Main { setUint(setIdAmount, _amt); setUint(setIdReward, rewardAmt); - emit LogWithdraw(address(stakingToken), stakingType, _amt, getId, setIdAmount); - - emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setIdReward); + _eventName = "LogWithdrawAndClaimedReward(address,bytes32,uint256,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(address(stakingToken), stakingType, _amt, rewardAmt, getId, setIdAmount, setIdReward); } /** * @dev Claim Reward. - * @param stakingPoolName staking token address. - * @param setId Set reward amount at this ID in `InstaMemory` Contract. + * @notice Claim Pending Rewards of tokens staked. + * @param stakingPoolName staking pool name. + * @param setId ID stores the amount of reward tokens claimed. */ function claimReward( string calldata stakingPoolName, uint setId - ) external payable { + ) external payable returns (string memory _eventName, bytes memory _eventParam) { ( IStakingRewards stakingContract, , @@ -102,7 +110,12 @@ contract Main { uint rewardAmt = sub(finalBal, intialBal); setUint(setId, rewardAmt); - emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setId); + _eventName = "LogClaimedReward(address,bytes32,uint256,uint256)"; + _eventParam = abi.encode(address(rewardToken), stakingType, rewardAmt, setId); } +} + +contract connectV2StakeERC20 is main { + string public constant name = "Stake-ERC20-v1.0"; } \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index f18e0400..d07e72b2 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -1,8 +1,8 @@ pragma solidity ^0.7.0; /** - * @title Uniswap V3 ERC20 Wrapper. - * @dev Uniswap V3 Wrapper to deposit and withdraw. + * @title G-Uniswap V3 ERC20 Wrapper. + * @dev G-Uniswap V3 Wrapper to deposit and withdraw. */ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; @@ -22,7 +22,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { * @param amt0Max Amount0 Max amount * @param amt1Max Amount1 Max amount * @param slippage use to calculate minimum deposit. 100% = 1e18 - * @param getId ID to retrieve amount. + * @param getIds Array of IDs to retrieve amounts. * @param setId ID stores the amount of pools tokens received. */ function deposit( @@ -79,7 +79,7 @@ abstract contract UniswapV3Resolver is Events, Helpers { * @param minAmtA Min AmountA amount * @param minAmtB Min AmountB amount * @param getId ID to retrieve liqAmt. - * @param setId ID stores the amount of pools tokens received. + * @param setIds Array of IDs tp stores the amounts of pools tokens received. */ function withdraw( address pool, @@ -197,8 +197,6 @@ abstract contract UniswapV3Resolver is Events, Helpers { } -contract ConnectV2UniswapV3ERC20 is UniswapV3Resolver { - - string public constant name = "Uniswap-v3-ERC20"; - +contract ConnectV2GUniswapV3ERC20 is UniswapV3Resolver { + string public constant name = "GUniswap-v3-ERC20-v1.0"; } From 9da4e18c2cc335b3f5b6c25da88a0480baab243c Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 10 Jun 2021 23:42:39 +0530 Subject: [PATCH 20/52] Fixed stack too deep error --- .../connectors/erc20_staking/helpers.sol | 1 + .../mainnet/connectors/erc20_staking/main.sol | 11 +- .../connectors/uniswap_v3_erc20/helpers.sol | 21 ++- .../connectors/uniswap_v3_erc20/interface.sol | 4 +- .../connectors/uniswap_v3_erc20/main.sol | 152 ++++++++++-------- 5 files changed, 113 insertions(+), 76 deletions(-) diff --git a/contracts/mainnet/connectors/erc20_staking/helpers.sol b/contracts/mainnet/connectors/erc20_staking/helpers.sol index 674b2de9..a00c5ccb 100644 --- a/contracts/mainnet/connectors/erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/erc20_staking/helpers.sol @@ -4,6 +4,7 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; +import { TokenInterface } from "../../common/interfaces.sol"; import { IStakingRewards, SynthetixMapping } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { diff --git a/contracts/mainnet/connectors/erc20_staking/main.sol b/contracts/mainnet/connectors/erc20_staking/main.sol index 9b3e5194..d72201bc 100644 --- a/contracts/mainnet/connectors/erc20_staking/main.sol +++ b/contracts/mainnet/connectors/erc20_staking/main.sol @@ -6,14 +6,13 @@ pragma experimental ABIEncoderV2; * @dev Stake ERC20 for earning rewards. */ - import { TokenInterface } from "../../common/interfaces.sol"; import { Stores } from "../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; import { IStakingRewards, SynthetixMapping } from "./interface.sol"; -contract Main { +contract Main is Helpers, Events { /** * @dev Deposit ERC20. @@ -75,15 +74,15 @@ contract Main { uint intialBal = rewardToken.balanceOf(address(this)); stakingContract.withdraw(_amt); stakingContract.getReward(); - uint finalBal = rewardToken.balanceOf(address(this)); - uint rewardAmt = sub(finalBal, intialBal); + uint rewardAmt = sub(rewardToken.balanceOf(address(this)), intialBal); setUint(setIdAmount, _amt); setUint(setIdReward, rewardAmt); - + { _eventName = "LogWithdrawAndClaimedReward(address,bytes32,uint256,uint256,uint256,uint256,uint256)"; _eventParam = abi.encode(address(stakingToken), stakingType, _amt, rewardAmt, getId, setIdAmount, setIdReward); + } } /** @@ -116,6 +115,6 @@ contract Main { } -contract connectV2StakeERC20 is main { +contract connectV2StakeERC20 is Main { string public constant name = "Stake-ERC20-v1.0"; } \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol index 006c91e6..9f30150f 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol @@ -4,10 +4,29 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; -import { IGUniRouter } from "./interface.sol"; +import { IGUniRouter, IGUniPool, IERC20 } from "./interface.sol"; + abstract contract Helpers is DSMath, Basic { IGUniRouter public constant gUniRouter = IGUniRouter(0x8CA6fa325bc32f86a12cC4964Edf1f71655007A7); + + struct DepositAndSwap { + IGUniPool poolContract; + IERC20 _token0; + IERC20 _token1; + uint amount0; + uint amount1; + uint mintAmount; + } + + struct Deposit { + IGUniPool poolContract; + IERC20 _token0; + IERC20 _token1; + uint amount0In; + uint amount1In; + uint mintAmount; + } } diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol index 503774fe..52b45e77 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol @@ -3,14 +3,14 @@ pragma experimental ABIEncoderV2; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -interface ERC20WrapperInterface { +interface IGUniPool { function token0() external view returns (IERC20); function token1() external view returns (IERC20); function mint( - uint256 mintAmount, + uint256 amount, address receiver ) external returns ( diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol index d07e72b2..3c7895bd 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol @@ -8,7 +8,7 @@ pragma solidity ^0.7.0; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import { TokenInterface } from "../../common/interfaces.sol"; -import { ERC20WrapperInterface, IERC20 } from "./interface.sol"; +import { IGUniPool, IERC20 } from "./interface.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; @@ -30,44 +30,48 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 amt0Max, uint256 amt1Max, uint slippage, - uint256[] getIds, + uint256[] calldata getIds, uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { amt0Max = getUint(getIds[0], amt0Max); amt1Max = getUint(getIds[1], amt1Max); - ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); + Deposit memory depositData; + depositData.poolContract = IGUniPool(pool); - (uint256 amount0In, uint256 amount1In, uint256 mintAmount) = poolContract.getMintAmounts(amt0Max, amt1Max); + (depositData.amount0In, depositData.amount1In, depositData.mintAmount) = + depositData.poolContract.getMintAmounts(amt0Max, amt1Max); uint amt0Min = wmul(amt0Max, slippage); uint amt1Min = wmul(amt1Max, slippage); require( - amount0In >= amt0Min && amount1In >= amt1Min, + depositData.amount0In >= amt0Min && depositData.amount1In >= amt1Min, "below min amounts" ); - if (amount0In > 0) { - IERC20 _token0 = poolContract.token0(); - convertEthToWeth(address(_token0) == wethAddr, TokenInterface(address(_token0)), amount0In); - _token0.safeApprove(address(pool), amount0In); + if (depositData.amount0In > 0) { + IERC20 _token0 = depositData.poolContract.token0(); + convertEthToWeth(address(_token0) == wethAddr, TokenInterface(address(_token0)), depositData.amount0In); + _token0.safeApprove(address(pool), depositData.amount0In); } - if (amount1In > 0) { - IERC20 _token1 = poolContract.token1(); - convertEthToWeth(address(_token1) == wethAddr, TokenInterface(address(_token1)), amount1In); - _token1.safeApprove(address(pool), amount1In); + if (depositData.amount1In > 0) { + IERC20 _token1 = depositData.poolContract.token1(); + convertEthToWeth(address(_token1) == wethAddr, TokenInterface(address(_token1)), depositData.amount1In); + _token1.safeApprove(address(pool), depositData.amount1In); } - (uint amount0, uint amount1,) = poolContract.mint(mintAmount, address(this)); + (uint amount0, uint amount1,) = depositData.poolContract.mint(depositData.mintAmount, address(this)); - require(amount0 == amount0In && amount1 == amount1In, "unexpected amounts deposited"); + require( + amount0 == depositData.amount0In && + amount1 == depositData.amount1In, "unexpected amounts deposited"); - setUint(setId, mintAmount); + setUint(setId, depositData.mintAmount); _eventName = "LogDepositLiquidity(address,uint256,uint256,uint256,uint256[],uint256)"; - _eventParam = abi.encode(pool, amount0, amount1, mintAmount, getIds, setId); + _eventParam = abi.encode(pool, amount0, amount1, depositData.mintAmount, getIds, setId); } @@ -87,12 +91,12 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 minAmtA, uint256 minAmtB, uint256 getId, - uint256[] setIds + uint256[] calldata setIds ) external payable returns (string memory _eventName, bytes memory _eventParam) { liqAmt = getUint(getId, liqAmt); - ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); + IGUniPool poolContract = IGUniPool(pool); (uint amount0, uint amount1, uint128 liquidityBurned) = poolContract.burn(liqAmt, address(this)); @@ -137,66 +141,80 @@ abstract contract UniswapV3Resolver is Events, Helpers { uint256 getId, uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { + DepositAndSwap memory depositAndSwap; + depositAndSwap.poolContract = IGUniPool(pool); + depositAndSwap._token0 = depositAndSwap.poolContract.token0(); + depositAndSwap._token1 = depositAndSwap.poolContract.token1(); - ERC20WrapperInterface poolContract = ERC20WrapperInterface(pool); - IERC20 _token0 = poolContract.token0(); - IERC20 _token1 = poolContract.token1(); + depositAndSwap.amount0; + depositAndSwap.amount1; + depositAndSwap.mintAmount; - uint amount0; - uint amount1; - uint mintAmount; + if (address(depositAndSwap._token0) == wethAddr) { + depositAndSwap._token1.approve(address(gUniRouter), amount1In); + + (depositAndSwap.amount0, depositAndSwap.amount1, depositAndSwap.mintAmount) = + gUniRouter.rebalanceAndAddLiquidityETH{value: amount0In}( + depositAndSwap.poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); + } else if (address(depositAndSwap._token1) == wethAddr) { + depositAndSwap._token0.approve(address(gUniRouter), amount0In); - if (address(_token0) == wethAddr) { - _token1.approve(address(gUniRouter), amount1In); - (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidityETH{value: amount0In}( - poolContract, - amount0In, - amount1In, - zeroForOne, - swapAmount, - swapThreshold, - 0, - 0, - address(this) - ); - } else if (address(_token1) == wethAddr) { - _token0.approve(address(gUniRouter), amount0In); - (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidityETH{value: amount1In}( - poolContract, - amount0In, - amount1In, - zeroForOne, - swapAmount, - swapThreshold, - 0, - 0, - address(this) - ); + (depositAndSwap.amount0, depositAndSwap.amount1,depositAndSwap. mintAmount) = + gUniRouter.rebalanceAndAddLiquidityETH{value: amount1In}( + depositAndSwap.poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); } else { - _token0.approve(address(gUniRouter), amount0In); - _token1.approve(address(gUniRouter), amount1In); - (amount0, amount1, mintAmount) = gUniRouter.rebalanceAndAddLiquidity( - poolContract, - amount0In, - amount1In, - zeroForOne, - swapAmount, - swapThreshold, - 0, - 0, - address(this) - ); + depositAndSwap._token0.approve(address(gUniRouter), amount0In); + depositAndSwap._token1.approve(address(gUniRouter), amount1In); + (depositAndSwap.amount0, depositAndSwap.amount1, depositAndSwap.mintAmount) = + gUniRouter.rebalanceAndAddLiquidity( + depositAndSwap.poolContract, + amount0In, + amount1In, + zeroForOne, + swapAmount, + swapThreshold, + 0, + 0, + address(this) + ); } - setUint(setId, mintAmount); + setUint(setId, depositAndSwap.mintAmount); _eventName = "LogSwapAndDepositLiquidity(address,uint256,uint256,uint256,bool,uint256,uint256,uint256)"; - _eventParam = abi.encode(pool, amount0, amount1, mintAmount, zeroForOne, swapAmount, getId, setId); + _eventParam = abi.encode( + pool, + depositAndSwap.amount0, + depositAndSwap.amount1, + depositAndSwap.mintAmount, + zeroForOne, + swapAmount, + getId, + setId + ); } } contract ConnectV2GUniswapV3ERC20 is UniswapV3Resolver { - string public constant name = "GUniswap-v3-ERC20-v1.0"; + string public constant name = "G-Uniswap-v3-ERC20-v1.0"; } From d72c1480f99f3e61e7170753a789944fcfe64670 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Sun, 13 Jun 2021 16:49:33 +0530 Subject: [PATCH 21/52] Added guni factory --- .../uniswap_v3_erc20_staking/events.sol | 27 ++++ .../uniswap_v3_erc20_staking/helpers.sol | 17 +++ .../uniswap_v3_erc20_staking/interface.sol | 20 +++ .../uniswap_v3_erc20_staking/main.sol | 117 ++++++++++++++++++ 4 files changed, 181 insertions(+) create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol create mode 100644 contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol new file mode 100644 index 00000000..4e75acd1 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol @@ -0,0 +1,27 @@ +pragma solidity ^0.7.0; + +contract Events { + + event LogDeposit( + address indexed stakingToken, + uint256 amount, + uint getId, + uint setId + ); + + event LogWithdrawAndClaimedReward( + address indexed stakingToken, + uint256 amount, + uint256 rewardAmt, + uint getId, + uint setIdAmount, + uint setIdReward + ); + + event LogClaimedReward( + address indexed rewardToken, + uint256 rewardAmt, + uint setId + ); + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol new file mode 100644 index 00000000..e083fe94 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { TokenInterface } from "../../common/interfaces.sol"; +import { IStakingRewards, IStakingRewardsFactory } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + + IStakingRewardsFactory constant internal stakingRewardsFactory = + IStakingRewardsFactory(address(0)); // TODO + + TokenInterface constant internal rewardToken = TokenInterface(address(0)); // TODO + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol new file mode 100644 index 00000000..78e732a6 --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol @@ -0,0 +1,20 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +interface IStakingRewards { + function stake(uint256 amount) external; + function withdraw(uint256 amount) external; + function getReward() external; + function balanceOf(address) external view returns(uint); +} + +interface IStakingRewardsFactory { + + struct StakingRewardsInfo { + address stakingRewards; + uint rewardAmount; + } + + function stakingRewardsInfoByStakingToken(address) external view returns(StakingRewardsInfo memory); + +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol new file mode 100644 index 00000000..ecb4ea2c --- /dev/null +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol @@ -0,0 +1,117 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +/** + * @title G-UNI Staking. + * @dev Stake G-UNI for earning rewards. + */ + +import { TokenInterface } from "../../common/interfaces.sol"; +import { Stores } from "../../common/stores.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; +import { IStakingRewards, IStakingRewardsFactory } from "./interface.sol"; + +contract Main is Helpers, Events { + + /** + * @dev Deposit ERC20. + * @notice Deposit Tokens to staking pool. + * @param stakingToken staking token address. + * @param amt staking token amount. + * @param getId ID to retrieve amount. + * @param setId ID stores the amount of staked tokens. + */ + function deposit( + address stakingToken, + uint amt, + uint getId, + uint setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = + stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); + + IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + TokenInterface stakingTokenContract = TokenInterface(stakingToken); + + _amt = _amt == uint(-1) ? stakingTokenContract.balanceOf(address(this)) : _amt; + + stakingTokenContract.approve(address(stakingContract), _amt); + stakingContract.stake(_amt); + + setUint(setId, _amt); + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(address(stakingToken), _amt, getId, setId); + } + + /** + * @dev Withdraw ERC20. + * @notice Withdraw Tokens from the staking pool. + * @param stakingToken staking token address. + * @param amt staking token amount. + * @param getId ID to retrieve amount. + * @param setIdAmount ID stores the amount of stake tokens withdrawn. + * @param setIdReward ID stores the amount of reward tokens claimed. + */ + function withdraw( + address stakingToken, + uint amt, + uint getId, + uint setIdAmount, + uint setIdReward + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = + stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); + + IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + + _amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt; + uint intialBal = rewardToken.balanceOf(address(this)); + stakingContract.withdraw(_amt); + stakingContract.getReward(); + + uint rewardAmt = sub(rewardToken.balanceOf(address(this)), intialBal); + + setUint(setIdAmount, _amt); + setUint(setIdReward, rewardAmt); + { + _eventName = "LogWithdrawAndClaimedReward(address,uint256,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(address(stakingToken), _amt, rewardAmt, getId, setIdAmount, setIdReward); + } + } + + /** + * @dev Claim Reward. + * @notice Claim Pending Rewards of tokens staked. + * @param stakingToken staking token address. + * @param setId ID stores the amount of reward tokens claimed. + */ + function claimReward( + address stakingToken, + uint setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = + stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); + + IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + + uint intialBal = rewardToken.balanceOf(address(this)); + stakingContract.getReward(); + uint finalBal = rewardToken.balanceOf(address(this)); + + uint rewardAmt = sub(finalBal, intialBal); + + setUint(setId, rewardAmt); + _eventName = "LogClaimedReward(address,uint256,uint256)"; + _eventParam = abi.encode(address(rewardToken), rewardAmt, setId); + } + +} + +contract connectV2StakeGUNI is Main { + string public constant name = "Stake-G-UNI-v1.0"; +} \ No newline at end of file From f37a543b81475d9576f66aa7a7c25a96ac10b042 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Sun, 13 Jun 2021 17:00:49 +0530 Subject: [PATCH 22/52] minor refactoring --- .../uniswap_v3_erc20_staking/helpers.sol | 7 +++++++ .../connectors/uniswap_v3_erc20_staking/main.sol | 15 +++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol index e083fe94..ac412828 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol @@ -14,4 +14,11 @@ abstract contract Helpers is DSMath, Basic { TokenInterface constant internal rewardToken = TokenInterface(address(0)); // TODO + function getStakingContract(address stakingToken) internal view returns (address) { + IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = + stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); + + return IStakingRewards(stakingRewardsInfo.stakingRewards); + } + } \ No newline at end of file diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol index ecb4ea2c..4cd4fbcc 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol @@ -30,10 +30,7 @@ contract Main is Helpers, Events { ) external payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); - IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = - stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); - - IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + IStakingRewards stakingContract = IStakingRewards(getStakingContract(stakingToken)); TokenInterface stakingTokenContract = TokenInterface(stakingToken); _amt = _amt == uint(-1) ? stakingTokenContract.balanceOf(address(this)) : _amt; @@ -64,10 +61,7 @@ contract Main is Helpers, Events { ) external payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); - IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = - stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); - - IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + IStakingRewards stakingContract = IStakingRewards(getStakingContract(stakingToken)); _amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt; uint intialBal = rewardToken.balanceOf(address(this)); @@ -94,10 +88,7 @@ contract Main is Helpers, Events { address stakingToken, uint setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { - IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = - stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); - - IStakingRewards stakingContract = IStakingRewards(stakingRewardsInfo.stakingRewards); + IStakingRewards stakingContract = IStakingRewards(getStakingContract(stakingToken)); uint intialBal = rewardToken.balanceOf(address(this)); stakingContract.getReward(); From 229be643a0145b7319b7b2342d9c32ff6b65e9c7 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Sun, 13 Jun 2021 17:02:34 +0530 Subject: [PATCH 23/52] minor fix --- .../mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol index ac412828..b472780d 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol @@ -18,7 +18,7 @@ abstract contract Helpers is DSMath, Basic { IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); - return IStakingRewards(stakingRewardsInfo.stakingRewards); + return stakingRewardsInfo.stakingRewards; } } \ No newline at end of file From dc43a3f3b34b387a844964e203e2324c3892e062 Mon Sep 17 00:00:00 2001 From: Ishan Jain Date: Mon, 14 Jun 2021 12:36:05 +0530 Subject: [PATCH 24/52] Updated dependencies --- package-lock.json | 8477 +++++++++++++++++++++++++-------------------- 1 file changed, 4631 insertions(+), 3846 deletions(-) diff --git a/package-lock.json b/package-lock.json index c505fd90..402692eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "dsa-connectors", "version": "1.0.0", "license": "ISC", "dependencies": { @@ -37,6 +36,33 @@ "web3": "^1.3.0" } }, + "node_modules/@babel/runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", + "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ensdomains/address-encoder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", + "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", + "dev": true, + "dependencies": { + "bech32": "^1.1.3", + "blakejs": "^1.1.0", + "bn.js": "^4.11.8", + "bs58": "^4.0.1", + "crypto-addr-codec": "^0.1.7", + "nano-base32": "^1.0.1", + "ripemd160": "^2.0.2" + } + }, "node_modules/@ensdomains/ens": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", @@ -242,6 +268,236 @@ "lodash.assign": "^4.0.6" } }, + "node_modules/@ensdomains/ensjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.0.1.tgz", + "integrity": "sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.4.4", + "@ensdomains/address-encoder": "^0.1.7", + "@ensdomains/ens": "0.4.3", + "@ensdomains/resolver": "0.2.4", + "content-hash": "^2.5.2", + "eth-ens-namehash": "^2.0.8", + "ethers": "^5.0.13", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/@ensdomains/ens": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.3.tgz", + "integrity": "sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA==", + "deprecated": "Please use @ensdomains/ens-contracts", + "dev": true, + "dependencies": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "ethereumjs-testrpc": "^6.0.3", + "ganache-cli": "^6.1.0", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/@ensdomains/ensjs/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/@ensdomains/ensjs/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/@ensdomains/ensjs/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "dev": true, + "dependencies": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + }, + "bin": { + "solcjs": "solcjs" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "node_modules/@ensdomains/ensjs/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/@ensdomains/ensjs/node_modules/yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "dependencies": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "node_modules/@ensdomains/ensjs/node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, "node_modules/@ensdomains/resolver": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", @@ -1213,9 +1469,9 @@ } }, "node_modules/@ethersproject/abstract-provider": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz", - "integrity": "sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz", + "integrity": "sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw==", "dev": true, "funding": [ { @@ -1228,19 +1484,19 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/networks": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/web": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/networks": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/web": "^5.3.0" } }, "node_modules/@ethersproject/abstract-signer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz", - "integrity": "sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz", + "integrity": "sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg==", "dev": true, "funding": [ { @@ -1253,17 +1509,17 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0" + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0" } }, "node_modules/@ethersproject/address": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.1.0.tgz", - "integrity": "sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.3.0.tgz", + "integrity": "sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA==", "dev": true, "funding": [ { @@ -1276,17 +1532,17 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/rlp": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/rlp": "^5.3.0" } }, "node_modules/@ethersproject/base64": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.1.0.tgz", - "integrity": "sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.3.0.tgz", + "integrity": "sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw==", "dev": true, "funding": [ { @@ -1299,13 +1555,13 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0" + "@ethersproject/bytes": "^5.3.0" } }, "node_modules/@ethersproject/basex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.1.0.tgz", - "integrity": "sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.3.0.tgz", + "integrity": "sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ==", "dev": true, "funding": [ { @@ -1318,14 +1574,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/properties": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/properties": "^5.3.0" } }, "node_modules/@ethersproject/bignumber": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.1.1.tgz", - "integrity": "sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.3.0.tgz", + "integrity": "sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA==", "dev": true, "funding": [ { @@ -1338,15 +1594,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "bn.js": "^4.4.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "bn.js": "^4.11.9" } }, "node_modules/@ethersproject/bytes": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.1.0.tgz", - "integrity": "sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.3.0.tgz", + "integrity": "sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw==", "dev": true, "funding": [ { @@ -1359,13 +1615,13 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/constants": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.1.0.tgz", - "integrity": "sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.3.0.tgz", + "integrity": "sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw==", "dev": true, "funding": [ { @@ -1378,13 +1634,13 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0" } }, "node_modules/@ethersproject/contracts": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.1.1.tgz", - "integrity": "sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.3.0.tgz", + "integrity": "sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg==", "dev": true, "funding": [ { @@ -1397,16 +1653,43 @@ } ], "dependencies": { - "@ethersproject/abi": "^5.1.0", - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/transactions": "^5.1.0" + "@ethersproject/abi": "^5.3.0", + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/transactions": "^5.3.0" + } + }, + "node_modules/@ethersproject/contracts/node_modules/@ethersproject/abi": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.3.1.tgz", + "integrity": "sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw==", + "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.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/@ethersproject/hardware-wallets": { @@ -1436,9 +1719,9 @@ } }, "node_modules/@ethersproject/hash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.1.0.tgz", - "integrity": "sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.3.0.tgz", + "integrity": "sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w==", "dev": true, "funding": [ { @@ -1451,20 +1734,20 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/@ethersproject/hdnode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.1.0.tgz", - "integrity": "sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.3.0.tgz", + "integrity": "sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g==", "dev": true, "funding": [ { @@ -1477,24 +1760,24 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/basex": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/pbkdf2": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/wordlists": "^5.1.0" + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/basex": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/pbkdf2": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/wordlists": "^5.3.0" } }, "node_modules/@ethersproject/json-wallets": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz", - "integrity": "sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz", + "integrity": "sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw==", "dev": true, "funding": [ { @@ -1507,25 +1790,25 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hdnode": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/pbkdf2": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hdnode": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/pbkdf2": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "node_modules/@ethersproject/keccak256": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.1.0.tgz", - "integrity": "sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.3.0.tgz", + "integrity": "sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ==", "dev": true, "funding": [ { @@ -1538,14 +1821,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", + "@ethersproject/bytes": "^5.3.0", "js-sha3": "0.5.7" } }, "node_modules/@ethersproject/logger": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.1.0.tgz", - "integrity": "sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.3.0.tgz", + "integrity": "sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA==", "dev": true, "funding": [ { @@ -1559,9 +1842,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.1.0.tgz", - "integrity": "sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.3.1.tgz", + "integrity": "sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw==", "dev": true, "funding": [ { @@ -1574,13 +1857,13 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/pbkdf2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz", - "integrity": "sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz", + "integrity": "sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA==", "dev": true, "funding": [ { @@ -1593,14 +1876,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/sha2": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/sha2": "^5.3.0" } }, "node_modules/@ethersproject/properties": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.1.0.tgz", - "integrity": "sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.3.0.tgz", + "integrity": "sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw==", "dev": true, "funding": [ { @@ -1613,13 +1896,13 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/providers": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.1.2.tgz", - "integrity": "sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.3.1.tgz", + "integrity": "sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg==", "dev": true, "funding": [ { @@ -1632,52 +1915,31 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/basex": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/networks": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/rlp": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/web": "^5.1.0", + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/basex": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/networks": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/rlp": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/web": "^5.3.0", "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 - } + "ws": "7.4.6" } }, "node_modules/@ethersproject/random": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.1.0.tgz", - "integrity": "sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.3.0.tgz", + "integrity": "sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw==", "dev": true, "funding": [ { @@ -1690,14 +1952,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/rlp": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.1.0.tgz", - "integrity": "sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.3.0.tgz", + "integrity": "sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw==", "dev": true, "funding": [ { @@ -1710,14 +1972,14 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/sha2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.1.0.tgz", - "integrity": "sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.3.0.tgz", + "integrity": "sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg==", "dev": true, "funding": [ { @@ -1730,25 +1992,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "hash.js": "1.1.3" - } - }, - "node_modules/@ethersproject/sha2/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "hash.js": "1.1.7" } }, "node_modules/@ethersproject/signing-key": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.1.0.tgz", - "integrity": "sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.3.0.tgz", + "integrity": "sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ==", "dev": true, "funding": [ { @@ -1761,17 +2013,18 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "bn.js": "^4.4.0", - "elliptic": "6.5.4" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, "node_modules/@ethersproject/solidity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.1.0.tgz", - "integrity": "sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.3.0.tgz", + "integrity": "sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ==", "dev": true, "funding": [ { @@ -1784,17 +2037,17 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/@ethersproject/strings": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.1.0.tgz", - "integrity": "sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.3.0.tgz", + "integrity": "sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q==", "dev": true, "funding": [ { @@ -1807,15 +2060,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/transactions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.1.1.tgz", - "integrity": "sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.3.0.tgz", + "integrity": "sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ==", "dev": true, "funding": [ { @@ -1828,21 +2081,21 @@ } ], "dependencies": { - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/rlp": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0" + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/rlp": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0" } }, "node_modules/@ethersproject/units": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.1.0.tgz", - "integrity": "sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.3.0.tgz", + "integrity": "sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg==", "dev": true, "funding": [ { @@ -1855,15 +2108,15 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "node_modules/@ethersproject/wallet": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.1.0.tgz", - "integrity": "sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.3.0.tgz", + "integrity": "sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg==", "dev": true, "funding": [ { @@ -1876,27 +2129,27 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/hdnode": "^5.1.0", - "@ethersproject/json-wallets": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/wordlists": "^5.1.0" + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/hdnode": "^5.3.0", + "@ethersproject/json-wallets": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/wordlists": "^5.3.0" } }, "node_modules/@ethersproject/web": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.1.0.tgz", - "integrity": "sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.3.0.tgz", + "integrity": "sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ==", "dev": true, "funding": [ { @@ -1909,17 +2162,17 @@ } ], "dependencies": { - "@ethersproject/base64": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/base64": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/@ethersproject/wordlists": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.1.0.tgz", - "integrity": "sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.3.0.tgz", + "integrity": "sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ==", "dev": true, "funding": [ { @@ -1932,11 +2185,11 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/@ledgerhq/cryptoassets": { @@ -2365,9 +2618,9 @@ "integrity": "sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ==" }, "node_modules/@openzeppelin/test-helpers": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.10.tgz", - "integrity": "sha512-agXr5Rn/q0MCDaU0ioYMGQVjY32Ln3Ae3cyQKtESuKdDoEZ7g3Y7x4eUbT779OE9nQ+xQCytmVqjKvZvajURug==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz", + "integrity": "sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw==", "dev": true, "dependencies": { "@openzeppelin/contract-loader": "^0.6.2", @@ -2678,15 +2931,15 @@ } }, "node_modules/@truffle/blockchain-utils": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.0.28.tgz", - "integrity": "sha512-Q3vtGzDAGI3q2OQV1rUX/HYGJ0PB4RKbrgnwSV3YLc01YOkv4baF5ZJbMxtgLDhJQap1llrN59u2BOAa+jVCsg==", + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.0.30.tgz", + "integrity": "sha512-3hkHSHxVavoALcxpBqD4YwHuCmkBrvjq6PAGw93i6WCB+pnejBD5sFjVCiZZKCogh4kGObxxcwu53+3dyT/6IQ==", "dev": true }, "node_modules/@truffle/codec": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.10.2.tgz", - "integrity": "sha512-m396zHfF5ee8zv0O0SctVt0/FxGPv/x9pTm24BHlDz540S6wiWwarBb20QF4sXfJ7lwe6ZfwtyQHExuszCENlg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.0.tgz", + "integrity": "sha512-iWrd+DhYC4nHAfFzfuuiRK86ebkM4IXH4DFW9owVtWR0esexE96tjFAfwEI/mGaJ+ml430P7ybpuDYmVPVKO9w==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -2699,7 +2952,7 @@ "lodash.sum": "^4.0.2", "semver": "^7.3.4", "utf8": "^3.0.0", - "web3-utils": "1.2.9" + "web3-utils": "1.3.6" } }, "node_modules/@truffle/codec/node_modules/bn.js": { @@ -2708,23 +2961,6 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, - "node_modules/@truffle/codec/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/@truffle/codec/node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/@truffle/codec/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2752,37 +2988,6 @@ "node": ">=10" } }, - "node_modules/@truffle/codec/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "node_modules/@truffle/codec/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/codec/node_modules/web3-utils/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, "node_modules/@truffle/codec/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -2790,30 +2995,30 @@ "dev": true }, "node_modules/@truffle/contract": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.3.12.tgz", - "integrity": "sha512-gnOkZe28k/pwPkl4Ke9mj7UwLHDr6nq1ZitZOhukXvq5mf6Ll9hsHhGCwlzKnxdwKHHUpJ/1saqp6OjXOiJYEw==", + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.3.20.tgz", + "integrity": "sha512-kX3l3nRBGqHPfIkcmdVQDis3T8sR2Rt5H/mFs4A6GRxRCw5oj92J7YFkM5J8BY698GsmD8qAGUKFdUwHLcOPGA==", "dev": true, "dependencies": { - "@truffle/blockchain-utils": "^0.0.28", - "@truffle/contract-schema": "^3.3.4", - "@truffle/debug-utils": "^5.0.12", - "@truffle/error": "^0.0.12", - "@truffle/interface-adapter": "^0.4.20", + "@ensdomains/ensjs": "^2.0.1", + "@truffle/blockchain-utils": "^0.0.30", + "@truffle/contract-schema": "^3.4.1", + "@truffle/debug-utils": "^5.1.0", + "@truffle/error": "^0.0.14", + "@truffle/interface-adapter": "^0.5.0", "bignumber.js": "^7.2.1", - "ethereum-ens": "^0.8.0", "ethers": "^4.0.32", - "web3": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" + "web3": "1.3.6", + "web3-core-helpers": "1.3.6", + "web3-core-promievent": "1.3.6", + "web3-eth-abi": "1.3.6", + "web3-utils": "1.3.6" } }, "node_modules/@truffle/contract-schema": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.3.4.tgz", - "integrity": "sha512-HzscBl/GhZBvPNQeD9l6ewSHSkvNmE+bA0iTVa0Y2mNf5GD5Y3fK2NPyfbOdtckOvLqebvYGEDEPRiXc3BZ05g==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.1.tgz", + "integrity": "sha512-2gvu6gxJtbbI67H2Bwh2rBuej+1uCV3z4zKFzQZP00hjNoL+QfybrmBcOVB88PflBeEB+oUXuwQfDoKX3TXlnQ==", "dev": true, "dependencies": { "ajv": "^6.10.0", @@ -2821,18 +3026,6 @@ "debug": "^4.3.1" } }, - "node_modules/@truffle/contract/node_modules/@types/node": { - "version": "10.17.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.56.tgz", - "integrity": "sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w==", - "dev": true - }, - "node_modules/@truffle/contract/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, "node_modules/@truffle/contract/node_modules/elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", @@ -2848,17 +3041,6 @@ "minimalistic-crypto-utils": "^1.0.0" } }, - "node_modules/@truffle/contract/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "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", @@ -2886,15 +3068,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/@truffle/contract/node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, "node_modules/@truffle/contract/node_modules/scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", @@ -2907,376 +3080,25 @@ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", "dev": true }, - "node_modules/@truffle/contract/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, "node_modules/@truffle/contract/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/contract/node_modules/web3": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.9.tgz", - "integrity": "sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.2.9", - "web3-core": "1.2.9", - "web3-eth": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-shh": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-bzz": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.9.tgz", - "integrity": "sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA==", - "dev": true, - "dependencies": { - "@types/node": "^10.12.18", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-core": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.9.tgz", - "integrity": "sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.4", - "@types/node": "^12.6.1", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-requestmanager": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-core-method": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.9.tgz", - "integrity": "sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg==", - "dev": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-core-requestmanager": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz", - "integrity": "sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA==", - "dev": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-providers-http": "1.2.9", - "web3-providers-ipc": "1.2.9", - "web3-providers-ws": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-core-subscriptions": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz", - "integrity": "sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg==", - "dev": true, - "dependencies": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - }, - "node_modules/@truffle/contract/node_modules/web3-core/node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.9.tgz", - "integrity": "sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag==", - "dev": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-accounts": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-eth-ens": "1.2.9", - "web3-eth-iban": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-accounts": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz", - "integrity": "sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg==", - "dev": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "^0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-accounts/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/@truffle/contract/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-contract": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz", - "integrity": "sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.4", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-ens": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz", - "integrity": "sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ==", - "dev": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-personal": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz", - "integrity": "sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ==", - "dev": true, - "dependencies": { - "@types/node": "^12.6.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - }, - "node_modules/@truffle/contract/node_modules/web3-net": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.9.tgz", - "integrity": "sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA==", - "dev": true, - "dependencies": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-providers-http": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.9.tgz", - "integrity": "sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A==", - "dev": true, - "dependencies": { - "web3-core-helpers": "1.2.9", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-providers-ipc": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz", - "integrity": "sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ==", - "dev": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-providers-ws": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz", - "integrity": "sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/@truffle/contract/node_modules/web3-shh": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.9.tgz", - "integrity": "sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA==", - "dev": true, - "dependencies": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-net": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/contract/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, "node_modules/@truffle/debug-utils": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-5.0.12.tgz", - "integrity": "sha512-NkdSLjAvyylZAOJeywYHzCWHkrAm0kVPVkZZUtsej0wAvzqqL6FWV/jy9wKtpAv5hYhCQBU9BKrPdfdTnE6dYA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-5.1.0.tgz", + "integrity": "sha512-TbGsML+jmFEPD9gx8nCueRe2b3Zz6pOATH9QYeEnyUIklySa7kRPw03ifecDyXl1/XCMDb+7+PhYoF0zeMQ4gA==", "dev": true, "dependencies": { - "@truffle/codec": "^0.10.2", + "@truffle/codec": "^0.11.0", "@trufflesuite/chromafi": "^2.2.2", "bn.js": "^5.1.3", "chalk": "^2.4.2", "debug": "^4.3.1", "highlight.js": "^10.4.0", - "highlightjs-solidity": "^1.0.21" + "highlightjs-solidity": "^1.1.0" } }, "node_modules/@truffle/debug-utils/node_modules/ansi-styles": { @@ -3348,35 +3170,20 @@ } }, "node_modules/@truffle/error": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.0.12.tgz", - "integrity": "sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.0.14.tgz", + "integrity": "sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA==", "dev": true }, "node_modules/@truffle/interface-adapter": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz", - "integrity": "sha512-GcdtXjU+Mhx/WuD3Af1thojHilhUAWtKfoNF09oEDyGSrS0QEWq9s9kOFjrfTFJrK+g0I6VXMrU2sIido96NBA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.0.tgz", + "integrity": "sha512-0MRt9orgQqo0knyKDy0fGRqnI+alkuK0BUAvHB1/VUJgCKyWBNAUUZO5gPjuj75qCjV4Rw+W6SKDQpn2xOWsXw==", "dev": true, "dependencies": { "bn.js": "^5.1.3", "ethers": "^4.0.32", - "web3": "1.2.9" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/@types/node": { - "version": "10.17.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.56.tgz", - "integrity": "sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "dev": true, - "engines": { - "node": "*" + "web3": "1.3.6" } }, "node_modules/@truffle/interface-adapter/node_modules/bn.js": { @@ -3406,23 +3213,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/@truffle/interface-adapter/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/@truffle/interface-adapter/node_modules/ethers": { "version": "4.0.48", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz", @@ -3456,15 +3246,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/@truffle/interface-adapter/node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, "node_modules/@truffle/interface-adapter/node_modules/scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", @@ -3477,360 +3258,13 @@ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", "dev": true }, - "node_modules/@truffle/interface-adapter/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, "node_modules/@truffle/interface-adapter/node_modules/uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true }, - "node_modules/@truffle/interface-adapter/node_modules/web3": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.9.tgz", - "integrity": "sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.2.9", - "web3-core": "1.2.9", - "web3-eth": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-shh": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-bzz": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.9.tgz", - "integrity": "sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA==", - "dev": true, - "dependencies": { - "@types/node": "^10.12.18", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-core": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.9.tgz", - "integrity": "sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.4", - "@types/node": "^12.6.1", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-requestmanager": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-core-method": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.9.tgz", - "integrity": "sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg==", - "dev": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-core-requestmanager": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz", - "integrity": "sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA==", - "dev": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-providers-http": "1.2.9", - "web3-providers-ipc": "1.2.9", - "web3-providers-ws": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-core-subscriptions": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz", - "integrity": "sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg==", - "dev": true, - "dependencies": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.9.tgz", - "integrity": "sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag==", - "dev": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-accounts": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-eth-ens": "1.2.9", - "web3-eth-iban": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-accounts": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz", - "integrity": "sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg==", - "dev": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "^0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-accounts/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/@truffle/interface-adapter/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-contract": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz", - "integrity": "sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.4", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-ens": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz", - "integrity": "sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ==", - "dev": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-personal": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz", - "integrity": "sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ==", - "dev": true, - "dependencies": { - "@types/node": "^12.6.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-net": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.9.tgz", - "integrity": "sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA==", - "dev": true, - "dependencies": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-providers-http": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.9.tgz", - "integrity": "sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A==", - "dev": true, - "dependencies": { - "web3-core-helpers": "1.2.9", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-providers-ipc": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz", - "integrity": "sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ==", - "dev": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-providers-ws": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz", - "integrity": "sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-shh": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.9.tgz", - "integrity": "sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA==", - "dev": true, - "dependencies": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-net": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-utils/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, "node_modules/@trufflesuite/chromafi": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz", @@ -4082,15 +3516,14 @@ } }, "node_modules/@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.1.tgz", + "integrity": "sha512-Mci9WJYLRjyJEBkGHMPxZ1ihJ9l6gOy2Gr6hpYZUNpQoe5+nbpeb3w00aP+PSHJygCF+fxJsqp7Af1zGDITzuw==", "dependencies": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", "postcss-selector-parser": "^6.0.2", "source-map": "~0.6.1", "vue-template-es2015-compiler": "^1.9.0" @@ -4327,6 +3760,27 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "dependencies": { + "acorn": "^4.0.3" + } + }, + "node_modules/acorn-dynamic-import/node_modules/acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -4383,6 +3837,38 @@ "ajv": "^6.9.1" } }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/align-text/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/align-text/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -4857,6 +4343,15 @@ "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", "dev": true }, + "node_modules/big-integer": { + "version": "1.6.36", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5350,6 +4845,19 @@ "node": "*" } }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", @@ -5414,40 +4922,48 @@ } }, "node_modules/cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, "dependencies": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", - "deprecated": "Use cheerio-select instead", + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "dev": true, "dependencies": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cheerio/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, "node_modules/chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", @@ -6023,6 +5539,54 @@ "semver": "bin/semver" } }, + "node_modules/crypto-addr-codec": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", + "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "dev": true, + "dependencies": { + "base-x": "^3.0.8", + "big-integer": "1.6.36", + "blakejs": "^1.1.0", + "bs58": "^4.0.1", + "ripemd160-min": "0.0.6", + "safe-buffer": "^5.2.0", + "sha3": "^2.1.1" + } + }, + "node_modules/crypto-addr-codec/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/crypto-addr-codec/node_modules/sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", + "dev": true, + "dependencies": { + "buffer": "6.0.3" + } + }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -6083,15 +5647,14 @@ } }, "node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "dev": true, + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" }, "funding": { @@ -6099,10 +5662,9 @@ } }, "node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "engines": { "node": ">= 6" }, @@ -6351,13 +5913,12 @@ } }, "node_modules/dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dependencies": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { @@ -6380,9 +5941,9 @@ } }, "node_modules/domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "funding": [ { "type": "github", @@ -6391,12 +5952,11 @@ ] }, "node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", - "dev": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dependencies": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -6406,14 +5966,13 @@ } }, "node_modules/domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", - "dev": true, + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dependencies": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -6674,6 +6233,43 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set/node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -6758,6 +6354,30 @@ "node": ">=0.8.0" } }, + "node_modules/escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/escope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -6939,20 +6559,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/ethereum-ens": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", - "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", - "dev": true, - "dependencies": { - "bluebird": "^3.4.7", - "eth-ens-namehash": "^2.0.0", - "js-sha3": "^0.5.7", - "pako": "^1.0.4", - "underscore": "^1.8.3", - "web3": "^1.0.0-beta.34" - } - }, "node_modules/ethereum-waffle": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz", @@ -6987,6 +6593,19 @@ "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", "dev": true }, + "node_modules/ethereumjs-testrpc": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz", + "integrity": "sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA==", + "deprecated": "ethereumjs-testrpc has been renamed to ganache-cli, please use this package from now on.", + "dev": true, + "dependencies": { + "webpack": "^3.0.0" + }, + "bin": { + "testrpc": "build/cli.node.js" + } + }, "node_modules/ethereumjs-testrpc-sc": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", @@ -6999,6 +6618,414 @@ "testrpc-sc": "build/cli.node.js" } }, + "node_modules/ethereumjs-testrpc/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/cliui/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/ethereumjs-testrpc/node_modules/has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "dependencies": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/ethereumjs-testrpc/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/tapable": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/uglify-js/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/uglify-js/node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/uglify-js/node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + }, + "peerDependencies": { + "webpack": "^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "dev": true, + "dependencies": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/ethereumjs-testrpc/node_modules/yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "node_modules/ethereumjs-testrpc/node_modules/yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "dependencies": { + "camelcase": "^4.1.0" + } + }, "node_modules/ethereumjs-tx": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", @@ -7024,9 +7051,9 @@ } }, "node_modules/ethers": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.1.4.tgz", - "integrity": "sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.3.1.tgz", + "integrity": "sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw==", "dev": true, "funding": [ { @@ -7038,38 +7065,64 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.1.2", - "@ethersproject/abstract-provider": "5.1.0", - "@ethersproject/abstract-signer": "5.1.0", - "@ethersproject/address": "5.1.0", - "@ethersproject/base64": "5.1.0", - "@ethersproject/basex": "5.1.0", - "@ethersproject/bignumber": "5.1.1", - "@ethersproject/bytes": "5.1.0", - "@ethersproject/constants": "5.1.0", - "@ethersproject/contracts": "5.1.1", - "@ethersproject/hash": "5.1.0", - "@ethersproject/hdnode": "5.1.0", - "@ethersproject/json-wallets": "5.1.0", - "@ethersproject/keccak256": "5.1.0", - "@ethersproject/logger": "5.1.0", - "@ethersproject/networks": "5.1.0", - "@ethersproject/pbkdf2": "5.1.0", - "@ethersproject/properties": "5.1.0", - "@ethersproject/providers": "5.1.2", - "@ethersproject/random": "5.1.0", - "@ethersproject/rlp": "5.1.0", - "@ethersproject/sha2": "5.1.0", - "@ethersproject/signing-key": "5.1.0", - "@ethersproject/solidity": "5.1.0", - "@ethersproject/strings": "5.1.0", - "@ethersproject/transactions": "5.1.1", - "@ethersproject/units": "5.1.0", - "@ethersproject/wallet": "5.1.0", - "@ethersproject/web": "5.1.0", - "@ethersproject/wordlists": "5.1.0" + "@ethersproject/abi": "5.3.1", + "@ethersproject/abstract-provider": "5.3.0", + "@ethersproject/abstract-signer": "5.3.0", + "@ethersproject/address": "5.3.0", + "@ethersproject/base64": "5.3.0", + "@ethersproject/basex": "5.3.0", + "@ethersproject/bignumber": "5.3.0", + "@ethersproject/bytes": "5.3.0", + "@ethersproject/constants": "5.3.0", + "@ethersproject/contracts": "5.3.0", + "@ethersproject/hash": "5.3.0", + "@ethersproject/hdnode": "5.3.0", + "@ethersproject/json-wallets": "5.3.0", + "@ethersproject/keccak256": "5.3.0", + "@ethersproject/logger": "5.3.0", + "@ethersproject/networks": "5.3.1", + "@ethersproject/pbkdf2": "5.3.0", + "@ethersproject/properties": "5.3.0", + "@ethersproject/providers": "5.3.1", + "@ethersproject/random": "5.3.0", + "@ethersproject/rlp": "5.3.0", + "@ethersproject/sha2": "5.3.0", + "@ethersproject/signing-key": "5.3.0", + "@ethersproject/solidity": "5.3.0", + "@ethersproject/strings": "5.3.0", + "@ethersproject/transactions": "5.3.0", + "@ethersproject/units": "5.3.0", + "@ethersproject/wallet": "5.3.0", + "@ethersproject/web": "5.3.0", + "@ethersproject/wordlists": "5.3.0" + } + }, + "node_modules/ethers/node_modules/@ethersproject/abi": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.3.1.tgz", + "integrity": "sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw==", + "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.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "node_modules/ethjs-abi": { @@ -7151,9 +7204,9 @@ } }, "node_modules/eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true }, "node_modules/events": { @@ -7173,6 +7226,51 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/execa/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/execa/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "node_modules/exit-on-epipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", @@ -7872,6 +7970,1055 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "node_modules/ganache-cli": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", + "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", + "bundleDependencies": [ + "source-map-support", + "yargs", + "ethereumjs-util" + ], + "dev": true, + "dependencies": { + "ethereumjs-util": "6.2.1", + "source-map-support": "0.5.12", + "yargs": "13.2.4" + }, + "bin": { + "ganache-cli": "cli.js" + } + }, + "node_modules/ganache-cli/node_modules/@types/bn.js": { + "version": "4.11.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/@types/node": { + "version": "14.11.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/@types/pbkdf2": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/@types/secp256k1": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/ansi-regex": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/base-x": { + "version": "3.0.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/blakejs": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/ganache-cli/node_modules/bn.js": { + "version": "4.11.9", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/bs58": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/ganache-cli/node_modules/bs58check": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-cli/node_modules/buffer-from": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/cliui": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/ganache-cli/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ganache-cli/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/ganache-cli/node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/ganache-cli/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/ganache-cli/node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/elliptic": { + "version": "6.5.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/ganache-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ganache-cli/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ganache-cli/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "inBundle": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-cli/node_modules/ethjs-util": { + "version": "0.1.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-cli/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/ganache-cli/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/hash-base": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/hash.js": { + "version": "1.1.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/ganache-cli/node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ganache-cli/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/invert-kv": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/is-hex-prefixed": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/keccak": { + "version": "3.0.1", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-cli/node_modules/lcid": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/map-age-cleaner": { + "version": "0.1.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/md5.js": { + "version": "1.3.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-cli/node_modules/mem": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/node-addon-api": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/node-gyp-build": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/ganache-cli/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/once": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ganache-cli/node_modules/os-locale": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-defer": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/p-is-promise": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-cli/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/pbkdf2": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-cli/node_modules/pump": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/ganache-cli/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-cli/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-cli/node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/ripemd160": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-cli/node_modules/rlp": { + "version": "2.2.6", + "dev": true, + "inBundle": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.1" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/ganache-cli/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/scrypt-js": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/secp256k1": { + "version": "4.0.2", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-cli/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-cli/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/setimmediate": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "inBundle": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/ganache-cli/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/signal-exit": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/source-map-support": { + "version": "0.5.12", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/ganache-cli/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/ganache-cli/node_modules/string-width": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/strip-hex-prefix": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/which": { + "version": "1.3.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/ganache-cli/node_modules/which-module": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/y18n": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/yargs": { + "version": "13.2.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "node_modules/ganache-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "node_modules/ganache-core": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", @@ -17999,18 +19146,18 @@ } }, "node_modules/highlight.js": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.1.tgz", - "integrity": "sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, "engines": { "node": "*" } }, "node_modules/highlightjs-solidity": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-1.0.21.tgz", - "integrity": "sha512-ozOtTD986CBIxuIuauzz2lqCOTpd27TbfYm+msMtNSB69mJ0cdFNvZ6rOO5iFtEHtDkVYVEFQywXffG2sX3XTw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-1.1.0.tgz", + "integrity": "sha512-LtH7uuoe+FOmtQd41ozAZKLJC2chqdqs461FJcWAx00R3VcBhSQTRFfzRGtTQqu2wsVIEdHiyynrPrEDDWyIMw==", "dev": true }, "node_modules/hmac-drbg": { @@ -18120,10 +19267,9 @@ } }, "node_modules/htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -18134,7 +19280,7 @@ "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -18935,6 +20081,12 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "node_modules/json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -19048,6 +20200,15 @@ "graceful-fs": "^4.1.11" } }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -19130,15 +20291,6 @@ "node": ">=0.10.0" } }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -19286,6 +20438,15 @@ "node": ">=4" } }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -19392,6 +20553,18 @@ "node": ">= 0.6" } }, + "node_modules/mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -19625,6 +20798,15 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -20049,6 +21231,12 @@ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "devOptional": true }, + "node_modules/nano-base32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", + "integrity": "sha1-ulSMh578+5DaHE2eCX20pGySVe8=", + "dev": true + }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", @@ -20326,14 +21514,26 @@ } }, "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, "engines": { "node": ">=8" } }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -20352,7 +21552,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, "dependencies": { "boolbase": "^1.0.0" }, @@ -20962,15 +22161,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -21024,6 +22214,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -21121,9 +22320,9 @@ } }, "node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dependencies": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -21686,6 +22885,12 @@ "node": ">= 0.10" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -21713,15 +22918,15 @@ "optional": true }, "node_modules/renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dependencies": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" } }, "node_modules/renderkid/node_modules/ansi-regex": { @@ -21732,108 +22937,6 @@ "node": ">=0.10.0" } }, - "node_modules/renderkid/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/renderkid/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/renderkid/node_modules/domhandler/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/renderkid/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/renderkid/node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/renderkid/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/renderkid/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/renderkid/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -21990,6 +23093,18 @@ "node": ">=0.12" } }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -22010,6 +23125,15 @@ "inherits": "^2.0.1" } }, + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/rlp": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", @@ -22337,9 +23461,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "node_modules/simple-concat": { "version": "1.0.1", @@ -23391,6 +24513,15 @@ "node": ">=0.10.0" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-hex-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", @@ -24143,6 +25274,13 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, "node_modules/ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -24833,56 +25971,14 @@ } }, "node_modules/web3-core-helpers": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz", - "integrity": "sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", + "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", "dev": true, "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.9", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "node_modules/web3-core-helpers/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-core-helpers/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" + "underscore": "1.12.1", + "web3-eth-iban": "1.3.6", + "web3-utils": "1.3.6" }, "engines": { "node": ">=8.0.0" @@ -24905,27 +26001,7 @@ "node": ">=8.0.0" } }, - "node_modules/web3-core-method/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-core-method/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method/node_modules/web3-core-promievent": { + "node_modules/web3-core-promievent": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", @@ -24937,31 +26013,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-core-method/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz", - "integrity": "sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw==", - "dev": true, - "dependencies": { - "eventemitter3": "3.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-core-requestmanager": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.3.6.tgz", @@ -24979,33 +26030,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-core-subscriptions": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.3.6.tgz", @@ -25020,39 +26044,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-core/node_modules/@types/node": { "version": "12.20.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.13.tgz", @@ -25068,33 +26059,6 @@ "node": "*" } }, - "node_modules/web3-core/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-eth": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.3.6.tgz", @@ -25120,76 +26084,34 @@ } }, "node_modules/web3-eth-abi": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz", - "integrity": "sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", + "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", "dev": true, "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.9" + "@ethersproject/abi": "5.0.7", + "underscore": "1.12.1", + "web3-utils": "1.3.6" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz", - "integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", + "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", "dev": true, "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "node_modules/web3-eth-abi/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "node_modules/web3-eth-abi/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-abi/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "node_modules/web3-eth-abi/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" } }, "node_modules/web3-eth-accounts": { @@ -25234,33 +26156,6 @@ "uuid": "bin/uuid" } }, - "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-eth-contract": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.3.6.tgz", @@ -25281,82 +26176,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-eth-contract/node_modules/@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "dependencies": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "node_modules/web3-eth-contract/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", - "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-eth-ens": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.3.6.tgz", @@ -25377,70 +26196,7 @@ "node": ">=8.0.0" } }, - "node_modules/web3-eth-ens/node_modules/@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "dependencies": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "node_modules/web3-eth-ens/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", - "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { + "node_modules/web3-eth-iban": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", @@ -25453,61 +26209,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-eth-iban": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz", - "integrity": "sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "web3-utils": "1.2.9" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban/node_modules/bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "node_modules/web3-eth-iban/node_modules/eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-iban/node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "dependencies": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-eth-personal": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.3.6.tgz", @@ -25531,91 +26232,6 @@ "integrity": "sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A==", "dev": true }, - "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "dependencies": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "node_modules/web3-eth/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-net": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.3.6.tgz", @@ -25643,33 +26259,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-providers-http/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-providers-ipc": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.3.6.tgz", @@ -25684,33 +26273,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-providers-ws": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.3.6.tgz", @@ -25726,39 +26288,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "dependencies": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/web3-shh": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.3.6.tgz", @@ -26072,9 +26601,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "engines": { "node": ">=8.3.0" }, @@ -26318,6 +26847,30 @@ } }, "dependencies": { + "@babel/runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.5.tgz", + "integrity": "sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@ensdomains/address-encoder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", + "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", + "dev": true, + "requires": { + "bech32": "^1.1.3", + "blakejs": "^1.1.0", + "bn.js": "^4.11.8", + "bs58": "^4.0.1", + "crypto-addr-codec": "^0.1.7", + "nano-base32": "^1.0.1", + "ripemd160": "^2.0.2" + } + }, "@ensdomains/ens": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", @@ -26498,6 +27051,210 @@ } } }, + "@ensdomains/ensjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.0.1.tgz", + "integrity": "sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.4.4", + "@ensdomains/address-encoder": "^0.1.7", + "@ensdomains/ens": "0.4.3", + "@ensdomains/resolver": "0.2.4", + "content-hash": "^2.5.2", + "eth-ens-namehash": "^2.0.8", + "ethers": "^5.0.13", + "js-sha3": "^0.8.0" + }, + "dependencies": { + "@ensdomains/ens": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.3.tgz", + "integrity": "sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA==", + "dev": true, + "requires": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "ethereumjs-testrpc": "^6.0.3", + "ganache-cli": "^6.1.0", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "dev": true, + "requires": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } + } + }, "@ensdomains/resolver": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", @@ -27338,110 +28095,129 @@ } }, "@ethersproject/abstract-provider": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz", - "integrity": "sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz", + "integrity": "sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/networks": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/web": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/networks": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/web": "^5.3.0" } }, "@ethersproject/abstract-signer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz", - "integrity": "sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz", + "integrity": "sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg==", "dev": true, "requires": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0" + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0" } }, "@ethersproject/address": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.1.0.tgz", - "integrity": "sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.3.0.tgz", + "integrity": "sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/rlp": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/rlp": "^5.3.0" } }, "@ethersproject/base64": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.1.0.tgz", - "integrity": "sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.3.0.tgz", + "integrity": "sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0" + "@ethersproject/bytes": "^5.3.0" } }, "@ethersproject/basex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.1.0.tgz", - "integrity": "sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.3.0.tgz", + "integrity": "sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/properties": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/properties": "^5.3.0" } }, "@ethersproject/bignumber": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.1.1.tgz", - "integrity": "sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.3.0.tgz", + "integrity": "sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "bn.js": "^4.4.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "bn.js": "^4.11.9" } }, "@ethersproject/bytes": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.1.0.tgz", - "integrity": "sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.3.0.tgz", + "integrity": "sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw==", "dev": true, "requires": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/constants": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.1.0.tgz", - "integrity": "sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.3.0.tgz", + "integrity": "sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0" } }, "@ethersproject/contracts": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.1.1.tgz", - "integrity": "sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.3.0.tgz", + "integrity": "sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg==", "dev": true, "requires": { - "@ethersproject/abi": "^5.1.0", - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/transactions": "^5.1.0" + "@ethersproject/abi": "^5.3.0", + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/transactions": "^5.3.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.3.1.tgz", + "integrity": "sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" + } + } } }, "@ethersproject/hardware-wallets": { @@ -27459,297 +28235,277 @@ } }, "@ethersproject/hash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.1.0.tgz", - "integrity": "sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.3.0.tgz", + "integrity": "sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w==", "dev": true, "requires": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "@ethersproject/hdnode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.1.0.tgz", - "integrity": "sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.3.0.tgz", + "integrity": "sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g==", "dev": true, "requires": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/basex": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/pbkdf2": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/wordlists": "^5.1.0" + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/basex": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/pbkdf2": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/wordlists": "^5.3.0" } }, "@ethersproject/json-wallets": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz", - "integrity": "sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz", + "integrity": "sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw==", "dev": true, "requires": { - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hdnode": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/pbkdf2": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hdnode": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/pbkdf2": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } }, "@ethersproject/keccak256": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.1.0.tgz", - "integrity": "sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.3.0.tgz", + "integrity": "sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", + "@ethersproject/bytes": "^5.3.0", "js-sha3": "0.5.7" } }, "@ethersproject/logger": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.1.0.tgz", - "integrity": "sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.3.0.tgz", + "integrity": "sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA==", "dev": true }, "@ethersproject/networks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.1.0.tgz", - "integrity": "sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.3.1.tgz", + "integrity": "sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw==", "dev": true, "requires": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/pbkdf2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz", - "integrity": "sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz", + "integrity": "sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/sha2": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/sha2": "^5.3.0" } }, "@ethersproject/properties": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.1.0.tgz", - "integrity": "sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.3.0.tgz", + "integrity": "sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw==", "dev": true, "requires": { - "@ethersproject/logger": "^5.1.0" + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/providers": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.1.2.tgz", - "integrity": "sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.3.1.tgz", + "integrity": "sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg==", "dev": true, "requires": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/basex": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/networks": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/rlp": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/strings": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/web": "^5.1.0", + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/basex": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/networks": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/rlp": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/strings": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/web": "^5.3.0", "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": {} - } + "ws": "7.4.6" } }, "@ethersproject/random": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.1.0.tgz", - "integrity": "sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.3.0.tgz", + "integrity": "sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/rlp": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.1.0.tgz", - "integrity": "sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.3.0.tgz", + "integrity": "sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/sha2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.1.0.tgz", - "integrity": "sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.3.0.tgz", + "integrity": "sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "hash.js": "1.1.3" - }, - "dependencies": { - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - } + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "hash.js": "1.1.7" } }, "@ethersproject/signing-key": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.1.0.tgz", - "integrity": "sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.3.0.tgz", + "integrity": "sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "bn.js": "^4.4.0", - "elliptic": "6.5.4" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, "@ethersproject/solidity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.1.0.tgz", - "integrity": "sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.3.0.tgz", + "integrity": "sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/sha2": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/sha2": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "@ethersproject/strings": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.1.0.tgz", - "integrity": "sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.3.0.tgz", + "integrity": "sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/transactions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.1.1.tgz", - "integrity": "sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.3.0.tgz", + "integrity": "sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ==", "dev": true, "requires": { - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/rlp": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0" + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/rlp": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0" } }, "@ethersproject/units": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.1.0.tgz", - "integrity": "sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.3.0.tgz", + "integrity": "sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg==", "dev": true, "requires": { - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/constants": "^5.1.0", - "@ethersproject/logger": "^5.1.0" + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/logger": "^5.3.0" } }, "@ethersproject/wallet": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.1.0.tgz", - "integrity": "sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.3.0.tgz", + "integrity": "sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg==", "dev": true, "requires": { - "@ethersproject/abstract-provider": "^5.1.0", - "@ethersproject/abstract-signer": "^5.1.0", - "@ethersproject/address": "^5.1.0", - "@ethersproject/bignumber": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/hdnode": "^5.1.0", - "@ethersproject/json-wallets": "^5.1.0", - "@ethersproject/keccak256": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/random": "^5.1.0", - "@ethersproject/signing-key": "^5.1.0", - "@ethersproject/transactions": "^5.1.0", - "@ethersproject/wordlists": "^5.1.0" + "@ethersproject/abstract-provider": "^5.3.0", + "@ethersproject/abstract-signer": "^5.3.0", + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/hdnode": "^5.3.0", + "@ethersproject/json-wallets": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/random": "^5.3.0", + "@ethersproject/signing-key": "^5.3.0", + "@ethersproject/transactions": "^5.3.0", + "@ethersproject/wordlists": "^5.3.0" } }, "@ethersproject/web": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.1.0.tgz", - "integrity": "sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.3.0.tgz", + "integrity": "sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ==", "dev": true, "requires": { - "@ethersproject/base64": "^5.1.0", - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/base64": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "@ethersproject/wordlists": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.1.0.tgz", - "integrity": "sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.3.0.tgz", + "integrity": "sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ==", "dev": true, "requires": { - "@ethersproject/bytes": "^5.1.0", - "@ethersproject/hash": "^5.1.0", - "@ethersproject/logger": "^5.1.0", - "@ethersproject/properties": "^5.1.0", - "@ethersproject/strings": "^5.1.0" + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" } }, "@ledgerhq/cryptoassets": { @@ -28110,9 +28866,9 @@ "integrity": "sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ==" }, "@openzeppelin/test-helpers": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.10.tgz", - "integrity": "sha512-agXr5Rn/q0MCDaU0ioYMGQVjY32Ln3Ae3cyQKtESuKdDoEZ7g3Y7x4eUbT779OE9nQ+xQCytmVqjKvZvajURug==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz", + "integrity": "sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw==", "dev": true, "requires": { "@openzeppelin/contract-loader": "^0.6.2", @@ -28396,15 +29152,15 @@ } }, "@truffle/blockchain-utils": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.0.28.tgz", - "integrity": "sha512-Q3vtGzDAGI3q2OQV1rUX/HYGJ0PB4RKbrgnwSV3YLc01YOkv4baF5ZJbMxtgLDhJQap1llrN59u2BOAa+jVCsg==", + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.0.30.tgz", + "integrity": "sha512-3hkHSHxVavoALcxpBqD4YwHuCmkBrvjq6PAGw93i6WCB+pnejBD5sFjVCiZZKCogh4kGObxxcwu53+3dyT/6IQ==", "dev": true }, "@truffle/codec": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.10.2.tgz", - "integrity": "sha512-m396zHfF5ee8zv0O0SctVt0/FxGPv/x9pTm24BHlDz540S6wiWwarBb20QF4sXfJ7lwe6ZfwtyQHExuszCENlg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.0.tgz", + "integrity": "sha512-iWrd+DhYC4nHAfFzfuuiRK86ebkM4IXH4DFW9owVtWR0esexE96tjFAfwEI/mGaJ+ml430P7ybpuDYmVPVKO9w==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -28417,7 +29173,7 @@ "lodash.sum": "^4.0.2", "semver": "^7.3.4", "utf8": "^3.0.0", - "web3-utils": "1.2.9" + "web3-utils": "1.3.6" }, "dependencies": { "bn.js": { @@ -28426,25 +29182,6 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -28463,36 +29200,6 @@ "lru-cache": "^6.0.0" } }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - } - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -28502,38 +29209,26 @@ } }, "@truffle/contract": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.3.12.tgz", - "integrity": "sha512-gnOkZe28k/pwPkl4Ke9mj7UwLHDr6nq1ZitZOhukXvq5mf6Ll9hsHhGCwlzKnxdwKHHUpJ/1saqp6OjXOiJYEw==", + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.3.20.tgz", + "integrity": "sha512-kX3l3nRBGqHPfIkcmdVQDis3T8sR2Rt5H/mFs4A6GRxRCw5oj92J7YFkM5J8BY698GsmD8qAGUKFdUwHLcOPGA==", "dev": true, "requires": { - "@truffle/blockchain-utils": "^0.0.28", - "@truffle/contract-schema": "^3.3.4", - "@truffle/debug-utils": "^5.0.12", - "@truffle/error": "^0.0.12", - "@truffle/interface-adapter": "^0.4.20", + "@ensdomains/ensjs": "^2.0.1", + "@truffle/blockchain-utils": "^0.0.30", + "@truffle/contract-schema": "^3.4.1", + "@truffle/debug-utils": "^5.1.0", + "@truffle/error": "^0.0.14", + "@truffle/interface-adapter": "^0.5.0", "bignumber.js": "^7.2.1", - "ethereum-ens": "^0.8.0", "ethers": "^4.0.32", - "web3": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" + "web3": "1.3.6", + "web3-core-helpers": "1.3.6", + "web3-core-promievent": "1.3.6", + "web3-eth-abi": "1.3.6", + "web3-utils": "1.3.6" }, "dependencies": { - "@types/node": { - "version": "10.17.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.56.tgz", - "integrity": "sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, "elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", @@ -28549,17 +29244,6 @@ "minimalistic-crypto-utils": "^1.0.0" } }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, "ethers": { "version": "4.0.48", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz", @@ -28587,15 +29271,6 @@ "minimalistic-assert": "^1.0.0" } }, - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "requires": { - "http-https": "^1.0.0" - } - }, "scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", @@ -28608,321 +29283,18 @@ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", "dev": true }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, "uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", "dev": true - }, - "web3": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.9.tgz", - "integrity": "sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA==", - "dev": true, - "requires": { - "web3-bzz": "1.2.9", - "web3-core": "1.2.9", - "web3-eth": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-shh": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-bzz": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.9.tgz", - "integrity": "sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA==", - "dev": true, - "requires": { - "@types/node": "^10.12.18", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.9.tgz", - "integrity": "sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.4", - "@types/node": "^12.6.1", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-requestmanager": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "dev": true - } - } - }, - "web3-core-method": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.9.tgz", - "integrity": "sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg==", - "dev": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-core-requestmanager": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz", - "integrity": "sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-providers-http": "1.2.9", - "web3-providers-ipc": "1.2.9", - "web3-providers-ws": "1.2.9" - } - }, - "web3-core-subscriptions": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz", - "integrity": "sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg==", - "dev": true, - "requires": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - } - }, - "web3-eth": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.9.tgz", - "integrity": "sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-accounts": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-eth-ens": "1.2.9", - "web3-eth-iban": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-accounts": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz", - "integrity": "sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg==", - "dev": true, - "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "^0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "web3-eth-contract": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz", - "integrity": "sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.4", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-ens": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz", - "integrity": "sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-personal": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz", - "integrity": "sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ==", - "dev": true, - "requires": { - "@types/node": "^12.6.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - } - } - }, - "web3-net": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.9.tgz", - "integrity": "sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA==", - "dev": true, - "requires": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-providers-http": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.9.tgz", - "integrity": "sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A==", - "dev": true, - "requires": { - "web3-core-helpers": "1.2.9", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz", - "integrity": "sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ==", - "dev": true, - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - } - }, - "web3-providers-ws": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz", - "integrity": "sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "websocket": "^1.0.31" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } - } - }, - "web3-shh": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.9.tgz", - "integrity": "sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA==", - "dev": true, - "requires": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-net": "1.2.9" - } - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } } } }, "@truffle/contract-schema": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.3.4.tgz", - "integrity": "sha512-HzscBl/GhZBvPNQeD9l6ewSHSkvNmE+bA0iTVa0Y2mNf5GD5Y3fK2NPyfbOdtckOvLqebvYGEDEPRiXc3BZ05g==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.1.tgz", + "integrity": "sha512-2gvu6gxJtbbI67H2Bwh2rBuej+1uCV3z4zKFzQZP00hjNoL+QfybrmBcOVB88PflBeEB+oUXuwQfDoKX3TXlnQ==", "dev": true, "requires": { "ajv": "^6.10.0", @@ -28931,18 +29303,18 @@ } }, "@truffle/debug-utils": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-5.0.12.tgz", - "integrity": "sha512-NkdSLjAvyylZAOJeywYHzCWHkrAm0kVPVkZZUtsej0wAvzqqL6FWV/jy9wKtpAv5hYhCQBU9BKrPdfdTnE6dYA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-5.1.0.tgz", + "integrity": "sha512-TbGsML+jmFEPD9gx8nCueRe2b3Zz6pOATH9QYeEnyUIklySa7kRPw03ifecDyXl1/XCMDb+7+PhYoF0zeMQ4gA==", "dev": true, "requires": { - "@truffle/codec": "^0.10.2", + "@truffle/codec": "^0.11.0", "@trufflesuite/chromafi": "^2.2.2", "bn.js": "^5.1.3", "chalk": "^2.4.2", "debug": "^4.3.1", "highlight.js": "^10.4.0", - "highlightjs-solidity": "^1.0.21" + "highlightjs-solidity": "^1.1.0" }, "dependencies": { "ansi-styles": { @@ -29004,34 +29376,22 @@ } }, "@truffle/error": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.0.12.tgz", - "integrity": "sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g==", + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.0.14.tgz", + "integrity": "sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA==", "dev": true }, "@truffle/interface-adapter": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz", - "integrity": "sha512-GcdtXjU+Mhx/WuD3Af1thojHilhUAWtKfoNF09oEDyGSrS0QEWq9s9kOFjrfTFJrK+g0I6VXMrU2sIido96NBA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.0.tgz", + "integrity": "sha512-0MRt9orgQqo0knyKDy0fGRqnI+alkuK0BUAvHB1/VUJgCKyWBNAUUZO5gPjuj75qCjV4Rw+W6SKDQpn2xOWsXw==", "dev": true, "requires": { "bn.js": "^5.1.3", "ethers": "^4.0.32", - "web3": "1.2.9" + "web3": "1.3.6" }, "dependencies": { - "@types/node": { - "version": "10.17.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.56.tgz", - "integrity": "sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "dev": true - }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -29061,25 +29421,6 @@ } } }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "ethers": { "version": "4.0.48", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.48.tgz", @@ -29115,15 +29456,6 @@ "minimalistic-assert": "^1.0.0" } }, - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "requires": { - "http-https": "^1.0.0" - } - }, "scrypt-js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", @@ -29136,314 +29468,11 @@ "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", "dev": true }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, "uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", "dev": true - }, - "web3": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.9.tgz", - "integrity": "sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA==", - "dev": true, - "requires": { - "web3-bzz": "1.2.9", - "web3-core": "1.2.9", - "web3-eth": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-shh": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-bzz": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.9.tgz", - "integrity": "sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA==", - "dev": true, - "requires": { - "@types/node": "^10.12.18", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.9.tgz", - "integrity": "sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.4", - "@types/node": "^12.6.1", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-requestmanager": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - } - } - }, - "web3-core-method": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.9.tgz", - "integrity": "sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg==", - "dev": true, - "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-core-requestmanager": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz", - "integrity": "sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "web3-providers-http": "1.2.9", - "web3-providers-ipc": "1.2.9", - "web3-providers-ws": "1.2.9" - } - }, - "web3-core-subscriptions": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz", - "integrity": "sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg==", - "dev": true, - "requires": { - "eventemitter3": "3.1.2", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - } - }, - "web3-eth": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.9.tgz", - "integrity": "sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag==", - "dev": true, - "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-accounts": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-eth-ens": "1.2.9", - "web3-eth-iban": "1.2.9", - "web3-eth-personal": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-accounts": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz", - "integrity": "sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg==", - "dev": true, - "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "^0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "web3-eth-contract": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz", - "integrity": "sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.4", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-ens": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz", - "integrity": "sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-promievent": "1.2.9", - "web3-eth-abi": "1.2.9", - "web3-eth-contract": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-eth-personal": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz", - "integrity": "sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ==", - "dev": true, - "requires": { - "@types/node": "^12.6.1", - "web3-core": "1.2.9", - "web3-core-helpers": "1.2.9", - "web3-core-method": "1.2.9", - "web3-net": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "@types/node": { - "version": "12.20.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz", - "integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==", - "dev": true - } - } - }, - "web3-net": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.9.tgz", - "integrity": "sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA==", - "dev": true, - "requires": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-utils": "1.2.9" - } - }, - "web3-providers-http": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.9.tgz", - "integrity": "sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A==", - "dev": true, - "requires": { - "web3-core-helpers": "1.2.9", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz", - "integrity": "sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ==", - "dev": true, - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9" - } - }, - "web3-providers-ws": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz", - "integrity": "sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.9", - "websocket": "^1.0.31" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } - } - }, - "web3-shh": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.9.tgz", - "integrity": "sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA==", - "dev": true, - "requires": { - "web3-core": "1.2.9", - "web3-core-method": "1.2.9", - "web3-core-subscriptions": "1.2.9", - "web3-net": "1.2.9" - } - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } - } } } }, @@ -29526,7 +29555,9 @@ "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", "dev": true, - "requires": {} + "requires": { + "ethers": "^5.0.2" + } }, "@types/abstract-leveldown": { "version": "5.0.1", @@ -29680,15 +29711,14 @@ } }, "@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.1.tgz", + "integrity": "sha512-Mci9WJYLRjyJEBkGHMPxZ1ihJ9l6gOy2Gr6hpYZUNpQoe5+nbpeb3w00aP+PSHJygCF+fxJsqp7Af1zGDITzuw==", "requires": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", "postcss-selector-parser": "^6.0.2", "prettier": "^1.18.2", "source-map": "~0.6.1", @@ -29913,6 +29943,23 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", @@ -29955,6 +30002,34 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -30336,6 +30411,12 @@ "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", "dev": true }, + "big-integer": { + "version": "1.6.36", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", + "dev": true + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -30769,6 +30850,16 @@ } } }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", @@ -30815,31 +30906,39 @@ "dev": true }, "cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, "requires": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + } } }, - "cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "dev": true, "requires": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" } }, "chokidar": { @@ -31326,6 +31425,42 @@ } } }, + "crypto-addr-codec": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", + "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "dev": true, + "requires": { + "base-x": "^3.0.8", + "big-integer": "1.6.36", + "blakejs": "^1.1.0", + "bs58": "^4.0.1", + "ripemd160-min": "0.0.6", + "safe-buffer": "^5.2.0", + "sha3": "^2.1.1" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", + "dev": true, + "requires": { + "buffer": "6.0.3" + } + } + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -31376,23 +31511,21 @@ } }, "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", - "dev": true, + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "requires": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" } }, "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" }, "cssesc": { "version": "3.0.0", @@ -31579,13 +31712,12 @@ } }, "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" } }, @@ -31601,28 +31733,26 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", - "dev": true, + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "requires": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", - "dev": true, + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "requires": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dotenv": { @@ -31838,6 +31968,45 @@ "es6-symbol": "^3.1.1" } }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -31902,6 +32071,26 @@ } } }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -32065,20 +32254,6 @@ "setimmediate": "^1.0.5" } }, - "ethereum-ens": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", - "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", - "dev": true, - "requires": { - "bluebird": "^3.4.7", - "eth-ens-namehash": "^2.0.0", - "js-sha3": "^0.5.7", - "pako": "^1.0.4", - "underscore": "^1.8.3", - "web3": "^1.0.0-beta.34" - } - }, "ethereum-waffle": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz", @@ -32107,6 +32282,341 @@ "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", "dev": true }, + "ethereumjs-testrpc": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz", + "integrity": "sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA==", + "dev": true, + "requires": { + "webpack": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "tapable": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "ethereumjs-testrpc-sc": { "version": "6.1.6", "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", @@ -32141,41 +32651,60 @@ } }, "ethers": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.1.4.tgz", - "integrity": "sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.3.1.tgz", + "integrity": "sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw==", "dev": true, "requires": { - "@ethersproject/abi": "5.1.2", - "@ethersproject/abstract-provider": "5.1.0", - "@ethersproject/abstract-signer": "5.1.0", - "@ethersproject/address": "5.1.0", - "@ethersproject/base64": "5.1.0", - "@ethersproject/basex": "5.1.0", - "@ethersproject/bignumber": "5.1.1", - "@ethersproject/bytes": "5.1.0", - "@ethersproject/constants": "5.1.0", - "@ethersproject/contracts": "5.1.1", - "@ethersproject/hash": "5.1.0", - "@ethersproject/hdnode": "5.1.0", - "@ethersproject/json-wallets": "5.1.0", - "@ethersproject/keccak256": "5.1.0", - "@ethersproject/logger": "5.1.0", - "@ethersproject/networks": "5.1.0", - "@ethersproject/pbkdf2": "5.1.0", - "@ethersproject/properties": "5.1.0", - "@ethersproject/providers": "5.1.2", - "@ethersproject/random": "5.1.0", - "@ethersproject/rlp": "5.1.0", - "@ethersproject/sha2": "5.1.0", - "@ethersproject/signing-key": "5.1.0", - "@ethersproject/solidity": "5.1.0", - "@ethersproject/strings": "5.1.0", - "@ethersproject/transactions": "5.1.1", - "@ethersproject/units": "5.1.0", - "@ethersproject/wallet": "5.1.0", - "@ethersproject/web": "5.1.0", - "@ethersproject/wordlists": "5.1.0" + "@ethersproject/abi": "5.3.1", + "@ethersproject/abstract-provider": "5.3.0", + "@ethersproject/abstract-signer": "5.3.0", + "@ethersproject/address": "5.3.0", + "@ethersproject/base64": "5.3.0", + "@ethersproject/basex": "5.3.0", + "@ethersproject/bignumber": "5.3.0", + "@ethersproject/bytes": "5.3.0", + "@ethersproject/constants": "5.3.0", + "@ethersproject/contracts": "5.3.0", + "@ethersproject/hash": "5.3.0", + "@ethersproject/hdnode": "5.3.0", + "@ethersproject/json-wallets": "5.3.0", + "@ethersproject/keccak256": "5.3.0", + "@ethersproject/logger": "5.3.0", + "@ethersproject/networks": "5.3.1", + "@ethersproject/pbkdf2": "5.3.0", + "@ethersproject/properties": "5.3.0", + "@ethersproject/providers": "5.3.1", + "@ethersproject/random": "5.3.0", + "@ethersproject/rlp": "5.3.0", + "@ethersproject/sha2": "5.3.0", + "@ethersproject/signing-key": "5.3.0", + "@ethersproject/solidity": "5.3.0", + "@ethersproject/strings": "5.3.0", + "@ethersproject/transactions": "5.3.0", + "@ethersproject/units": "5.3.0", + "@ethersproject/wallet": "5.3.0", + "@ethersproject/web": "5.3.0", + "@ethersproject/wordlists": "5.3.0" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.3.1.tgz", + "integrity": "sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw==", + "dev": true, + "requires": { + "@ethersproject/address": "^5.3.0", + "@ethersproject/bignumber": "^5.3.0", + "@ethersproject/bytes": "^5.3.0", + "@ethersproject/constants": "^5.3.0", + "@ethersproject/hash": "^5.3.0", + "@ethersproject/keccak256": "^5.3.0", + "@ethersproject/logger": "^5.3.0", + "@ethersproject/properties": "^5.3.0", + "@ethersproject/strings": "^5.3.0" + } + } } }, "ethjs-abi": { @@ -32246,9 +32775,9 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true }, "events": { @@ -32265,6 +32794,50 @@ "safe-buffer": "^5.1.1" } }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, "exit-on-epipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", @@ -32845,6 +33418,781 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "ganache-cli": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", + "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", + "dev": true, + "requires": { + "ethereumjs-util": "6.2.1", + "source-map-support": "0.5.12", + "yargs": "13.2.4" + }, + "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "bundled": true, + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.11.2", + "bundled": true, + "dev": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "base-x": { + "version": "3.0.8", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "blakejs": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "bn.js": { + "version": "4.11.9", + "bundled": true, + "dev": true + }, + "brorand": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "bs58": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer-from": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "bundled": true, + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cliui": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "bundled": true, + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "elliptic": { + "version": "6.5.3", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "bundled": true, + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "bundled": true, + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "ethjs-util": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "hash-base": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash.js": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-hex-prefixed": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "keccak": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mem": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "node-addon-api": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "node-gyp-build": { + "version": "4.2.3", + "bundled": true, + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "pbkdf2": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "randombytes": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ripemd160": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.6", + "bundled": true, + "dev": true, + "requires": { + "bn.js": "^4.11.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true, + "dev": true + }, + "scrypt-js": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "secp256k1": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + }, + "source-map-support": { + "version": "0.5.12", + "bundled": true, + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "strip-hex-prefix": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "13.2.4", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.2", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "ganache-core": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", @@ -40667,15 +42015,15 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "highlight.js": { - "version": "10.7.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.1.tgz", - "integrity": "sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA==", + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true }, "highlightjs-solidity": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-1.0.21.tgz", - "integrity": "sha512-ozOtTD986CBIxuIuauzz2lqCOTpd27TbfYm+msMtNSB69mJ0cdFNvZ6rOO5iFtEHtDkVYVEFQywXffG2sX3XTw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-1.1.0.tgz", + "integrity": "sha512-LtH7uuoe+FOmtQd41ozAZKLJC2chqdqs461FJcWAx00R3VcBhSQTRFfzRGtTQqu2wsVIEdHiyynrPrEDDWyIMw==", "dev": true }, "hmac-drbg": { @@ -40767,14 +42115,13 @@ } }, "htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domutils": "^2.5.2", "entities": "^2.0.0" } }, @@ -41344,6 +42691,12 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -41444,6 +42797,12 @@ "graceful-fs": "^4.1.11" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -41503,14 +42862,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "loader-runner": { @@ -41638,6 +42989,12 @@ } } }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -41726,6 +43083,15 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -41921,6 +43287,12 @@ "mime-db": "1.46.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -42273,6 +43645,12 @@ "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "devOptional": true }, + "nano-base32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", + "integrity": "sha1-ulSMh578+5DaHE2eCX20pGySVe8=", + "dev": true + }, "nano-json-stream-parser": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", @@ -42521,11 +43899,20 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -42544,7 +43931,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, "requires": { "boolbase": "^1.0.0" } @@ -43023,14 +44409,6 @@ "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "pathval": { @@ -43068,6 +44446,12 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -43137,9 +44521,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -43595,6 +44979,12 @@ "resolve": "^1.1.6" } }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -43616,15 +45006,15 @@ "optional": true }, "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -43632,105 +45022,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - } - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -43853,6 +45144,15 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -43870,6 +45170,12 @@ "inherits": "^2.0.1" } }, + "ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", + "dev": true + }, "rlp": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", @@ -44132,9 +45438,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true, - "optional": true, - "peer": true + "dev": true }, "simple-concat": { "version": "1.0.1", @@ -45010,6 +46314,12 @@ "is-utf8": "^0.2.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-hex-prefix": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", @@ -45628,6 +46938,13 @@ } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -46220,80 +47537,18 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } } } }, "web3-core-helpers": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz", - "integrity": "sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", + "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", "dev": true, "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.9", - "web3-utils": "1.2.9" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } + "underscore": "1.12.1", + "web3-eth-iban": "1.3.6", + "web3-utils": "1.3.6" } }, "web3-core-method": { @@ -46308,53 +47563,15 @@ "web3-core-promievent": "1.3.6", "web3-core-subscriptions": "1.3.6", "web3-utils": "1.3.6" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-core-promievent": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", - "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-core-promievent": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz", - "integrity": "sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", + "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", "dev": true, "requires": { - "eventemitter3": "3.1.2" + "eventemitter3": "4.0.4" } }, "web3-core-requestmanager": { @@ -46369,29 +47586,6 @@ "web3-providers-http": "1.3.6", "web3-providers-ipc": "1.3.6", "web3-providers-ws": "1.3.6" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-core-subscriptions": { @@ -46403,35 +47597,6 @@ "eventemitter3": "4.0.4", "underscore": "1.12.1", "web3-core-helpers": "1.3.6" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-eth": { @@ -46453,6 +47618,17 @@ "web3-eth-personal": "1.3.6", "web3-net": "1.3.6", "web3-utils": "1.3.6" + } + }, + "web3-eth-abi": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", + "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.0.7", + "underscore": "1.12.1", + "web3-utils": "1.3.6" }, "dependencies": { "@ethersproject/abi": { @@ -46471,107 +47647,6 @@ "@ethersproject/properties": "^5.0.3", "@ethersproject/strings": "^5.0.4" } - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } - } - }, - "web3-eth-abi": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz", - "integrity": "sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.9" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz", - "integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==", - "dev": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } } } }, @@ -46610,27 +47685,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } } } }, @@ -46649,72 +47703,6 @@ "web3-core-subscriptions": "1.3.6", "web3-eth-abi": "1.3.6", "web3-utils": "1.3.6" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-core-promievent": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", - "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-eth-ens": { @@ -46732,123 +47720,16 @@ "web3-eth-abi": "1.3.6", "web3-eth-contract": "1.3.6", "web3-utils": "1.3.6" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.0.4", - "@ethersproject/bignumber": "^5.0.7", - "@ethersproject/bytes": "^5.0.4", - "@ethersproject/constants": "^5.0.4", - "@ethersproject/hash": "^5.0.4", - "@ethersproject/keccak256": "^5.0.3", - "@ethersproject/logger": "^5.0.5", - "@ethersproject/properties": "^5.0.3", - "@ethersproject/strings": "^5.0.4" - } - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-core-promievent": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz", - "integrity": "sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==", - "dev": true, - "requires": { - "eventemitter3": "4.0.4" - } - }, - "web3-eth-abi": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz", - "integrity": "sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.0.7", - "underscore": "1.12.1", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-eth-iban": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz", - "integrity": "sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", + "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.2.9" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true - }, - "web3-utils": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz", - "integrity": "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "eth-lib": "0.2.7", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - } - } + "bn.js": "^4.11.9", + "web3-utils": "1.3.6" } }, "web3-eth-personal": { @@ -46870,27 +47751,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.13.tgz", "integrity": "sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A==", "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } } } }, @@ -46913,29 +47773,6 @@ "requires": { "web3-core-helpers": "1.3.6", "xhr2-cookies": "1.1.0" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-providers-ipc": { @@ -46947,29 +47784,6 @@ "oboe": "2.1.5", "underscore": "1.12.1", "web3-core-helpers": "1.3.6" - }, - "dependencies": { - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-providers-ws": { @@ -46982,35 +47796,6 @@ "underscore": "1.12.1", "web3-core-helpers": "1.3.6", "websocket": "^1.0.32" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "web3-core-helpers": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz", - "integrity": "sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==", - "dev": true, - "requires": { - "underscore": "1.12.1", - "web3-eth-iban": "1.3.6", - "web3-utils": "1.3.6" - } - }, - "web3-eth-iban": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz", - "integrity": "sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.3.6" - } - } } }, "web3-shh": { @@ -47268,9 +48053,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, "xhr": { From d0bd1ee78bbcc0f209a88009b8ed524240237214 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Tue, 15 Jun 2021 19:43:35 +0530 Subject: [PATCH 25/52] auth connector update --- contracts/mainnet/connectors/authority/main.sol | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/authority/main.sol b/contracts/mainnet/connectors/authority/main.sol index 395ac77e..c6da4204 100644 --- a/contracts/mainnet/connectors/authority/main.sol +++ b/contracts/mainnet/connectors/authority/main.sol @@ -18,7 +18,13 @@ abstract contract AuthorityResolver is Events, Helpers { function add( address authority ) external payable returns (string memory _eventName, bytes memory _eventParam) { - AccountInterface(address(this)).enable(authority); + + AccountInterface _dsa = AccountInterface(address(this)); + if (_dsa.isAuth(authority)) { + authority = address(0); + } else { + _dsa.enable(authority); + } _eventName = "LogAddAuth(address,address)"; _eventParam = abi.encode(msg.sender, authority); @@ -33,7 +39,12 @@ abstract contract AuthorityResolver is Events, Helpers { address authority ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(checkAuthCount() > 1, "Removing-all-authorities"); - AccountInterface(address(this)).disable(authority); + AccountInterface _dsa = AccountInterface(address(this)); + if (_dsa.isAuth(authority)) { + _dsa.disable(authority); + } else { + authority = address(0); + } _eventName = "LogRemoveAuth(address,address)"; _eventParam = abi.encode(msg.sender, authority); From e9281116fdc18be8acc189a35b09a094c8000edd Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Tue, 15 Jun 2021 21:21:19 +0530 Subject: [PATCH 26/52] Minor updates --- .../connectors/erc20_staking/helpers.sol | 6 +- .../connectors/erc20_staking/interface.sol | 2 +- .../mainnet/connectors/erc20_staking/main.sol | 2 +- contracts/mainnet/mapping/StakeERC20.sol | 119 ++++++++++++++++++ 4 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 contracts/mainnet/mapping/StakeERC20.sol diff --git a/contracts/mainnet/connectors/erc20_staking/helpers.sol b/contracts/mainnet/connectors/erc20_staking/helpers.sol index a00c5ccb..f559e69e 100644 --- a/contracts/mainnet/connectors/erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/erc20_staking/helpers.sol @@ -5,7 +5,7 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; import { TokenInterface } from "../../common/interfaces.sol"; -import { IStakingRewards, SynthetixMapping } from "./interface.sol"; +import { IStakingRewards, StakingERC20Mapping } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { @@ -34,7 +34,7 @@ abstract contract Helpers is DSMath, Basic { ) { stakingType = stringToBytes32(stakingName); - SynthetixMapping.StakingData memory stakingData = SynthetixMapping(getMappingAddr()).stakingMapping(stakingType); + StakingERC20Mapping.StakingData memory stakingData = StakingERC20Mapping(getMappingAddr()).stakingMapping(stakingType); require(stakingData.stakingPool != address(0) && stakingData.stakingToken != address(0), "Wrong Staking Name"); stakingContract = IStakingRewards(stakingData.stakingPool); stakingToken = TokenInterface(stakingData.stakingToken); @@ -42,7 +42,7 @@ abstract contract Helpers is DSMath, Basic { } function getMappingAddr() internal virtual view returns (address) { - return 0x4a56E4209F0757CE630a2ebCF45DCe5BAfcb9782; // InstaMapping Address + return 0xbE658233bA9990d86155b3902fd05a7AfC7eBdB5; // InstaMapping Address } } \ No newline at end of file diff --git a/contracts/mainnet/connectors/erc20_staking/interface.sol b/contracts/mainnet/connectors/erc20_staking/interface.sol index dad42611..d9a209fd 100644 --- a/contracts/mainnet/connectors/erc20_staking/interface.sol +++ b/contracts/mainnet/connectors/erc20_staking/interface.sol @@ -8,7 +8,7 @@ interface IStakingRewards { function balanceOf(address) external view returns(uint); } -interface SynthetixMapping { +interface StakingERC20Mapping { struct StakingData { address stakingPool; diff --git a/contracts/mainnet/connectors/erc20_staking/main.sol b/contracts/mainnet/connectors/erc20_staking/main.sol index d72201bc..176b21fa 100644 --- a/contracts/mainnet/connectors/erc20_staking/main.sol +++ b/contracts/mainnet/connectors/erc20_staking/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../common/interfaces.sol"; import { Stores } from "../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { IStakingRewards, SynthetixMapping } from "./interface.sol"; +import { IStakingRewards, StakingERC20Mapping } from "./interface.sol"; contract Main is Helpers, Events { diff --git a/contracts/mainnet/mapping/StakeERC20.sol b/contracts/mainnet/mapping/StakeERC20.sol new file mode 100644 index 00000000..4594d9b8 --- /dev/null +++ b/contracts/mainnet/mapping/StakeERC20.sol @@ -0,0 +1,119 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +interface ConnectorsInterface { + function chief(address) external view returns (bool); +} + +interface IndexInterface { + function master() external view returns (address); +} + +contract BytesHelper { + /** + * @dev Convert String to bytes32. + */ + function stringToBytes32(string memory str) internal pure returns (bytes32 result) { + require(bytes(str).length != 0, "String-Empty"); + // solium-disable-next-line security/no-inline-assembly + assembly { + result := mload(add(str, 32)) + } + } + + /** + * @dev Convert bytes32 to String. + */ + function bytes32ToString(bytes32 _bytes32) internal pure returns (string memory) { + bytes32 _temp; + uint count; + for (uint256 i; i < 32; i++) { + _temp = _bytes32[i]; + if( _temp != bytes32(0)) { + count += 1; + } + } + bytes memory bytesArray = new bytes(count); + for (uint256 i; i < count; i++) { + bytesArray[i] = (_bytes32[i]); + } + return (string(bytesArray)); + } +} + +contract Helpers is BytesHelper { + address public constant connectorsV2 = 0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11; + address public constant instaIndex = 0x2971AdFa57b20E5a416aE5a708A8655A9c74f723; + + mapping (bytes32 => StakingData) public stakingMapping; + + struct StakingData { + address stakingPool; + address stakingToken; + address rewardToken; + } + + event LogAddStakingMapping( + string stakingName, + bytes32 stakingType, + address stakingAddress, + address stakingToken, + address rewardToken + ); + event LogRemoveStakingMapping( + string stakingName, + bytes32 stakingType, + address stakingAddress, + address stakingToken, + address rewardToken + ); + + modifier isChief virtual { + require( + ConnectorsInterface(connectorsV2).chief(msg.sender) || + IndexInterface(instaIndex).master() == msg.sender, "not-Chief"); + _; + } + + function addStakingMapping( + string memory stakingName, + address stakingAddress, + address stakingToken, + address rewardToken + ) public isChief { + require(stakingAddress != address(0), "stakingAddress-not-vaild"); + require(stakingToken != address(0), "stakingToken-not-vaild"); + require(rewardToken != address(0), "rewardToken-not-vaild"); + require(bytes(stakingName).length <= 32, "Length-exceeds"); + bytes32 stakeType = stringToBytes32(stakingName); + require(stakingMapping[stakeType].stakingPool == address(0), "StakingPool-already-added"); + require(stakingMapping[stakeType].stakingToken == address(0), "StakingToken-already-added"); + require(stakingMapping[stakeType].rewardToken == address(0), "rewardToken-already-added"); + + stakingMapping[stakeType] = StakingData( + stakingAddress, + stakingToken, + rewardToken + ); + emit LogAddStakingMapping(stakingName, stakeType, stakingAddress, stakingToken, rewardToken); + } + + function removeStakingMapping(string memory stakingName, address stakingAddress) public isChief { + require(stakingAddress != address(0), "stakingAddress-not-vaild"); + bytes32 stakeType = stringToBytes32(stakingName); + require(stakingMapping[stakeType].stakingPool == stakingAddress, "different-staking-pool"); + + emit LogRemoveStakingMapping( + stakingName, + stakeType, + stakingAddress, + stakingMapping[stakeType].stakingToken, + stakingMapping[stakeType].rewardToken + ); + delete stakingMapping[stakeType]; + } +} + +contract InstaStakingERC20Mapping is Helpers { + string constant public name = "Staking-ERC20-Mapping-v1"; +} From f9b3e6b8e40d52537fd9b251556cf6e2fad9e5c9 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Tue, 15 Jun 2021 21:44:04 +0530 Subject: [PATCH 27/52] Updated auth connector address --- contracts/mainnet/connectors/authority/main.sol | 5 +++-- docs/connectors.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/mainnet/connectors/authority/main.sol b/contracts/mainnet/connectors/authority/main.sol index c6da4204..df315b3d 100644 --- a/contracts/mainnet/connectors/authority/main.sol +++ b/contracts/mainnet/connectors/authority/main.sol @@ -18,7 +18,7 @@ abstract contract AuthorityResolver is Events, Helpers { function add( address authority ) external payable returns (string memory _eventName, bytes memory _eventParam) { - + require(authority != address(0), "Not-valid-authority"); AccountInterface _dsa = AccountInterface(address(this)); if (_dsa.isAuth(authority)) { authority = address(0); @@ -39,6 +39,7 @@ abstract contract AuthorityResolver is Events, Helpers { address authority ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(checkAuthCount() > 1, "Removing-all-authorities"); + require(authority != address(0), "Not-valid-authority"); AccountInterface _dsa = AccountInterface(address(this)); if (_dsa.isAuth(authority)) { _dsa.disable(authority); @@ -52,5 +53,5 @@ abstract contract AuthorityResolver is Events, Helpers { } contract ConnectV2Auth is AuthorityResolver { - string public constant name = "Auth-v1"; + string public constant name = "Auth-v1.1"; } diff --git a/docs/connectors.json b/docs/connectors.json index 8a75fb05..9c041b20 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -3,7 +3,7 @@ "1INCH-A": "0x2A6d6d4EE84015F7D64B4d1F66a409bA3f2BAC00", "AAVE-V1-A": "0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14", "AAVE-V2-A": "0x497Bc53507DF17e60F731e9534cff74E8BC9DBb8", - "AUTHORITY-A": "0x6CE3e607C808b4f4C26B7F6aDAeB619e49CAbb25", + "AUTHORITY-A": "0x351Bb32e90C35647Df7a584f3c1a3A0c38F31c68", "BASIC-A": "0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687", "COMP-A": "0xB446e325D44C52b93eC122Bf76301f235f90B9c9", "COMPOUND-A": "0x911F4e4e762AeFA6F2Fc1b24e6B1A928200a88a8", From 38fa0bfe95a6b6a13b25ec5d905236ce57424d95 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Wed, 16 Jun 2021 14:04:18 +0530 Subject: [PATCH 28/52] updated connector to fetch factory from resolvers --- .../connectors/uniswap_v3_erc20_staking/helpers.sol | 8 ++++---- .../connectors/uniswap_v3_erc20_staking/interface.sol | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol index b472780d..e409b6f5 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol @@ -9,14 +9,14 @@ import { IStakingRewards, IStakingRewardsFactory } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { - IStakingRewardsFactory constant internal stakingRewardsFactory = - IStakingRewardsFactory(address(0)); // TODO + IGUniPoolResolver constant internal guniResolver = + IGUniPoolResolver(0x729BF02a9A786529Fc80498f8fd0051116061B13); - TokenInterface constant internal rewardToken = TokenInterface(address(0)); // TODO + TokenInterface constant internal rewardToken = TokenInterface(0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb); function getStakingContract(address stakingToken) internal view returns (address) { IStakingRewardsFactory.StakingRewardsInfo memory stakingRewardsInfo = - stakingRewardsFactory.stakingRewardsInfoByStakingToken(stakingToken); + guniResolver.getStakingFactory().stakingRewardsInfoByStakingToken(stakingToken); return stakingRewardsInfo.stakingRewards; } diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol index 78e732a6..73ccbe03 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol @@ -17,4 +17,10 @@ interface IStakingRewardsFactory { function stakingRewardsInfoByStakingToken(address) external view returns(StakingRewardsInfo memory); +} + +interface IGUniPoolResolver { + + function getStakingFactory() external view returns(IStakingRewardsFactory); + } \ No newline at end of file From 30f203f54ad71691cfda60d1608c4e2e72d328ab Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 16 Jun 2021 14:13:16 +0530 Subject: [PATCH 29/52] Minor fix --- .../mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol index e409b6f5..1d0c6d94 100644 --- a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol +++ b/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol @@ -5,7 +5,7 @@ pragma experimental ABIEncoderV2; import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; import { TokenInterface } from "../../common/interfaces.sol"; -import { IStakingRewards, IStakingRewardsFactory } from "./interface.sol"; +import { IStakingRewards, IStakingRewardsFactory, IGUniPoolResolver } from "./interface.sol"; abstract contract Helpers is DSMath, Basic { From 5e7787743760cfca4fe487c8fe79ca33046f274e Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 17 Jun 2021 23:29:11 +0530 Subject: [PATCH 30/52] Added new connector addresses --- docs/connectors.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/connectors.json b/docs/connectors.json index 9c041b20..33a8e336 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -1,6 +1,7 @@ { "1" : { "1INCH-A": "0x2A6d6d4EE84015F7D64B4d1F66a409bA3f2BAC00", + "1INCH-B": "0x36880391afb430e99d43fe94217446b56d4f2c5b", "AAVE-V1-A": "0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14", "AAVE-V2-A": "0x497Bc53507DF17e60F731e9534cff74E8BC9DBb8", "AUTHORITY-A": "0x351Bb32e90C35647Df7a584f3c1a3A0c38F31c68", @@ -11,7 +12,13 @@ "UNISWAP-A": "0xA4BF319968986D2352FA1c550D781bBFCCE3FcaB", "POLYGON-BRIDGE-A": "0x1b79B302132370B434fb7807b36CB72FB0510aD5", "AAVE-CLAIM-A": "0x611C1FA59Aa1d6352c4C8bD44882063c6aEE85E0", - "AAVE-STAKE-A": "0xf73c94402bc24148b744083ed02654eec2c37d5b" + "AAVE-STAKE-A": "0xf73c94402bc24148b744083ed02654eec2c37d5b", + "G-UNISWAP-A": "0x2fca923c7535083f25f761dcf289d7d81f024dda", + "INST-STAKING-A": "0x37a63939e128d284e0eae5d3e517aad44f5204d4", + "AAVE-V2-IMPORT-B": "0x6fe05374924830B6aC98849f75A3D5766E51Ef10", + "COMPOUND-IMPORT-B": "0xdA101870ca6136539628F28041E1B55baf4EB6C0", + "INSTAPOOL-A": "0x5806Af7AB22E2916fA582Ff05731Bf7C682387B2", + "MAKERDAO-CLAIM-A": "0x2f8cBE650af98602a215b6482F2aD60893C5A4E8" }, "137" : { "AAVE-V2-A": "0xE84d8010Afc3663919F44685cB53ED88866da3eE", From 395a98a640e8edb1afcb5c4aa819206116686043 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 17 Jun 2021 23:36:34 +0530 Subject: [PATCH 31/52] Added Vault Transfer function --- .../mainnet/connectors/makerdao/main.sol | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/makerdao/main.sol b/contracts/mainnet/connectors/makerdao/main.sol index 9e7f8a0f..a6d73cc8 100644 --- a/contracts/mainnet/connectors/makerdao/main.sol +++ b/contracts/mainnet/connectors/makerdao/main.sol @@ -5,7 +5,7 @@ pragma solidity ^0.7.0; * @dev Collateralized Borrowing. */ -import { TokenInterface } from "../../common/interfaces.sol"; +import { TokenInterface, AccountInterface } from "../../common/interfaces.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; import { VatLike, TokenJoinInterface } from "./interface.sol"; @@ -44,6 +44,29 @@ abstract contract MakerResolver is Helpers, Events { _eventParam = abi.encode(_vault, ilk); } + /** + * @dev Transfer Vault + * @notice Transfer a MakerDAO Vault to "nextOwner" + * @param vault Vault ID to close. + * @param nextOwner Address of the next owner of the vault. + */ + function transfer( + uint vault, + address nextOwner + ) external payable returns (string memory _eventName, bytes memory _eventParam) { + require(AccountInterface(address(this)).isAuth(nextOwner), "nextOwner-is-not-auth"); + + uint256 _vault = getVault(vault); + (bytes32 ilk,) = getVaultData(_vault); + + require(managerContract.owns(_vault) == address(this), "not-owner"); + + managerContract.give(_vault, nextOwner); + + _eventName = "LogTransfer(uint256,bytes32,address)"; + _eventParam = abi.encode(_vault, ilk, nextOwner); + } + /** * @dev Deposit ETH/ERC20_Token Collateral. * @notice Deposit collateral to a MakerDAO vault From 83c4327c3779e130a2c964d9922a023b78d5b378 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 17 Jun 2021 23:39:58 +0530 Subject: [PATCH 32/52] Updated connector name --- contracts/mainnet/connectors/makerdao/main.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/makerdao/main.sol b/contracts/mainnet/connectors/makerdao/main.sol index a6d73cc8..e9240770 100644 --- a/contracts/mainnet/connectors/makerdao/main.sol +++ b/contracts/mainnet/connectors/makerdao/main.sol @@ -518,6 +518,6 @@ abstract contract MakerResolver is Helpers, Events { } } -contract ConnectV2Maker is MakerResolver { - string public constant name = "MakerDao-v1"; +contract ConnectV2MakerDAO is MakerResolver { + string public constant name = "MakerDAO-v1.1"; } From 7a6e4dae64fb733f02179bbb9a932e0a32b51b7e Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 00:22:20 +0530 Subject: [PATCH 33/52] Updated connector address --- docs/connectors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connectors.json b/docs/connectors.json index 33a8e336..d15c2691 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -8,7 +8,7 @@ "BASIC-A": "0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687", "COMP-A": "0xB446e325D44C52b93eC122Bf76301f235f90B9c9", "COMPOUND-A": "0x911F4e4e762AeFA6F2Fc1b24e6B1A928200a88a8", - "MAKERDAO-A": "0x839c2D3aDe63DF5b0b8F3E57D5e145057Ab41556", + "MAKERDAO-A": "0xb1919878644C29ba74B97F476aC59cb276559450", "UNISWAP-A": "0xA4BF319968986D2352FA1c550D781bBFCCE3FcaB", "POLYGON-BRIDGE-A": "0x1b79B302132370B434fb7807b36CB72FB0510aD5", "AAVE-CLAIM-A": "0x611C1FA59Aa1d6352c4C8bD44882063c6aEE85E0", From 38d4f23289f5fffddf8705ccdcb88513591d3006 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 13:58:08 +0530 Subject: [PATCH 34/52] ETH withdraw issue fixed on maker --- contracts/mainnet/connectors/makerdao/helpers.sol | 2 +- contracts/mainnet/connectors/reflexer/helpers.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/makerdao/helpers.sol b/contracts/mainnet/connectors/makerdao/helpers.sol index a6c2b506..af322ef5 100644 --- a/contracts/mainnet/connectors/makerdao/helpers.sol +++ b/contracts/mainnet/connectors/makerdao/helpers.sol @@ -43,7 +43,7 @@ abstract contract Helpers is DSMath, Basic { * @dev Gem Join address is ETH type collateral. */ function isEth(address tknAddr) internal pure returns (bool) { - return tknAddr == ethAddr ? true : false; + return tknAddr == wethAddr ? true : false; } /** diff --git a/contracts/mainnet/connectors/reflexer/helpers.sol b/contracts/mainnet/connectors/reflexer/helpers.sol index abcba530..c46776a7 100644 --- a/contracts/mainnet/connectors/reflexer/helpers.sol +++ b/contracts/mainnet/connectors/reflexer/helpers.sol @@ -57,7 +57,7 @@ abstract contract Helpers is DSMath, Basic { * @dev Collateral Join address is ETH type collateral. */ function isEth(address tknAddr) internal pure returns (bool) { - return tknAddr == ethAddr ? true : false; + return tknAddr == wethAddr ? true : false; } /** From 9e72e7487d8d66f608379294460aa264087a99c3 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:05:38 +0530 Subject: [PATCH 35/52] Updated connector address --- docs/connectors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/connectors.json b/docs/connectors.json index d15c2691..181f1e5a 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -8,7 +8,7 @@ "BASIC-A": "0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687", "COMP-A": "0xB446e325D44C52b93eC122Bf76301f235f90B9c9", "COMPOUND-A": "0x911F4e4e762AeFA6F2Fc1b24e6B1A928200a88a8", - "MAKERDAO-A": "0xb1919878644C29ba74B97F476aC59cb276559450", + "MAKERDAO-A": "0x29AA7b765008b5dDbD687413B7F0D6E9d349F765", "UNISWAP-A": "0xA4BF319968986D2352FA1c550D781bBFCCE3FcaB", "POLYGON-BRIDGE-A": "0x1b79B302132370B434fb7807b36CB72FB0510aD5", "AAVE-CLAIM-A": "0x611C1FA59Aa1d6352c4C8bD44882063c6aEE85E0", From 48d4067f89dd942d6692dfdd5cdad764ffe52967 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:13:03 +0530 Subject: [PATCH 36/52] Added WETH connector --- contracts/mainnet/connectors/weth/events.sol | 6 ++ contracts/mainnet/connectors/weth/main.sol | 68 ++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 contracts/mainnet/connectors/weth/events.sol create mode 100644 contracts/mainnet/connectors/weth/main.sol diff --git a/contracts/mainnet/connectors/weth/events.sol b/contracts/mainnet/connectors/weth/events.sol new file mode 100644 index 00000000..f8ec366a --- /dev/null +++ b/contracts/mainnet/connectors/weth/events.sol @@ -0,0 +1,6 @@ +pragma solidity ^0.7.0; + +contract Events { + event LogDeposit(uint256 tokenAmt, uint256 getId, uint256 setId); + event LogWithdraw(uint256 tokenAmt, uint256 getId, uint256 setId); +} diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol new file mode 100644 index 00000000..da0a3cb7 --- /dev/null +++ b/contracts/mainnet/connectors/weth/main.sol @@ -0,0 +1,68 @@ +pragma solidity ^0.7.0; + +/** + * @title Basic. + * @dev Deposit & Withdraw from DSA. + */ + +import { TokenInterface } from "../../common/interfaces.sol"; + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { Events } from "./events.sol"; + +abstract contract Resolver is Events, DSMath, Basic { + + /** + * @dev Deposit ETH into WETH. + * @notice Wrap ETH into WETH + * @param amt The amount of ETH to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of ETH deposited. + */ + function deposit( + uint256 amt, + uint256 getId, + uint256 setId + ) public payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + TokenInterface tokenContract = TokenInterface(wethAddr); + _amt = _amt == uint(-1) ? tokenContract.balanceOf(msg.sender) : _amt; + tokenContract.deposit{value: _amt}(); + + setUint(setId, _amt); + + _eventName = "LogDeposit(uint256,uint256,uint256)"; + _eventParam = abi.encode(_amt, getId, setId); + } + + /** + * @dev Withdraw ETH from WETH from Smart Account + * @notice Unwrap ETH from WETH + * @param amt The amount of weth to withdraw. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of ETH withdrawn. + */ + function withdraw( + uint amt, + uint getId, + uint setId + ) public payable returns (string memory _eventName, bytes memory _eventParam) { + uint _amt = getUint(getId, amt); + + _amt = _amt == uint(-1) ? address(this).balance : _amt; + TokenInterface tokenContract = TokenInterface(wethAddr); + tokenContract.approve(wethAddr, _amt); + tokenContract.withdraw(_amt); + + setUint(setId, _amt); + + _eventName = "LogWithdraw(uint256,uint256,uint256)"; + _eventParam = abi.encode(_amt, getId, setId); + } +} + +contract ConnectV2WETH is Resolver { + string constant public name = "WETH-v1"; +} From d84e3342a82f6e7922a6496028537d7dfd4d84d8 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:17:11 +0530 Subject: [PATCH 37/52] Minor fix --- contracts/mainnet/connectors/weth/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol index da0a3cb7..72cdf344 100644 --- a/contracts/mainnet/connectors/weth/main.sol +++ b/contracts/mainnet/connectors/weth/main.sol @@ -28,7 +28,7 @@ abstract contract Resolver is Events, DSMath, Basic { uint _amt = getUint(getId, amt); TokenInterface tokenContract = TokenInterface(wethAddr); - _amt = _amt == uint(-1) ? tokenContract.balanceOf(msg.sender) : _amt; + _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt; tokenContract.deposit{value: _amt}(); setUint(setId, _amt); From 32666224cf52f214069c9cee990fc6ee6b87635b Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:18:20 +0530 Subject: [PATCH 38/52] Updated connector name --- contracts/mainnet/connectors/weth/main.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol index 72cdf344..1f6d00b2 100644 --- a/contracts/mainnet/connectors/weth/main.sol +++ b/contracts/mainnet/connectors/weth/main.sol @@ -28,7 +28,7 @@ abstract contract Resolver is Events, DSMath, Basic { uint _amt = getUint(getId, amt); TokenInterface tokenContract = TokenInterface(wethAddr); - _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt; + _amt = _amt == uint(-1) ? address(this).balance : _amt; tokenContract.deposit{value: _amt}(); setUint(setId, _amt); @@ -51,8 +51,8 @@ abstract contract Resolver is Events, DSMath, Basic { ) public payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); - _amt = _amt == uint(-1) ? address(this).balance : _amt; TokenInterface tokenContract = TokenInterface(wethAddr); + _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt; tokenContract.approve(wethAddr, _amt); tokenContract.withdraw(_amt); @@ -64,5 +64,5 @@ abstract contract Resolver is Events, DSMath, Basic { } contract ConnectV2WETH is Resolver { - string constant public name = "WETH-v1"; + string constant public name = "WETH-v1.0"; } From 667241cf0bb9ff45b59cfa0129936a2e2cba62e6 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:25:16 +0530 Subject: [PATCH 39/52] Hardcoded wethContract --- contracts/mainnet/connectors/weth/helpers.sol | 8 ++++++++ contracts/mainnet/connectors/weth/main.sol | 15 ++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 contracts/mainnet/connectors/weth/helpers.sol diff --git a/contracts/mainnet/connectors/weth/helpers.sol b/contracts/mainnet/connectors/weth/helpers.sol new file mode 100644 index 00000000..ad69ac7d --- /dev/null +++ b/contracts/mainnet/connectors/weth/helpers.sol @@ -0,0 +1,8 @@ +pragma solidity ^0.7.0; + +import { TokenInterface } from "../../common/interfaces.sol"; + + +abstract contract Helpers { + TokenInterface wethContract = TokenInterface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); +} diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol index 1f6d00b2..cbab1c6b 100644 --- a/contracts/mainnet/connectors/weth/main.sol +++ b/contracts/mainnet/connectors/weth/main.sol @@ -5,13 +5,12 @@ pragma solidity ^0.7.0; * @dev Deposit & Withdraw from DSA. */ -import { TokenInterface } from "../../common/interfaces.sol"; - import { DSMath } from "../../common/math.sol"; import { Basic } from "../../common/basic.sol"; import { Events } from "./events.sol"; +import { Helpers } from "./helpers.sol"; -abstract contract Resolver is Events, DSMath, Basic { +abstract contract Resolver is Events, DSMath, Basic, Helpers { /** * @dev Deposit ETH into WETH. @@ -27,9 +26,8 @@ abstract contract Resolver is Events, DSMath, Basic { ) public payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); - TokenInterface tokenContract = TokenInterface(wethAddr); _amt = _amt == uint(-1) ? address(this).balance : _amt; - tokenContract.deposit{value: _amt}(); + wethContract.deposit{value: _amt}(); setUint(setId, _amt); @@ -51,10 +49,9 @@ abstract contract Resolver is Events, DSMath, Basic { ) public payable returns (string memory _eventName, bytes memory _eventParam) { uint _amt = getUint(getId, amt); - TokenInterface tokenContract = TokenInterface(wethAddr); - _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt; - tokenContract.approve(wethAddr, _amt); - tokenContract.withdraw(_amt); + _amt = _amt == uint(-1) ? wethContract.balanceOf(address(this)) : _amt; + wethContract.approve(wethAddr, _amt); + wethContract.withdraw(_amt); setUint(setId, _amt); From c0875a4b0f3cc7f34259aeea9a36d1b95a096891 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:27:19 +0530 Subject: [PATCH 40/52] Making wethContract as constant --- contracts/mainnet/connectors/weth/helpers.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/weth/helpers.sol b/contracts/mainnet/connectors/weth/helpers.sol index ad69ac7d..b348c0b6 100644 --- a/contracts/mainnet/connectors/weth/helpers.sol +++ b/contracts/mainnet/connectors/weth/helpers.sol @@ -4,5 +4,5 @@ import { TokenInterface } from "../../common/interfaces.sol"; abstract contract Helpers { - TokenInterface wethContract = TokenInterface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + TokenInterface constant public wethContract = TokenInterface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); } From 307a8ac0b8f5e0143153887feb1fe1b694bfeca5 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Fri, 18 Jun 2021 14:34:09 +0530 Subject: [PATCH 41/52] Updated connector address --- contracts/mainnet/connectors/weth/helpers.sol | 2 +- docs/connectors.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/weth/helpers.sol b/contracts/mainnet/connectors/weth/helpers.sol index b348c0b6..e9217bf5 100644 --- a/contracts/mainnet/connectors/weth/helpers.sol +++ b/contracts/mainnet/connectors/weth/helpers.sol @@ -4,5 +4,5 @@ import { TokenInterface } from "../../common/interfaces.sol"; abstract contract Helpers { - TokenInterface constant public wethContract = TokenInterface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); + TokenInterface constant internal wethContract = TokenInterface(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); } diff --git a/docs/connectors.json b/docs/connectors.json index 181f1e5a..1f2634a7 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -18,7 +18,8 @@ "AAVE-V2-IMPORT-B": "0x6fe05374924830B6aC98849f75A3D5766E51Ef10", "COMPOUND-IMPORT-B": "0xdA101870ca6136539628F28041E1B55baf4EB6C0", "INSTAPOOL-A": "0x5806Af7AB22E2916fA582Ff05731Bf7C682387B2", - "MAKERDAO-CLAIM-A": "0x2f8cBE650af98602a215b6482F2aD60893C5A4E8" + "MAKERDAO-CLAIM-A": "0x2f8cBE650af98602a215b6482F2aD60893C5A4E8", + "WETH-A": "0x22075fa719eFb02Ca3cF298AFa9C974B7465E5D3" }, "137" : { "AAVE-V2-A": "0xE84d8010Afc3663919F44685cB53ED88866da3eE", From 4560aea2d22659a0f992cd2cc9544ad37a081a89 Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Sun, 20 Jun 2021 17:29:48 +0530 Subject: [PATCH 42/52] folder name update --- .../connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/events.sol | 0 .../{uniswap_v3_erc20 => guniswap_v3_erc20}/helpers.sol | 0 .../{uniswap_v3_erc20 => guniswap_v3_erc20}/interface.sol | 0 .../connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/main.sol | 0 .../events.sol | 0 .../helpers.sol | 0 .../interface.sol | 0 .../main.sol | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename contracts/mainnet/connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/events.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/helpers.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/interface.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20 => guniswap_v3_erc20}/main.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20_staking => guniswap_v3_erc20_staking}/events.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20_staking => guniswap_v3_erc20_staking}/helpers.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20_staking => guniswap_v3_erc20_staking}/interface.sol (100%) rename contracts/mainnet/connectors/{uniswap_v3_erc20_staking => guniswap_v3_erc20_staking}/main.sol (100%) diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/events.sol b/contracts/mainnet/connectors/guniswap_v3_erc20/events.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20/events.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20/events.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol b/contracts/mainnet/connectors/guniswap_v3_erc20/helpers.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20/helpers.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20/helpers.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol b/contracts/mainnet/connectors/guniswap_v3_erc20/interface.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20/interface.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20/interface.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20/main.sol b/contracts/mainnet/connectors/guniswap_v3_erc20/main.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20/main.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20/main.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol b/contracts/mainnet/connectors/guniswap_v3_erc20_staking/events.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20_staking/events.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20_staking/events.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol b/contracts/mainnet/connectors/guniswap_v3_erc20_staking/helpers.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20_staking/helpers.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20_staking/helpers.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol b/contracts/mainnet/connectors/guniswap_v3_erc20_staking/interface.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20_staking/interface.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20_staking/interface.sol diff --git a/contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol b/contracts/mainnet/connectors/guniswap_v3_erc20_staking/main.sol similarity index 100% rename from contracts/mainnet/connectors/uniswap_v3_erc20_staking/main.sol rename to contracts/mainnet/connectors/guniswap_v3_erc20_staking/main.sol From e31abde1f8065c94ace9e5e0a12ac6c7402f9ca8 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 23 Jun 2021 00:56:44 +0530 Subject: [PATCH 43/52] Added instadapp governance connector --- contracts/mainnet/connectors/INST/events.sol | 6 ++ contracts/mainnet/connectors/INST/helpers.sol | 18 ++++++ .../mainnet/connectors/INST/interface.sol | 10 ++++ contracts/mainnet/connectors/INST/main.sol | 60 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 contracts/mainnet/connectors/INST/events.sol create mode 100644 contracts/mainnet/connectors/INST/helpers.sol create mode 100644 contracts/mainnet/connectors/INST/interface.sol create mode 100644 contracts/mainnet/connectors/INST/main.sol diff --git a/contracts/mainnet/connectors/INST/events.sol b/contracts/mainnet/connectors/INST/events.sol new file mode 100644 index 00000000..042c635a --- /dev/null +++ b/contracts/mainnet/connectors/INST/events.sol @@ -0,0 +1,6 @@ +pragma solidity ^0.7.0; + +contract Events { + event LogVoteCast(uint256 proposalId, uint256 support, string reason); + event LogDelegate(address delegatee); +} diff --git a/contracts/mainnet/connectors/INST/helpers.sol b/contracts/mainnet/connectors/INST/helpers.sol new file mode 100644 index 00000000..7bdab7a1 --- /dev/null +++ b/contracts/mainnet/connectors/INST/helpers.sol @@ -0,0 +1,18 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { DSMath } from "../../common/math.sol"; +import { Basic } from "../../common/basic.sol"; +import { InstaTokenInterface, InstaGovernorInterface } from "./interface.sol"; + +abstract contract Helpers is DSMath, Basic { + /** + * @dev InstaGovernorBravo + */ + InstaGovernorInterface internal constant instaGovernor = InstaGovernorInterface(0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B); + + /** + * @dev INST Token + */ + InstaTokenInterface internal constant instToken = InstaTokenInterface(0xc00e94Cb662C3520282E6f5717214004A7f26888); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/INST/interface.sol b/contracts/mainnet/connectors/INST/interface.sol new file mode 100644 index 00000000..eacb53ae --- /dev/null +++ b/contracts/mainnet/connectors/INST/interface.sol @@ -0,0 +1,10 @@ +pragma solidity ^0.7.0; + +interface InstaGovernorInterface { + function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external; +} + +interface InstaTokenInterface { + function delegate(address delegatee) external; + function delegates(address) external view returns(address); +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/INST/main.sol b/contracts/mainnet/connectors/INST/main.sol new file mode 100644 index 00000000..05329dee --- /dev/null +++ b/contracts/mainnet/connectors/INST/main.sol @@ -0,0 +1,60 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +/** + * @title Instadapp Governance. + * @dev Governance. + */ +import { TokenInterface } from "../../common/interfaces.sol"; +import { Stores } from "../../common/stores.sol"; +import { Helpers } from "./helpers.sol"; +import { Events } from "./events.sol"; + +abstract contract Resolver is Events, Helpers { + + /** + * @dev Delegate votes. + * @notice Delegating votes to delegatee. + * @param delegatee The address to delegate the votes. + */ + function delegate(address delegatee) external payable returns (string memory _eventName, bytes memory _eventParam) { + require(instToken.delegates(address(this)) != delegatee, "Already delegated to same delegatee."); + + instToken.delegate(delegatee); + + _eventName = "LogDelegate(address)"; + _eventParam = abi.encode(delegatee); + } + + + /** + * @dev Cast vote. + * @notice Casting vote for a proposal + * @param proposalId The id of the proposal to vote on + * @param support The support value for the vote. 0=against, 1=for, 2=abstain + */ + function voteCast(uint256 proposalId, uint256 support) external payable returns (string memory _eventName, bytes memory _eventParam) { + instaGovernor.castVoteWithReason(proposalId, uint8(support), ""); + + _eventName = "LogVoteCast(uint256,uint256,string)"; + _eventParam = abi.encode(proposalId, support, ""); + } + + /** + * @dev Cast vote with reason. + * @notice Casting vote for a proposal + * @param proposalId The id of the proposal to vote on + * @param support The support value for the vote. 0=against, 1=for, 2=abstain + * @param reason The reason given for the vote + */ + function voteCastWithReason(uint256 proposalId, uint256 support, string calldata reason) external payable returns (string memory _eventName, bytes memory _eventParam) { + instaGovernor.castVoteWithReason(proposalId, uint8(support), reason); + + _eventName = "LogVoteCast(uint256,uint256,string)"; + _eventParam = abi.encode(proposalId, support, reason); + } +} + +contract ConnectV2InstadappGovernanceBravo is Resolver { + string public constant name = "Instadapp-governance-bravo-v1"; +} From 2126be64e2385514932ae59eb5613172d4081fff Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 23 Jun 2021 02:18:01 +0530 Subject: [PATCH 44/52] Added refinanace connector --- .../mainnet/connectors/refinance/events.sol | 0 .../mainnet/connectors/refinance/helpers.sol | 155 +++++++++++ .../connectors/refinance/helpers/aaveV1.sol | 202 ++++++++++++++ .../connectors/refinance/helpers/aaveV2.sol | 200 ++++++++++++++ .../connectors/refinance/helpers/compound.sol | 160 +++++++++++ .../connectors/refinance/interfaces.sol | 113 ++++++++ .../mainnet/connectors/refinance/main.sol | 251 ++++++++++++++++++ 7 files changed, 1081 insertions(+) create mode 100644 contracts/mainnet/connectors/refinance/events.sol create mode 100644 contracts/mainnet/connectors/refinance/helpers.sol create mode 100644 contracts/mainnet/connectors/refinance/helpers/aaveV1.sol create mode 100644 contracts/mainnet/connectors/refinance/helpers/aaveV2.sol create mode 100644 contracts/mainnet/connectors/refinance/helpers/compound.sol create mode 100644 contracts/mainnet/connectors/refinance/interfaces.sol create mode 100644 contracts/mainnet/connectors/refinance/main.sol diff --git a/contracts/mainnet/connectors/refinance/events.sol b/contracts/mainnet/connectors/refinance/events.sol new file mode 100644 index 00000000..e69de29b diff --git a/contracts/mainnet/connectors/refinance/helpers.sol b/contracts/mainnet/connectors/refinance/helpers.sol new file mode 100644 index 00000000..c3593d50 --- /dev/null +++ b/contracts/mainnet/connectors/refinance/helpers.sol @@ -0,0 +1,155 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { Basic } from "../../common/basic.sol"; + + +import { + AaveV1ProviderInterface, + AaveV1Interface, + AaveV2LendingPoolProviderInterface, + AaveV2DataProviderInterface, + AaveV2Interface, + ComptrollerInterface, + CTokenInterface, + CompoundMappingInterface +} from "./interfaces.sol"; + + +import { TokenInterface } from "../../common/interfaces.sol"; + +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +contract Helpers is Basic { + using SafeERC20 for IERC20; + + enum Protocol { + Aave, + AaveV2, + Compound + } + + address payable constant feeCollector = 0xb1DC62EC38E6E3857a887210C38418E4A17Da5B2; + + /** + * @dev Return InstaDApp Mapping Address + */ + address constant internal getMappingAddr = 0xA8F9D4aA7319C54C04404765117ddBf9448E2082; // CompoundMapping Address + + /** + * @dev Return Compound Comptroller Address + */ + address constant internal getComptrollerAddress = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B; // CompoundMapping Address + + /** + * @dev get Aave Provider + */ + AaveV1ProviderInterface constant internal getAaveProvider = + AaveV1ProviderInterface(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8); + + /** + * @dev get Aave Lending Pool Provider + */ + AaveV2LendingPoolProviderInterface constant internal getAaveV2Provider = + AaveV2LendingPoolProviderInterface(0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5); + + /** + * @dev get Aave Protocol Data Provider + */ + AaveV2DataProviderInterface constant internal getAaveV2DataProvider = + AaveV2DataProviderInterface(0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d); + + /** + * @dev get Referral Code + */ + uint16 constant internal getReferralCode = 3228; +} + +contract protocolHelpers is Helpers { + using SafeERC20 for IERC20; + + function getWithdrawBalance(AaveV1Interface aave, address token) internal view returns (uint bal) { + (bal, , , , , , , , , ) = aave.getUserReserveData(token, address(this)); + } + + function getPaybackBalance(AaveV1Interface aave, address token) internal view returns (uint bal, uint fee) { + (, bal, , , , , fee, , , ) = aave.getUserReserveData(token, address(this)); + } + + function getTotalBorrowBalance(AaveV1Interface aave, address token) internal view returns (uint amt) { + (, uint bal, , , , , uint fee, , , ) = aave.getUserReserveData(token, address(this)); + amt = add(bal, fee); + } + + function getWithdrawBalanceV2(AaveV2DataProviderInterface aaveData, address token) internal view returns (uint bal) { + (bal, , , , , , , , ) = aaveData.getUserReserveData(token, address(this)); + } + + function getPaybackBalanceV2(AaveV2DataProviderInterface aaveData, address token, uint rateMode) internal view returns (uint bal) { + if (rateMode == 1) { + (, bal, , , , , , , ) = aaveData.getUserReserveData(token, address(this)); + } else { + (, , bal, , , , , , ) = aaveData.getUserReserveData(token, address(this)); + } + } + + function getIsColl(AaveV1Interface aave, address token) internal view returns (bool isCol) { + (, , , , , , , , , isCol) = aave.getUserReserveData(token, address(this)); + } + + function getIsCollV2(AaveV2DataProviderInterface aaveData, address token) internal view returns (bool isCol) { + (, , , , , , , , isCol) = aaveData.getUserReserveData(token, address(this)); + } + + function getMaxBorrow(Protocol target, address token, CTokenInterface ctoken, uint rateMode) internal returns (uint amt) { + AaveV1Interface aaveV1 = AaveV1Interface(getAaveProvider.getLendingPool()); + AaveV2DataProviderInterface aaveData = getAaveV2DataProvider; + + if (target == Protocol.Aave) { + (uint _amt, uint _fee) = getPaybackBalance(aaveV1, token); + amt = _amt + _fee; + } else if (target == Protocol.AaveV2) { + amt = getPaybackBalanceV2(aaveData, token, rateMode); + } else if (target == Protocol.Compound) { + amt = ctoken.borrowBalanceCurrent(address(this)); + } + } + + function transferFees(address token, uint feeAmt) internal { + if (feeAmt > 0) { + if (token == ethAddr) { + feeCollector.transfer(feeAmt); + } else { + IERC20(token).safeTransfer(feeCollector, feeAmt); + } + } + } + + function calculateFee(uint256 amount, uint256 fee, bool toAdd) internal pure returns(uint feeAmount, uint _amount){ + feeAmount = wmul(amount, fee); + _amount = toAdd ? add(amount, feeAmount) : sub(amount, feeAmount); + } + + function getTokenInterfaces(uint length, address[] memory tokens) internal pure returns (TokenInterface[] memory) { + TokenInterface[] memory _tokens = new TokenInterface[](length); + for (uint i = 0; i < length; i++) { + if (tokens[i] == ethAddr) { + _tokens[i] = TokenInterface(wethAddr); + } else { + _tokens[i] = TokenInterface(tokens[i]); + } + } + return _tokens; + } + + function getCtokenInterfaces(uint length, string[] memory tokenIds) internal view returns (CTokenInterface[] memory) { + CTokenInterface[] memory _ctokens = new CTokenInterface[](length); + for (uint i = 0; i < length; i++) { + (address token, address cToken) = CompoundMappingInterface(getMappingAddr).getMapping(tokenIds[i]); + require(token != address(0) && cToken != address(0), "invalid token/ctoken address"); + _ctokens[i] = CTokenInterface(cToken); + } + return _ctokens; + } +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/refinance/helpers/aaveV1.sol b/contracts/mainnet/connectors/refinance/helpers/aaveV1.sol new file mode 100644 index 00000000..bc33c624 --- /dev/null +++ b/contracts/mainnet/connectors/refinance/helpers/aaveV1.sol @@ -0,0 +1,202 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { protocolHelpers } from "../helpers.sol"; + +import { + AaveV1ProviderInterface, + AaveV1Interface, + AaveV1CoreInterface, + ATokenV1Interface, + CTokenInterface + // AaveV2LendingPoolProviderInterface, + // AaveV2DataProviderInterface, + // AaveV2Interface, +} from "../interfaces.sol"; + +import { TokenInterface } from "../../../common/interfaces.sol"; + +contract AaveV1Helpers is protocolHelpers { + + struct AaveV1BorrowData { + AaveV1Interface aave; + uint length; + uint fee; + Protocol target; + TokenInterface[] tokens; + CTokenInterface[] ctokens; + uint[] amts; + uint[] borrowRateModes; + uint[] paybackRateModes; + } + + struct AaveV1DepositData { + AaveV1Interface aave; + AaveV1CoreInterface aaveCore; + uint length; + uint fee; + TokenInterface[] tokens; + uint[] amts; + } + + function _aaveV1BorrowOne( + AaveV1Interface aave, + uint fee, + Protocol target, + TokenInterface token, + CTokenInterface ctoken, + uint amt, + uint borrowRateMode, + uint paybackRateMode + ) internal returns (uint) { + if (amt > 0) { + + address _token = address(token) == wethAddr ? ethAddr : address(token); + + if (amt == uint(-1)) { + amt = getMaxBorrow(target, address(token), ctoken, paybackRateMode); + } + + (uint feeAmt, uint _amt) = calculateFee(amt, fee, true); + + aave.borrow(_token, _amt, borrowRateMode, getReferralCode); + transferFees(_token, feeAmt); + } + return amt; + } + + function _aaveV1Borrow( + AaveV1BorrowData memory data + ) internal returns (uint[] memory) { + uint[] memory finalAmts = new uint[](data.length); + for (uint i = 0; i < data.length; i++) { + finalAmts[i] = _aaveV1BorrowOne( + data.aave, + data.fee, + data.target, + data.tokens[i], + data.ctokens[i], + data.amts[i], + data.borrowRateModes[i], + data.paybackRateModes[i] + ); + } + return finalAmts; + } + + function _aaveV1DepositOne( + AaveV1Interface aave, + AaveV1CoreInterface aaveCore, + uint fee, + TokenInterface token, + uint amt + ) internal { + if (amt > 0) { + uint ethAmt; + (uint feeAmt, uint _amt) = calculateFee(amt, fee, false); + + bool isEth = address(token) == wethAddr; + + address _token = isEth ? ethAddr : address(token); + + if (isEth) { + ethAmt = _amt; + } else { + token.approve(address(aaveCore), _amt); + } + + transferFees(_token, feeAmt); + + aave.deposit{value:ethAmt}(_token, _amt, getReferralCode); + + if (!getIsColl(aave, _token)) + aave.setUserUseReserveAsCollateral(_token, true); + } + } + + function _aaveV1Deposit( + AaveV1DepositData memory data + ) internal { + for (uint i = 0; i < data.length; i++) { + _aaveV1DepositOne( + data.aave, + data.aaveCore, + data.fee, + data.tokens[i], + data.amts[i] + ); + } + } + + function _aaveV1WithdrawOne( + AaveV1Interface aave, + AaveV1CoreInterface aaveCore, + TokenInterface token, + uint amt + ) internal returns (uint) { + if (amt > 0) { + address _token = address(token) == wethAddr ? ethAddr : address(token); + ATokenV1Interface atoken = ATokenV1Interface(aaveCore.getReserveATokenAddress(_token)); + if (amt == uint(-1)) { + amt = getWithdrawBalance(aave, _token); + } + atoken.redeem(amt); + } + return amt; + } + + function _aaveV1Withdraw( + AaveV1Interface aave, + AaveV1CoreInterface aaveCore, + uint length, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal returns (uint[] memory) { + uint[] memory finalAmts = new uint[](length); + for (uint i = 0; i < length; i++) { + finalAmts[i] = _aaveV1WithdrawOne(aave, aaveCore, tokens[i], amts[i]); + } + return finalAmts; + } + + function _aaveV1PaybackOne( + AaveV1Interface aave, + AaveV1CoreInterface aaveCore, + TokenInterface token, + uint amt + ) internal returns (uint) { + if (amt > 0) { + uint ethAmt; + + bool isEth = address(token) == wethAddr; + + address _token = isEth ? ethAddr : address(token); + + if (amt == uint(-1)) { + (uint _amt, uint _fee) = getPaybackBalance(aave, _token); + amt = _amt + _fee; + } + + if (isEth) { + ethAmt = amt; + } else { + token.approve(address(aaveCore), amt); + } + + aave.repay{value:ethAmt}(_token, amt, payable(address(this))); + } + return amt; + } + + function _aaveV1Payback( + AaveV1Interface aave, + AaveV1CoreInterface aaveCore, + uint length, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal { + for (uint i = 0; i < length; i++) { + _aaveV1PaybackOne(aave, aaveCore, tokens[i], amts[i]); + } + } +} diff --git a/contracts/mainnet/connectors/refinance/helpers/aaveV2.sol b/contracts/mainnet/connectors/refinance/helpers/aaveV2.sol new file mode 100644 index 00000000..488deae3 --- /dev/null +++ b/contracts/mainnet/connectors/refinance/helpers/aaveV2.sol @@ -0,0 +1,200 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { protocolHelpers } from "../helpers.sol"; + +import { + // AaveV1ProviderInterface, + // AaveV1Interface, + // AaveV1CoreInterface, + AaveV2LendingPoolProviderInterface, + AaveV2DataProviderInterface, + AaveV2Interface, + ATokenV1Interface, + CTokenInterface +} from "../interfaces.sol"; + +import { TokenInterface } from "../../../common/interfaces.sol"; + +contract AaveV2Helpers is protocolHelpers { + + struct AaveV2BorrowData { + AaveV2Interface aave; + uint length; + uint fee; + Protocol target; + TokenInterface[] tokens; + CTokenInterface[] ctokens; + uint[] amts; + uint[] rateModes; + } + + struct AaveV2PaybackData { + AaveV2Interface aave; + AaveV2DataProviderInterface aaveData; + uint length; + TokenInterface[] tokens; + uint[] amts; + uint[] rateModes; + } + + struct AaveV2WithdrawData { + AaveV2Interface aave; + AaveV2DataProviderInterface aaveData; + uint length; + TokenInterface[] tokens; + uint[] amts; + } + + function _aaveV2BorrowOne( + AaveV2Interface aave, + uint fee, + Protocol target, + TokenInterface token, + CTokenInterface ctoken, + uint amt, + uint rateMode + ) internal returns (uint) { + if (amt > 0) { + bool isEth = address(token) == wethAddr; + + address _token = isEth ? ethAddr : address(token); + + if (amt == uint(-1)) { + amt = getMaxBorrow(target, _token, ctoken, rateMode); + } + + (uint feeAmt, uint _amt) = calculateFee(amt, fee, true); + + aave.borrow(address(token), _amt, rateMode, getReferralCode, address(this)); + convertWethToEth(isEth, token, amt); + + transferFees(_token, feeAmt); + } + return amt; + } + + function _aaveV2Borrow( + AaveV2BorrowData memory data + ) internal returns (uint[] memory) { + uint[] memory finalAmts = new uint[](data.length); + for (uint i = 0; i < data.length; i++) { + finalAmts[i] = _aaveV2BorrowOne( + data.aave, + data.fee, + data.target, + data.tokens[i], + data.ctokens[i], + data.amts[i], + data.rateModes[i] + ); + } + return finalAmts; + } + + function _aaveV2DepositOne( + AaveV2Interface aave, + AaveV2DataProviderInterface aaveData, + uint fee, + TokenInterface token, + uint amt + ) internal { + if (amt > 0) { + (uint feeAmt, uint _amt) = calculateFee(amt, fee, false); + + bool isEth = address(token) == wethAddr; + address _token = isEth ? ethAddr : address(token); + + transferFees(_token, feeAmt); + + convertEthToWeth(isEth, token, _amt); + + token.approve(address(aave), _amt); + + aave.deposit(address(token), _amt, address(this), getReferralCode); + + if (!getIsCollV2(aaveData, address(token))) { + aave.setUserUseReserveAsCollateral(address(token), true); + } + } + } + + function _aaveV2Deposit( + AaveV2Interface aave, + AaveV2DataProviderInterface aaveData, + uint length, + uint fee, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal { + for (uint i = 0; i < length; i++) { + _aaveV2DepositOne(aave, aaveData, fee, tokens[i], amts[i]); + } + } + + function _aaveV2WithdrawOne( + AaveV2Interface aave, + AaveV2DataProviderInterface aaveData, + TokenInterface token, + uint amt + ) internal returns (uint _amt) { + if (amt > 0) { + bool isEth = address(token) == wethAddr; + + aave.withdraw(address(token), amt, address(this)); + + _amt = amt == uint(-1) ? getWithdrawBalanceV2(aaveData, address(token)) : amt; + + convertWethToEth(isEth, token, _amt); + } + } + + function _aaveV2Withdraw( + AaveV2WithdrawData memory data + ) internal returns (uint[] memory) { + uint[] memory finalAmts = new uint[](data.length); + for (uint i = 0; i < data.length; i++) { + finalAmts[i] = _aaveV2WithdrawOne( + data.aave, + data.aaveData, + data.tokens[i], + data.amts[i] + ); + } + return finalAmts; + } + + function _aaveV2PaybackOne( + AaveV2Interface aave, + AaveV2DataProviderInterface aaveData, + TokenInterface token, + uint amt, + uint rateMode + ) internal returns (uint _amt) { + if (amt > 0) { + bool isEth = address(token) == wethAddr; + + _amt = amt == uint(-1) ? getPaybackBalanceV2(aaveData, address(token), rateMode) : amt; + + convertEthToWeth(isEth, token, _amt); + + token.approve(address(aave), _amt); + + aave.repay(address(token), _amt, rateMode, address(this)); + } + } + + function _aaveV2Payback( + AaveV2PaybackData memory data + ) internal { + for (uint i = 0; i < data.length; i++) { + _aaveV2PaybackOne( + data.aave, + data.aaveData, + data.tokens[i], + data.amts[i], + data.rateModes[i] + ); + } + } +} diff --git a/contracts/mainnet/connectors/refinance/helpers/compound.sol b/contracts/mainnet/connectors/refinance/helpers/compound.sol new file mode 100644 index 00000000..c6bebc42 --- /dev/null +++ b/contracts/mainnet/connectors/refinance/helpers/compound.sol @@ -0,0 +1,160 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +import { protocolHelpers } from "../helpers.sol"; + +import { + ComptrollerInterface, + CTokenInterface, + CompoundMappingInterface, + CETHInterface +} from "../interfaces.sol"; + +import { TokenInterface } from "../../../common/interfaces.sol"; + + + +contract CompoundHelpers is protocolHelpers { + + struct CompoundBorrowData { + uint length; + uint fee; + Protocol target; + CTokenInterface[] ctokens; + TokenInterface[] tokens; + uint[] amts; + uint[] rateModes; + } + + function _compEnterMarkets(uint length, CTokenInterface[] memory ctokens) internal { + ComptrollerInterface troller = ComptrollerInterface(getComptrollerAddress); + address[] memory _cTokens = new address[](length); + + for (uint i = 0; i < length; i++) { + _cTokens[i] = address(ctokens[i]); + } + troller.enterMarkets(_cTokens); + } + + function _compBorrowOne( + uint fee, + CTokenInterface ctoken, + TokenInterface token, + uint amt, + Protocol target, + uint rateMode + ) internal returns (uint) { + if (amt > 0) { + address _token = address(token) == wethAddr ? ethAddr : address(token); + + if (amt == uint(-1)) { + amt = getMaxBorrow(target, address(token), ctoken, rateMode); + } + + (uint feeAmt, uint _amt) = calculateFee(amt, fee, true); + + require(ctoken.borrow(_amt) == 0, "borrow-failed-collateral?"); + transferFees(_token, feeAmt); + } + return amt; + } + + function _compBorrow( + CompoundBorrowData memory data + ) internal returns (uint[] memory) { + uint[] memory finalAmts = new uint[](data.length); + for (uint i = 0; i < data.length; i++) { + finalAmts[i] = _compBorrowOne( + data.fee, + data.ctokens[i], + data.tokens[i], + data.amts[i], + data.target, + data.rateModes[i] + ); + } + return finalAmts; + } + + function _compDepositOne(uint fee, CTokenInterface ctoken, TokenInterface token, uint amt) internal { + if (amt > 0) { + address _token = address(token) == wethAddr ? ethAddr : address(token); + + (uint feeAmt, uint _amt) = calculateFee(amt, fee, false); + + if (_token != ethAddr) { + token.approve(address(ctoken), _amt); + require(ctoken.mint(_amt) == 0, "deposit-failed"); + } else { + CETHInterface(address(ctoken)).mint{value:_amt}(); + } + transferFees(_token, feeAmt); + } + } + + function _compDeposit( + uint length, + uint fee, + CTokenInterface[] memory ctokens, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal { + for (uint i = 0; i < length; i++) { + _compDepositOne(fee, ctokens[i], tokens[i], amts[i]); + } + } + + function _compWithdrawOne(CTokenInterface ctoken, TokenInterface token, uint amt) internal returns (uint) { + if (amt > 0) { + if (amt == uint(-1)) { + bool isEth = address(token) == wethAddr; + uint initalBal = isEth ? address(this).balance : token.balanceOf(address(this)); + require(ctoken.redeem(ctoken.balanceOf(address(this))) == 0, "withdraw-failed"); + uint finalBal = isEth ? address(this).balance : token.balanceOf(address(this)); + amt = sub(finalBal, initalBal); + } else { + require(ctoken.redeemUnderlying(amt) == 0, "withdraw-failed"); + } + } + return amt; + } + + function _compWithdraw( + uint length, + CTokenInterface[] memory ctokens, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal returns(uint[] memory) { + uint[] memory finalAmts = new uint[](length); + for (uint i = 0; i < length; i++) { + finalAmts[i] = _compWithdrawOne(ctokens[i], tokens[i], amts[i]); + } + return finalAmts; + } + + function _compPaybackOne(CTokenInterface ctoken, TokenInterface token, uint amt) internal returns (uint) { + if (amt > 0) { + if (amt == uint(-1)) { + amt = ctoken.borrowBalanceCurrent(address(this)); + } + if (address(token) != wethAddr) { + token.approve(address(ctoken), amt); + require(ctoken.repayBorrow(amt) == 0, "repay-failed."); + } else { + CETHInterface(address(ctoken)).repayBorrow{value:amt}(); + } + } + return amt; + } + + function _compPayback( + uint length, + CTokenInterface[] memory ctokens, + TokenInterface[] memory tokens, + uint[] memory amts + ) internal { + for (uint i = 0; i < length; i++) { + _compPaybackOne(ctokens[i], tokens[i], amts[i]); + } + } +} \ No newline at end of file diff --git a/contracts/mainnet/connectors/refinance/interfaces.sol b/contracts/mainnet/connectors/refinance/interfaces.sol new file mode 100644 index 00000000..a42edc61 --- /dev/null +++ b/contracts/mainnet/connectors/refinance/interfaces.sol @@ -0,0 +1,113 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +// Compound Helpers +interface CTokenInterface { + function mint(uint mintAmount) external returns (uint); + function redeem(uint redeemTokens) external returns (uint); + function borrow(uint borrowAmount) external returns (uint); + function repayBorrow(uint repayAmount) external returns (uint); + + function borrowBalanceCurrent(address account) external returns (uint); + function redeemUnderlying(uint redeemAmount) external returns (uint); + + function balanceOf(address owner) external view returns (uint256 balance); +} + +interface CETHInterface { + function mint() external payable; + function repayBorrow() external payable; +} + +interface CompoundMappingInterface { + function cTokenMapping(string calldata tokenId) external view returns (address); + function getMapping(string calldata tokenId) external view returns (address, address); +} + +interface ComptrollerInterface { + function enterMarkets(address[] calldata cTokens) external returns (uint[] memory); +} +// End Compound Helpers + +// Aave v1 Helpers +interface AaveV1Interface { + function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external payable; + function redeemUnderlying( + address _reserve, + address payable _user, + uint256 _amount, + uint256 _aTokenBalanceAfterRedeem + ) external; + + function setUserUseReserveAsCollateral(address _reserve, bool _useAsCollateral) external; + function getUserReserveData(address _reserve, address _user) external view returns ( + uint256 currentATokenBalance, + uint256 currentBorrowBalance, + uint256 principalBorrowBalance, + uint256 borrowRateMode, + uint256 borrowRate, + uint256 liquidityRate, + uint256 originationFee, + uint256 variableBorrowIndex, + uint256 lastUpdateTimestamp, + bool usageAsCollateralEnabled + ); + function borrow(address _reserve, uint256 _amount, uint256 _interestRateMode, uint16 _referralCode) external; + function repay(address _reserve, uint256 _amount, address payable _onBehalfOf) external payable; +} + +interface AaveV1ProviderInterface { + function getLendingPool() external view returns (address); + function getLendingPoolCore() external view returns (address); +} + +interface AaveV1CoreInterface { + function getReserveATokenAddress(address _reserve) external view returns (address); +} + +interface ATokenV1Interface { + function redeem(uint256 _amount) external; + function balanceOf(address _user) external view returns(uint256); + function principalBalanceOf(address _user) external view returns(uint256); + + function allowance(address, address) external view returns (uint); + function approve(address, uint) external; + function transfer(address, uint) external returns (bool); + function transferFrom(address, address, uint) external returns (bool); +} +// End Aave v1 Helpers + +// Aave v2 Helpers +interface AaveV2Interface { + function deposit(address _asset, uint256 _amount, address _onBehalfOf, uint16 _referralCode) external; + function withdraw(address _asset, uint256 _amount, address _to) external; + function borrow( + address _asset, + uint256 _amount, + uint256 _interestRateMode, + uint16 _referralCode, + address _onBehalfOf + ) external; + function repay(address _asset, uint256 _amount, uint256 _rateMode, address _onBehalfOf) external; + function setUserUseReserveAsCollateral(address _asset, bool _useAsCollateral) external; +} + +interface AaveV2LendingPoolProviderInterface { + function getLendingPool() external view returns (address); +} + +// Aave Protocol Data Provider +interface AaveV2DataProviderInterface { + function getUserReserveData(address _asset, address _user) external view returns ( + uint256 currentATokenBalance, + uint256 currentStableDebt, + uint256 currentVariableDebt, + uint256 principalStableDebt, + uint256 scaledVariableDebt, + uint256 stableBorrowRate, + uint256 liquidityRate, + uint40 stableRateLastUpdated, + bool usageAsCollateralEnabled + ); +} +// End Aave v2 Helpers diff --git a/contracts/mainnet/connectors/refinance/main.sol b/contracts/mainnet/connectors/refinance/main.sol new file mode 100644 index 00000000..bafbb69a --- /dev/null +++ b/contracts/mainnet/connectors/refinance/main.sol @@ -0,0 +1,251 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +/** + * @title Refinance. + * @dev Refinancing. + */ + +import { TokenInterface } from "../../common/interfaces.sol"; + +import { + AaveV1ProviderInterface, + AaveV1Interface, + AaveV1CoreInterface, + AaveV2LendingPoolProviderInterface, + AaveV2DataProviderInterface, + AaveV2Interface, + ComptrollerInterface, + CTokenInterface, + CompoundMappingInterface +} from "./interfaces.sol"; + + +import { AaveV1Helpers } from "./helpers/aaveV1.sol"; +import { AaveV2Helpers } from "./helpers/aaveV2.sol"; +import { CompoundHelpers } from "./helpers/compound.sol"; + + +contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { + + struct RefinanceData { + Protocol source; + Protocol target; + uint collateralFee; + uint debtFee; + address[] tokens; + string[] ctokenIds; + uint[] borrowAmts; + uint[] withdrawAmts; + uint[] borrowRateModes; + uint[] paybackRateModes; + } + + /** + * @dev Refinance + * @notice Refinancing between AaveV1, AaveV2 and Compound + * @param data refinance data. + */ + function refinance(RefinanceData calldata data) external payable { + + require(data.source != data.target, "source-and-target-unequal"); + + uint length = data.tokens.length; + + require(data.borrowAmts.length == length, "length-mismatch"); + require(data.withdrawAmts.length == length, "length-mismatch"); + require(data.borrowRateModes.length == length, "length-mismatch"); + require(data.paybackRateModes.length == length, "length-mismatch"); + require(data.ctokenIds.length == length, "length-mismatch"); + + AaveV2Interface aaveV2 = AaveV2Interface(getAaveV2Provider.getLendingPool()); + AaveV1Interface aaveV1 = AaveV1Interface(getAaveProvider.getLendingPool()); + AaveV1CoreInterface aaveCore = AaveV1CoreInterface(getAaveProvider.getLendingPoolCore()); + AaveV2DataProviderInterface aaveData = getAaveV2DataProvider; + + uint[] memory depositAmts; + uint[] memory paybackAmts; + + TokenInterface[] memory tokens = getTokenInterfaces(length, data.tokens); + CTokenInterface[] memory _ctokens = getCtokenInterfaces(length, data.ctokenIds); + + if (data.source == Protocol.Aave && data.target == Protocol.AaveV2) { + AaveV2BorrowData memory _aaveV2BorrowData; + + _aaveV2BorrowData.aave = aaveV2; + _aaveV2BorrowData.length = length; + _aaveV2BorrowData.fee = data.debtFee; + _aaveV2BorrowData.target = data.source; + _aaveV2BorrowData.tokens = tokens; + _aaveV2BorrowData.ctokens = _ctokens; + _aaveV2BorrowData.amts = data.borrowAmts; + _aaveV2BorrowData.rateModes = data.borrowRateModes; + + paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); + _aaveV1Payback(aaveV1, aaveCore, length, tokens, paybackAmts); + depositAmts = _aaveV1Withdraw(aaveV1, aaveCore, length, tokens, data.withdrawAmts); + _aaveV2Deposit(aaveV2, aaveData, length, data.collateralFee, tokens, depositAmts); + } else if (data.source == Protocol.Aave && data.target == Protocol.Compound) { + _compEnterMarkets(length, _ctokens); + + CompoundBorrowData memory _compoundBorrowData; + + _compoundBorrowData.length = length; + _compoundBorrowData.fee = data.debtFee; + _compoundBorrowData.target = data.source; + _compoundBorrowData.ctokens = _ctokens; + _compoundBorrowData.tokens = tokens; + _compoundBorrowData.amts = data.borrowAmts; + _compoundBorrowData.rateModes = data.borrowRateModes; + + paybackAmts = _compBorrow(_compoundBorrowData); + + _aaveV1Payback(aaveV1, aaveCore, length, tokens, paybackAmts); + depositAmts = _aaveV1Withdraw(aaveV1, aaveCore, length, tokens, data.withdrawAmts); + _compDeposit(length, data.collateralFee, _ctokens, tokens, depositAmts); + } else if (data.source == Protocol.AaveV2 && data.target == Protocol.Aave) { + + AaveV1BorrowData memory _aaveV1BorrowData; + AaveV2PaybackData memory _aaveV2PaybackData; + AaveV2WithdrawData memory _aaveV2WithdrawData; + + { + _aaveV1BorrowData.aave = aaveV1; + _aaveV1BorrowData.length = length; + _aaveV1BorrowData.fee = data.debtFee; + _aaveV1BorrowData.target = data.source; + _aaveV1BorrowData.tokens = tokens; + _aaveV1BorrowData.ctokens = _ctokens; + _aaveV1BorrowData.amts = data.borrowAmts; + _aaveV1BorrowData.borrowRateModes = data.borrowRateModes; + _aaveV1BorrowData.paybackRateModes = data.paybackRateModes; + + paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); + } + + { + _aaveV2PaybackData.aave = aaveV2; + _aaveV2PaybackData.aaveData = aaveData; + _aaveV2PaybackData.length = length; + _aaveV2PaybackData.tokens = tokens; + _aaveV2PaybackData.amts = paybackAmts; + _aaveV2PaybackData.rateModes = data.paybackRateModes; + _aaveV2Payback(_aaveV2PaybackData); + } + + { + _aaveV2WithdrawData.aave = aaveV2; + _aaveV2WithdrawData.aaveData = aaveData; + _aaveV2WithdrawData.length = length; + _aaveV2WithdrawData.tokens = tokens; + _aaveV2WithdrawData.amts = data.withdrawAmts; + depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); + } + { + AaveV1DepositData memory _aaveV1DepositData; + + _aaveV1DepositData.aave = aaveV1; + _aaveV1DepositData.aaveCore = aaveCore; + _aaveV1DepositData.length = length; + _aaveV1DepositData.fee = data.collateralFee; + _aaveV1DepositData.tokens = tokens; + _aaveV1DepositData.amts = depositAmts; + + _aaveV1Deposit(_aaveV1DepositData); + } + } else if (data.source == Protocol.AaveV2 && data.target == Protocol.Compound) { + _compEnterMarkets(length, _ctokens); + + { + CompoundBorrowData memory _compoundBorrowData; + + _compoundBorrowData.length = length; + _compoundBorrowData.fee = data.debtFee; + _compoundBorrowData.target = data.source; + _compoundBorrowData.ctokens = _ctokens; + _compoundBorrowData.tokens = tokens; + _compoundBorrowData.amts = data.borrowAmts; + _compoundBorrowData.rateModes = data.borrowRateModes; + + paybackAmts = _compBorrow(_compoundBorrowData); + } + + AaveV2PaybackData memory _aaveV2PaybackData; + + _aaveV2PaybackData.aave = aaveV2; + _aaveV2PaybackData.aaveData = aaveData; + _aaveV2PaybackData.length = length; + _aaveV2PaybackData.tokens = tokens; + _aaveV2PaybackData.amts = paybackAmts; + _aaveV2PaybackData.rateModes = data.paybackRateModes; + + _aaveV2Payback(_aaveV2PaybackData); + + { + AaveV2WithdrawData memory _aaveV2WithdrawData; + + _aaveV2WithdrawData.aave = aaveV2; + _aaveV2WithdrawData.aaveData = aaveData; + _aaveV2WithdrawData.length = length; + _aaveV2WithdrawData.tokens = tokens; + _aaveV2WithdrawData.amts = data.withdrawAmts; + depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); + } + _compDeposit(length, data.collateralFee, _ctokens, tokens, depositAmts); + } else if (data.source == Protocol.Compound && data.target == Protocol.Aave) { + + AaveV1BorrowData memory _aaveV1BorrowData; + + _aaveV1BorrowData.aave = aaveV1; + _aaveV1BorrowData.length = length; + _aaveV1BorrowData.fee = data.debtFee; + _aaveV1BorrowData.target = data.source; + _aaveV1BorrowData.tokens = tokens; + _aaveV1BorrowData.ctokens = _ctokens; + _aaveV1BorrowData.amts = data.borrowAmts; + _aaveV1BorrowData.borrowRateModes = data.borrowRateModes; + _aaveV1BorrowData.paybackRateModes = data.paybackRateModes; + + paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); + { + _compPayback(length, _ctokens, tokens, paybackAmts); + depositAmts = _compWithdraw(length, _ctokens, tokens, data.withdrawAmts); + } + + { + AaveV1DepositData memory _aaveV1DepositData; + + _aaveV1DepositData.aave = aaveV1; + _aaveV1DepositData.aaveCore = aaveCore; + _aaveV1DepositData.length = length; + _aaveV1DepositData.fee = data.collateralFee; + _aaveV1DepositData.tokens = tokens; + _aaveV1DepositData.amts = depositAmts; + + _aaveV1Deposit(_aaveV1DepositData); + } + } else if (data.source == Protocol.Compound && data.target == Protocol.AaveV2) { + AaveV2BorrowData memory _aaveV2BorrowData; + + _aaveV2BorrowData.aave = aaveV2; + _aaveV2BorrowData.length = length; + _aaveV2BorrowData.fee = data.debtFee; + _aaveV2BorrowData.target = data.source; + _aaveV2BorrowData.tokens = tokens; + _aaveV2BorrowData.ctokens = _ctokens; + _aaveV2BorrowData.amts = data.borrowAmts; + _aaveV2BorrowData.rateModes = data.borrowRateModes; + + paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); + _compPayback(length, _ctokens, tokens, paybackAmts); + depositAmts = _compWithdraw(length, _ctokens, tokens, data.withdrawAmts); + _aaveV2Deposit(aaveV2, aaveData, length, data.collateralFee, tokens, depositAmts); + } else { + revert("invalid-options"); + } + } +} + +contract ConnectV2Refinance is RefinanceResolver { + string public name = "Refinance-v1.0"; +} \ No newline at end of file From 9fa32fb8881901aa538ae925c297c9b4f322d2e5 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 23 Jun 2021 02:33:32 +0530 Subject: [PATCH 45/52] Minor fix --- contracts/mainnet/connectors/refinance/main.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/refinance/main.sol b/contracts/mainnet/connectors/refinance/main.sol index bafbb69a..536f6162 100644 --- a/contracts/mainnet/connectors/refinance/main.sol +++ b/contracts/mainnet/connectors/refinance/main.sol @@ -46,7 +46,9 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { * @notice Refinancing between AaveV1, AaveV2 and Compound * @param data refinance data. */ - function refinance(RefinanceData calldata data) external payable { + function refinance(RefinanceData calldata data) + external payable returns (string memory _eventName, bytes memory _eventParam) + { require(data.source != data.target, "source-and-target-unequal"); From e64b517e2ae74d5520dd7340354c218f3e45b457 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 23 Jun 2021 15:23:35 +0530 Subject: [PATCH 46/52] Updated contract addresses --- contracts/mainnet/connectors/INST/helpers.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/INST/helpers.sol b/contracts/mainnet/connectors/INST/helpers.sol index 7bdab7a1..f923efdf 100644 --- a/contracts/mainnet/connectors/INST/helpers.sol +++ b/contracts/mainnet/connectors/INST/helpers.sol @@ -9,10 +9,10 @@ abstract contract Helpers is DSMath, Basic { /** * @dev InstaGovernorBravo */ - InstaGovernorInterface internal constant instaGovernor = InstaGovernorInterface(0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B); + InstaGovernorInterface internal constant instaGovernor = InstaGovernorInterface(0x0204Cd037B2ec03605CFdFe482D8e257C765fA1B); /** * @dev INST Token */ - InstaTokenInterface internal constant instToken = InstaTokenInterface(0xc00e94Cb662C3520282E6f5717214004A7f26888); + InstaTokenInterface internal constant instToken = InstaTokenInterface(0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb); } \ No newline at end of file From 2dc6eaa4bca7e92d1098977022e76ea97b107da0 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Wed, 23 Jun 2021 15:48:32 +0530 Subject: [PATCH 47/52] Updated connector address --- docs/connectors.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/connectors.json b/docs/connectors.json index 1f2634a7..6acb543d 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -19,7 +19,8 @@ "COMPOUND-IMPORT-B": "0xdA101870ca6136539628F28041E1B55baf4EB6C0", "INSTAPOOL-A": "0x5806Af7AB22E2916fA582Ff05731Bf7C682387B2", "MAKERDAO-CLAIM-A": "0x2f8cBE650af98602a215b6482F2aD60893C5A4E8", - "WETH-A": "0x22075fa719eFb02Ca3cF298AFa9C974B7465E5D3" + "WETH-A": "0x22075fa719eFb02Ca3cF298AFa9C974B7465E5D3", + "INST-A": "0x52C2C4a0db049255fF345EB9D3Fb1f555b7a924A" }, "137" : { "AAVE-V2-A": "0xE84d8010Afc3663919F44685cB53ED88866da3eE", From df571ef426602bd66d0b6d6b73e60060ce1d6b55 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 24 Jun 2021 07:35:53 +0530 Subject: [PATCH 48/52] Fixed stack too deep error --- .../mainnet/connectors/refinance/main.sol | 238 ++++++++++++------ 1 file changed, 162 insertions(+), 76 deletions(-) diff --git a/contracts/mainnet/connectors/refinance/main.sol b/contracts/mainnet/connectors/refinance/main.sol index 536f6162..2fa0eff6 100644 --- a/contracts/mainnet/connectors/refinance/main.sol +++ b/contracts/mainnet/connectors/refinance/main.sol @@ -41,13 +41,19 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { uint[] paybackRateModes; } - /** - * @dev Refinance - * @notice Refinancing between AaveV1, AaveV2 and Compound - * @param data refinance data. - */ - function refinance(RefinanceData calldata data) - external payable returns (string memory _eventName, bytes memory _eventParam) + struct RefinanceInternalData { + AaveV2Interface aaveV2; + AaveV1Interface aaveV1; + AaveV1CoreInterface aaveCore; + AaveV2DataProviderInterface aaveData; + uint[] depositAmts; + uint[] paybackAmts; + TokenInterface[] tokens; + CTokenInterface[] _ctokens; + } + + function _refinance(RefinanceData calldata data) + internal returns (string memory _eventName, bytes memory _eventParam) { require(data.source != data.target, "source-and-target-unequal"); @@ -60,51 +66,91 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { require(data.paybackRateModes.length == length, "length-mismatch"); require(data.ctokenIds.length == length, "length-mismatch"); - AaveV2Interface aaveV2 = AaveV2Interface(getAaveV2Provider.getLendingPool()); - AaveV1Interface aaveV1 = AaveV1Interface(getAaveProvider.getLendingPool()); - AaveV1CoreInterface aaveCore = AaveV1CoreInterface(getAaveProvider.getLendingPoolCore()); - AaveV2DataProviderInterface aaveData = getAaveV2DataProvider; + RefinanceInternalData memory refinanceInternalData; - uint[] memory depositAmts; - uint[] memory paybackAmts; + refinanceInternalData.aaveV2 = AaveV2Interface(getAaveV2Provider.getLendingPool()); + refinanceInternalData.aaveV1 = AaveV1Interface(getAaveProvider.getLendingPool()); + refinanceInternalData.aaveCore = AaveV1CoreInterface(getAaveProvider.getLendingPoolCore()); + refinanceInternalData.aaveData = getAaveV2DataProvider; - TokenInterface[] memory tokens = getTokenInterfaces(length, data.tokens); - CTokenInterface[] memory _ctokens = getCtokenInterfaces(length, data.ctokenIds); + refinanceInternalData.depositAmts; + refinanceInternalData.paybackAmts; + + refinanceInternalData.tokens = getTokenInterfaces(length, data.tokens); + refinanceInternalData._ctokens = getCtokenInterfaces(length, data.ctokenIds); if (data.source == Protocol.Aave && data.target == Protocol.AaveV2) { AaveV2BorrowData memory _aaveV2BorrowData; - _aaveV2BorrowData.aave = aaveV2; + _aaveV2BorrowData.aave = refinanceInternalData.aaveV2; _aaveV2BorrowData.length = length; _aaveV2BorrowData.fee = data.debtFee; _aaveV2BorrowData.target = data.source; - _aaveV2BorrowData.tokens = tokens; - _aaveV2BorrowData.ctokens = _ctokens; + _aaveV2BorrowData.tokens = refinanceInternalData.tokens; + _aaveV2BorrowData.ctokens = refinanceInternalData._ctokens; _aaveV2BorrowData.amts = data.borrowAmts; _aaveV2BorrowData.rateModes = data.borrowRateModes; - - paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); - _aaveV1Payback(aaveV1, aaveCore, length, tokens, paybackAmts); - depositAmts = _aaveV1Withdraw(aaveV1, aaveCore, length, tokens, data.withdrawAmts); - _aaveV2Deposit(aaveV2, aaveData, length, data.collateralFee, tokens, depositAmts); + { + refinanceInternalData.paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); + _aaveV1Payback( + refinanceInternalData.aaveV1, + refinanceInternalData.aaveCore, + length, + refinanceInternalData.tokens, + refinanceInternalData.paybackAmts + ); + refinanceInternalData.depositAmts = _aaveV1Withdraw( + refinanceInternalData.aaveV1, + refinanceInternalData.aaveCore, + length, + refinanceInternalData.tokens, + data.withdrawAmts + ); + _aaveV2Deposit( + refinanceInternalData.aaveV2, + refinanceInternalData.aaveData, + length, + data.collateralFee, + refinanceInternalData.tokens, + refinanceInternalData.depositAmts + ); + } } else if (data.source == Protocol.Aave && data.target == Protocol.Compound) { - _compEnterMarkets(length, _ctokens); + _compEnterMarkets(length, refinanceInternalData._ctokens); CompoundBorrowData memory _compoundBorrowData; _compoundBorrowData.length = length; _compoundBorrowData.fee = data.debtFee; _compoundBorrowData.target = data.source; - _compoundBorrowData.ctokens = _ctokens; - _compoundBorrowData.tokens = tokens; + _compoundBorrowData.ctokens = refinanceInternalData._ctokens; + _compoundBorrowData.tokens = refinanceInternalData.tokens; _compoundBorrowData.amts = data.borrowAmts; _compoundBorrowData.rateModes = data.borrowRateModes; - paybackAmts = _compBorrow(_compoundBorrowData); + refinanceInternalData.paybackAmts = _compBorrow(_compoundBorrowData); - _aaveV1Payback(aaveV1, aaveCore, length, tokens, paybackAmts); - depositAmts = _aaveV1Withdraw(aaveV1, aaveCore, length, tokens, data.withdrawAmts); - _compDeposit(length, data.collateralFee, _ctokens, tokens, depositAmts); + _aaveV1Payback( + refinanceInternalData.aaveV1, + refinanceInternalData.aaveCore, + length, + refinanceInternalData.tokens, + refinanceInternalData.paybackAmts + ); + refinanceInternalData.depositAmts = _aaveV1Withdraw( + refinanceInternalData.aaveV1, + refinanceInternalData.aaveCore, + length, + refinanceInternalData.tokens, + data.withdrawAmts + ); + _compDeposit( + length, + data.collateralFee, + refinanceInternalData._ctokens, + refinanceInternalData.tokens, + refinanceInternalData.depositAmts + ); } else if (data.source == Protocol.AaveV2 && data.target == Protocol.Aave) { AaveV1BorrowData memory _aaveV1BorrowData; @@ -112,51 +158,51 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { AaveV2WithdrawData memory _aaveV2WithdrawData; { - _aaveV1BorrowData.aave = aaveV1; + _aaveV1BorrowData.aave = refinanceInternalData.aaveV1; _aaveV1BorrowData.length = length; _aaveV1BorrowData.fee = data.debtFee; _aaveV1BorrowData.target = data.source; - _aaveV1BorrowData.tokens = tokens; - _aaveV1BorrowData.ctokens = _ctokens; + _aaveV1BorrowData.tokens = refinanceInternalData.tokens; + _aaveV1BorrowData.ctokens = refinanceInternalData._ctokens; _aaveV1BorrowData.amts = data.borrowAmts; _aaveV1BorrowData.borrowRateModes = data.borrowRateModes; _aaveV1BorrowData.paybackRateModes = data.paybackRateModes; - paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); + refinanceInternalData.paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); } { - _aaveV2PaybackData.aave = aaveV2; - _aaveV2PaybackData.aaveData = aaveData; + _aaveV2PaybackData.aave = refinanceInternalData.aaveV2; + _aaveV2PaybackData.aaveData = refinanceInternalData.aaveData; _aaveV2PaybackData.length = length; - _aaveV2PaybackData.tokens = tokens; - _aaveV2PaybackData.amts = paybackAmts; + _aaveV2PaybackData.tokens = refinanceInternalData.tokens; + _aaveV2PaybackData.amts = refinanceInternalData.paybackAmts; _aaveV2PaybackData.rateModes = data.paybackRateModes; _aaveV2Payback(_aaveV2PaybackData); } { - _aaveV2WithdrawData.aave = aaveV2; - _aaveV2WithdrawData.aaveData = aaveData; + _aaveV2WithdrawData.aave = refinanceInternalData.aaveV2; + _aaveV2WithdrawData.aaveData = refinanceInternalData.aaveData; _aaveV2WithdrawData.length = length; - _aaveV2WithdrawData.tokens = tokens; + _aaveV2WithdrawData.tokens = refinanceInternalData.tokens; _aaveV2WithdrawData.amts = data.withdrawAmts; - depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); + refinanceInternalData.depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); } { AaveV1DepositData memory _aaveV1DepositData; - _aaveV1DepositData.aave = aaveV1; - _aaveV1DepositData.aaveCore = aaveCore; + _aaveV1DepositData.aave = refinanceInternalData.aaveV1; + _aaveV1DepositData.aaveCore = refinanceInternalData.aaveCore; _aaveV1DepositData.length = length; _aaveV1DepositData.fee = data.collateralFee; - _aaveV1DepositData.tokens = tokens; - _aaveV1DepositData.amts = depositAmts; + _aaveV1DepositData.tokens = refinanceInternalData.tokens; + _aaveV1DepositData.amts = refinanceInternalData.depositAmts; _aaveV1Deposit(_aaveV1DepositData); } } else if (data.source == Protocol.AaveV2 && data.target == Protocol.Compound) { - _compEnterMarkets(length, _ctokens); + _compEnterMarkets(length, refinanceInternalData._ctokens); { CompoundBorrowData memory _compoundBorrowData; @@ -164,21 +210,21 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { _compoundBorrowData.length = length; _compoundBorrowData.fee = data.debtFee; _compoundBorrowData.target = data.source; - _compoundBorrowData.ctokens = _ctokens; - _compoundBorrowData.tokens = tokens; + _compoundBorrowData.ctokens = refinanceInternalData._ctokens; + _compoundBorrowData.tokens = refinanceInternalData.tokens; _compoundBorrowData.amts = data.borrowAmts; _compoundBorrowData.rateModes = data.borrowRateModes; - paybackAmts = _compBorrow(_compoundBorrowData); + refinanceInternalData.paybackAmts = _compBorrow(_compoundBorrowData); } AaveV2PaybackData memory _aaveV2PaybackData; - _aaveV2PaybackData.aave = aaveV2; - _aaveV2PaybackData.aaveData = aaveData; + _aaveV2PaybackData.aave = refinanceInternalData.aaveV2; + _aaveV2PaybackData.aaveData = refinanceInternalData.aaveData; _aaveV2PaybackData.length = length; - _aaveV2PaybackData.tokens = tokens; - _aaveV2PaybackData.amts = paybackAmts; + _aaveV2PaybackData.tokens = refinanceInternalData.tokens; + _aaveV2PaybackData.amts = refinanceInternalData.paybackAmts; _aaveV2PaybackData.rateModes = data.paybackRateModes; _aaveV2Payback(_aaveV2PaybackData); @@ -186,66 +232,106 @@ contract RefinanceResolver is CompoundHelpers, AaveV1Helpers, AaveV2Helpers { { AaveV2WithdrawData memory _aaveV2WithdrawData; - _aaveV2WithdrawData.aave = aaveV2; - _aaveV2WithdrawData.aaveData = aaveData; + _aaveV2WithdrawData.aave = refinanceInternalData.aaveV2; + _aaveV2WithdrawData.aaveData = refinanceInternalData.aaveData; _aaveV2WithdrawData.length = length; - _aaveV2WithdrawData.tokens = tokens; + _aaveV2WithdrawData.tokens = refinanceInternalData.tokens; _aaveV2WithdrawData.amts = data.withdrawAmts; - depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); + refinanceInternalData.depositAmts = _aaveV2Withdraw(_aaveV2WithdrawData); } - _compDeposit(length, data.collateralFee, _ctokens, tokens, depositAmts); + _compDeposit( + length, + data.collateralFee, + refinanceInternalData._ctokens, + refinanceInternalData.tokens, + refinanceInternalData.depositAmts + ); } else if (data.source == Protocol.Compound && data.target == Protocol.Aave) { AaveV1BorrowData memory _aaveV1BorrowData; - _aaveV1BorrowData.aave = aaveV1; + _aaveV1BorrowData.aave = refinanceInternalData.aaveV1; _aaveV1BorrowData.length = length; _aaveV1BorrowData.fee = data.debtFee; _aaveV1BorrowData.target = data.source; - _aaveV1BorrowData.tokens = tokens; - _aaveV1BorrowData.ctokens = _ctokens; + _aaveV1BorrowData.tokens = refinanceInternalData.tokens; + _aaveV1BorrowData.ctokens = refinanceInternalData._ctokens; _aaveV1BorrowData.amts = data.borrowAmts; _aaveV1BorrowData.borrowRateModes = data.borrowRateModes; _aaveV1BorrowData.paybackRateModes = data.paybackRateModes; - paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); + refinanceInternalData.paybackAmts = _aaveV1Borrow(_aaveV1BorrowData); { - _compPayback(length, _ctokens, tokens, paybackAmts); - depositAmts = _compWithdraw(length, _ctokens, tokens, data.withdrawAmts); + _compPayback( + length, + refinanceInternalData._ctokens, + refinanceInternalData.tokens, + refinanceInternalData.paybackAmts + ); + refinanceInternalData.depositAmts = _compWithdraw( + length, + refinanceInternalData._ctokens, + refinanceInternalData.tokens, + data.withdrawAmts + ); } { AaveV1DepositData memory _aaveV1DepositData; - _aaveV1DepositData.aave = aaveV1; - _aaveV1DepositData.aaveCore = aaveCore; + _aaveV1DepositData.aave = refinanceInternalData.aaveV1; + _aaveV1DepositData.aaveCore = refinanceInternalData.aaveCore; _aaveV1DepositData.length = length; _aaveV1DepositData.fee = data.collateralFee; - _aaveV1DepositData.tokens = tokens; - _aaveV1DepositData.amts = depositAmts; + _aaveV1DepositData.tokens = refinanceInternalData.tokens; + _aaveV1DepositData.amts = refinanceInternalData.depositAmts; _aaveV1Deposit(_aaveV1DepositData); } } else if (data.source == Protocol.Compound && data.target == Protocol.AaveV2) { AaveV2BorrowData memory _aaveV2BorrowData; - _aaveV2BorrowData.aave = aaveV2; + _aaveV2BorrowData.aave = refinanceInternalData.aaveV2; _aaveV2BorrowData.length = length; _aaveV2BorrowData.fee = data.debtFee; _aaveV2BorrowData.target = data.source; - _aaveV2BorrowData.tokens = tokens; - _aaveV2BorrowData.ctokens = _ctokens; + _aaveV2BorrowData.tokens = refinanceInternalData.tokens; + _aaveV2BorrowData.ctokens = refinanceInternalData._ctokens; _aaveV2BorrowData.amts = data.borrowAmts; _aaveV2BorrowData.rateModes = data.borrowRateModes; - paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); - _compPayback(length, _ctokens, tokens, paybackAmts); - depositAmts = _compWithdraw(length, _ctokens, tokens, data.withdrawAmts); - _aaveV2Deposit(aaveV2, aaveData, length, data.collateralFee, tokens, depositAmts); + refinanceInternalData.paybackAmts = _aaveV2Borrow(_aaveV2BorrowData); + _compPayback(length, refinanceInternalData._ctokens, refinanceInternalData.tokens, refinanceInternalData.paybackAmts); + refinanceInternalData.depositAmts = _compWithdraw( + length, + refinanceInternalData._ctokens, + refinanceInternalData.tokens, + data.withdrawAmts + ); + _aaveV2Deposit( + refinanceInternalData.aaveV2, + refinanceInternalData.aaveData, + length, + data.collateralFee, + refinanceInternalData.tokens, + refinanceInternalData.depositAmts + ); } else { revert("invalid-options"); } } + + + + /** + * @dev Refinance + * @notice Refinancing between AaveV1, AaveV2 and Compound + * @param data refinance data. + */ + function refinance(RefinanceData calldata data) + external payable returns (string memory _eventName, bytes memory _eventParam) { + (_eventName, _eventParam) = _refinance(data); + } } contract ConnectV2Refinance is RefinanceResolver { From 4d55758394fbf2d20fb23b572b6294f4b8b9c2be Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 24 Jun 2021 07:44:59 +0530 Subject: [PATCH 49/52] Updated connector list --- docs/connectors.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/connectors.json b/docs/connectors.json index 1f2634a7..587e5b8e 100644 --- a/docs/connectors.json +++ b/docs/connectors.json @@ -19,7 +19,8 @@ "COMPOUND-IMPORT-B": "0xdA101870ca6136539628F28041E1B55baf4EB6C0", "INSTAPOOL-A": "0x5806Af7AB22E2916fA582Ff05731Bf7C682387B2", "MAKERDAO-CLAIM-A": "0x2f8cBE650af98602a215b6482F2aD60893C5A4E8", - "WETH-A": "0x22075fa719eFb02Ca3cF298AFa9C974B7465E5D3" + "WETH-A": "0x22075fa719eFb02Ca3cF298AFa9C974B7465E5D3", + "REFINANCE-A": "0x9eA34bE6dA51aa9F6408FeA79c946FDCFA424442" }, "137" : { "AAVE-V2-A": "0xE84d8010Afc3663919F44685cB53ED88866da3eE", From 1cce1fffeada8401bb45b59e725f5f9f7fdf3c88 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Thu, 24 Jun 2021 16:58:01 +0530 Subject: [PATCH 50/52] Added flashloan testcases --- hardhat.config.js | 2 +- .../constant/abi/connectors/instapool.json | 1 + scripts/constant/abis.js | 1 + scripts/constant/addresses.js | 5 +- scripts/encodeFlashcastData.js | 16 +++ test/instapool/instapool.test.js | 109 ++++++++++++++++++ 6 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 scripts/constant/abi/connectors/instapool.json create mode 100644 scripts/encodeFlashcastData.js create mode 100644 test/instapool/instapool.test.js diff --git a/hardhat.config.js b/hardhat.config.js index 45b17f9d..a3d99c31 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -52,7 +52,7 @@ module.exports = { hardhat: { forking: { url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, - blockNumber: 12433781, + blockNumber: 12696000, }, blockGasLimit: 12000000, }, diff --git a/scripts/constant/abi/connectors/instapool.json b/scripts/constant/abi/connectors/instapool.json new file mode 100644 index 00000000..75a04f42 --- /dev/null +++ b/scripts/constant/abi/connectors/instapool.json @@ -0,0 +1 @@ +[{"type":"event","name":"LogFlashBorrow","inputs":[{"type":"address","name":"token","internalType":"address","indexed":false},{"type":"uint256","name":"tokenAmt","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"LogFlashMultiBorrow","inputs":[{"type":"address[]","name":"token","internalType":"address[]","indexed":false},{"type":"uint256[]","name":"tokenAmts","internalType":"uint256[]","indexed":false}],"anonymous":false},{"type":"event","name":"LogFlashMultiPayback","inputs":[{"type":"address[]","name":"token","internalType":"address[]","indexed":false},{"type":"uint256[]","name":"tokenAmts","internalType":"uint256[]","indexed":false}],"anonymous":false},{"type":"event","name":"LogFlashPayback","inputs":[{"type":"address","name":"token","internalType":"address","indexed":false},{"type":"uint256","name":"tokenAmt","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"payable","outputs":[{"type":"string","name":"_eventName","internalType":"string"},{"type":"bytes","name":"_eventParam","internalType":"bytes"}],"name":"flashBorrowAndCast","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amt","internalType":"uint256"},{"type":"uint256","name":"route","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"string","name":"_eventName","internalType":"string"},{"type":"bytes","name":"_eventParam","internalType":"bytes"}],"name":"flashMultiBorrowAndCast","inputs":[{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"amts","internalType":"uint256[]"},{"type":"uint256","name":"route","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"string","name":"_eventName","internalType":"string"},{"type":"bytes","name":"_eventParam","internalType":"bytes"}],"name":"flashMultiPayback","inputs":[{"type":"address[]","name":"tokens","internalType":"address[]"},{"type":"uint256[]","name":"amts","internalType":"uint256[]"},{"type":"uint256[]","name":"getId","internalType":"uint256[]"},{"type":"uint256[]","name":"setId","internalType":"uint256[]"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"string","name":"_eventName","internalType":"string"},{"type":"bytes","name":"_eventParam","internalType":"bytes"}],"name":"flashPayback","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amt","internalType":"uint256"},{"type":"uint256","name":"getId","internalType":"uint256"},{"type":"uint256","name":"setId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract InstaFlashV2Interface"}],"name":"instaPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]}] \ No newline at end of file diff --git a/scripts/constant/abis.js b/scripts/constant/abis.js index c25bd350..3ed03f80 100644 --- a/scripts/constant/abis.js +++ b/scripts/constant/abis.js @@ -6,6 +6,7 @@ module.exports = { connectors: { basic: require("./abi/connectors/basic.json"), auth: require("./abi/connectors/auth.json"), + "INSTAPOOL-A": require("./abi/connectors/instapool.json"), }, basic: { erc20: require("./abi/basics/erc20.json"), diff --git a/scripts/constant/addresses.js b/scripts/constant/addresses.js index ead09c40..a1cb7d45 100644 --- a/scripts/constant/addresses.js +++ b/scripts/constant/addresses.js @@ -2,10 +2,11 @@ module.exports = { connectors: { basic: "0xe5398f279175962E56fE4c5E0b62dc7208EF36c6", auth: "0xd1aff9f2acf800c876c409100d6f39aea93fc3d9", + "INSTAPOOL-A": "0x5806af7ab22e2916fa582ff05731bf7c682387b2" }, core: { - connectorsV2: "0xFE2390DAD597594439f218190fC2De40f9Cf1179", - instaIndex: "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723" + connectorsV2: "0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11", + instaIndex: "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723", } }; \ No newline at end of file diff --git a/scripts/encodeFlashcastData.js b/scripts/encodeFlashcastData.js new file mode 100644 index 00000000..a674c1af --- /dev/null +++ b/scripts/encodeFlashcastData.js @@ -0,0 +1,16 @@ +const abis = require("./constant/abis"); +const addresses = require("./constant/addresses"); +const { web3 } = hre; + +const encodeSpells = require("./encodeSpells.js") + + +module.exports = function (spells) { + const encodeSpellsData = encodeSpells(spells); + const targetType = "string[]"; + let argTypes = [targetType, "bytes[]"]; + return web3.eth.abi.encodeParameters(argTypes, [ + encodeSpellsData[0], + encodeSpellsData[1], + ]); +}; diff --git a/test/instapool/instapool.test.js b/test/instapool/instapool.test.js new file mode 100644 index 00000000..c0a0fb81 --- /dev/null +++ b/test/instapool/instapool.test.js @@ -0,0 +1,109 @@ +const { expect } = require("chai"); +const hre = require("hardhat"); +const { web3, deployments, waffle, ethers } = hre; +const { provider, deployContract } = waffle + +const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js") +const buildDSAv2 = require("../../scripts/buildDSAv2") +const encodeSpells = require("../../scripts/encodeSpells.js") +const encodeFlashcastData = require("../../scripts/encodeFlashcastData.js") +const getMasterSigner = require("../../scripts/getMasterSigner") + +const addresses = require("../../scripts/constant/addresses"); +const abis = require("../../scripts/constant/abis"); +const constants = require("../../scripts/constant/constant"); +const tokens = require("../../scripts/constant/tokens"); + +const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/compound/main.sol/ConnectV2Compound.json") + +describe("Instapool", function () { + const connectorName = "COMPOUND-TEST-A" + + let dsaWallet0 + let masterSigner; + let instaConnectorsV2; + let connector; + + const wallets = provider.getWallets() + const [wallet0, wallet1, wallet2, wallet3] = wallets + before(async () => { + masterSigner = await getMasterSigner(wallet3) + instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2); + connector = await deployAndEnableConnector({ + connectorName, + contractArtifact: connectV2CompoundArtifacts, + signer: masterSigner, + connectors: instaConnectorsV2 + }) + console.log("Connector address", connector.address) + }) + + it("Should have contracts deployed.", async function () { + expect(!!instaConnectorsV2.address).to.be.true; + expect(!!connector.address).to.be.true; + expect(!!masterSigner.address).to.be.true; + }); + + describe("DSA wallet setup", function () { + it("Should build DSA v2", async function () { + dsaWallet0 = await buildDSAv2(wallet0.address) + expect(!!dsaWallet0.address).to.be.true; + }); + + it("Deposit ETH into DSA wallet", async function () { + await wallet0.sendTransaction({ + to: dsaWallet0.address, + value: ethers.utils.parseEther("10") + }); + expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10")); + }); + }); + + describe("Main", function () { + + it("Should deposit ETH in Compound", async function () { + const amount = ethers.utils.parseEther("1") // 1 ETH + const flashloanAmount = ethers.utils.parseEther("100") // 100 ETH + const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" + + const IdOne = "2878734423" + const IdTwo = "783243246" + + const spells = [ + { + connector: connectorName, + method: "deposit", + args: ["ETH-A", flashloanAmount, 0, IdOne] + }, + { + connector: connectorName, + method: "withdraw", + args: ["ETH-A", amount, IdOne, IdTwo] + }, + { + connector: "INSTAPOOL-A", + method: "flashPayback", + args: [ethAddress, flashloanAmount, IdTwo, 0], + } + ] + + const calldata = encodeFlashcastData(spells); + + const spells2 = [ + { + connector: "INSTAPOOL-A", + method: "flashBorrowAndCast", + args: [ + "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", + flashloanAmount, + 0, // route + calldata, + ], + } + ] + + const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells2), wallet1.address) + const receipt = await tx.wait() + }); + }) +}) From d26e38e7cd8a0fba2099255461b7bdb7c8f3015d Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Thu, 24 Jun 2021 17:08:42 +0530 Subject: [PATCH 51/52] Update instapool.test.js --- test/instapool/instapool.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/instapool/instapool.test.js b/test/instapool/instapool.test.js index c0a0fb81..fa211e8d 100644 --- a/test/instapool/instapool.test.js +++ b/test/instapool/instapool.test.js @@ -61,7 +61,7 @@ describe("Instapool", function () { describe("Main", function () { - it("Should deposit ETH in Compound", async function () { + it("Should take 100 ETH flashloan from Instapool", async function () { const amount = ethers.utils.parseEther("1") // 1 ETH const flashloanAmount = ethers.utils.parseEther("100") // 100 ETH const ethAddress = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee" From 17fc4f6acba37d8ea1be1cbd7814ea1a32b3db4a Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Fri, 25 Jun 2021 00:24:05 +0530 Subject: [PATCH 52/52] Update main.sol --- contracts/mainnet/connectors/weth/main.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/mainnet/connectors/weth/main.sol b/contracts/mainnet/connectors/weth/main.sol index cbab1c6b..9a5f1444 100644 --- a/contracts/mainnet/connectors/weth/main.sol +++ b/contracts/mainnet/connectors/weth/main.sol @@ -1,8 +1,8 @@ pragma solidity ^0.7.0; /** - * @title Basic. - * @dev Deposit & Withdraw from DSA. + * @title WETH. + * @dev Wrap and Unwrap WETH. */ import { DSMath } from "../../common/math.sol";