diff --git a/buidler.config.js b/buidler.config.js index 4f58031..56e92b7 100644 --- a/buidler.config.js +++ b/buidler.config.js @@ -9,8 +9,6 @@ require("dotenv").config(); const INFURA_ID = process.env.INFURA_ID; assert.ok(INFURA_ID, "no Infura ID in process.env"); -const INSTA_MASTER = "0xfCD22438AD6eD564a1C26151Df73F6B33B817B56"; - // ================================= CONFIG ========================================= module.exports = { defaultNetwork: "ganache", @@ -19,21 +17,21 @@ module.exports = { // Standard config url: "http://localhost:8545", fork: `https://mainnet.infura.io/v3/${INFURA_ID}`, - unlocked_accounts: [INSTA_MASTER], // Custom GelatoCore: "0x1d681d76ce96E4d70a88A00EBbcfc1E47808d0b8", - InstaMaster: INSTA_MASTER, InstaIndex: "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723", InstaList: "0x4c8a1BEb8a87765788946D6B19C6C6355194AbEb", InstaConnectors: "0xD6A602C01a023B98Ecfb29Df02FBA380d3B21E0c", InstaAccount: "0x939Daad09fC4A9B8f8A9352A485DAb2df4F4B3F8", ConnectAuth: "0xd1aFf9f2aCf800C876c409100D6F39AEa93Fc3D9", ConnectBasic: "0x6a31c5982C5Bc5533432913cf06a66b6D3333a95", + ConnectGelato: "0x37A7009d424951dd5D5F155fA588D9a03C455163", ConnectMaker: "0xac02030d8a8F49eD04b2f52C394D3F901A10F8A9", ConnectCompound: "0x07F81230d73a78f63F0c2A3403AD281b067d28F8", DAI: "0x6b175474e89094c44da98b954eedeac495271d0f", DAI_UNISWAP: "0x2a1530C4C41db0B0b2bB646CB5Eb1A67b7158667", CDAI: "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", + ProviderModuleDSA: "0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2", }, }, solc: { diff --git a/contracts/ConnectGelato.sol b/contracts/ConnectGelato.sol deleted file mode 100644 index 6680bc3..0000000 --- a/contracts/ConnectGelato.sol +++ /dev/null @@ -1,231 +0,0 @@ -// "SPDX-License-Identifier: UNLICENSED" -pragma solidity 0.6.12; -pragma experimental ABIEncoderV2; - -import { - IGelatoCore, - Provider, - Task, - TaskReceipt -} from "@gelatonetwork/core/contracts/gelato_core/interfaces/IGelatoCore.sol"; -import { - IGelatoProviders, - TaskSpec -} from "@gelatonetwork/core/contracts/gelato_core/interfaces/IGelatoProviders.sol"; -import { - IGelatoProviderModule -} from "@gelatonetwork/core/contracts/provider_modules/IGelatoProviderModule.sol"; -import {Address} from "@gelatonetwork/core/contracts/external/Address.sol"; -import {SafeMath} from "@gelatonetwork/core/contracts/external/SafeMath.sol"; -import {Stores} from "./instadapp/Stores.sol"; - -interface ConnectorInterface { - function name() external pure returns (string memory); -} - -/// @title ConnectGelato -/// @notice Allows InstaDapp DSA to enter and exit Gelato Network -/// @dev Check out https://github.com/gelatodigital/gelato-kyber#how-gelato-works for an explanation -/// @author gitpusha -contract ConnectGelato is ConnectorInterface, Stores { - - using Address for address payable; - using SafeMath for uint256; - - string constant public override name = "ConnectGelato-v1"; - - address public immutable connectGelatoAddress; - uint256 public immutable id; - address public immutable gelatoCore; - - constructor(uint256 _id, address _gelatoCore) public payable { - connectGelatoAddress = address(this); - id = _id; - gelatoCore = _gelatoCore; - } - - /// @dev needed for unproviding funds from GelatoCore - receive() external payable { - require(msg.sender == gelatoCore, "ConnectGelato.receive"); - } - - /// @dev _id must be InstaConnectors.connectorLength+1 - function connectorID() public view override returns(uint _type, uint _id) { - (_type, _id) = (1, id); - } - - modifier delegatecallOnly(string memory _tracingInfo) { - require( - connectGelatoAddress != address(this), - string(abi.encodePacked(_tracingInfo, ":delegatecallOnly")) - ); - _; - } - - // ===== Gelato ENTRY APIs ====== - - /** - * @dev Enables first time users to pre-fund eth, whitelist an executor & register the - * ProviderModuleDSA.sol to be able to use Gelato - * @param _executor address of single execot node or gelato'S decentralized execution market - * @param _taskSpecs enables external providers to whitelist TaskSpecs on gelato - * @param _modules address of ProviderModuleDSA - * @param _ethToDeposit amount of eth to deposit on Gelato, only for self-providers - */ - function multiProvide( - address _executor, - TaskSpec[] calldata _taskSpecs, - IGelatoProviderModule[] calldata _modules, - uint256 _ethToDeposit - ) - public - payable - delegatecallOnly("ConnectGelato.multiProvide") - { - try IGelatoProviders(gelatoCore).multiProvide{value: _ethToDeposit}( - _executor, - _taskSpecs, - _modules - ) { - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.multiProvide:", error))); - } catch { - revert("ConnectGelato.multiProvide: unknown error"); - } - } - - /** - * @dev Submits a single, one-time task to Gelato - * @param _provider Consists of proxy module address (DSA) and provider address () - * who will pay for the transaction execution - * @param _task Task specifying the condition and the action connectors - * @param _expiryDate Default 0, othweise timestamp after which the task expires - */ - function submitTask( - Provider calldata _provider, - Task calldata _task, - uint256 _expiryDate - ) - public - delegatecallOnly("ConnectGelato.submitTask") - { - try IGelatoCore(gelatoCore).submitTask(_provider, _task, _expiryDate) { - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.submitTask:", error))); - } catch { - revert("ConnectGelato.submitTask: unknown error"); - } - } - - /** - * @dev Submits single or mulitple Task Sequences to Gelato - * @param _provider Consists of proxy module address (DSA) and provider address () - * who will pay for the transaction execution - * @param _tasks A sequence of Tasks, can be a single or multiples - * @param _expiryDate Default 0, othweise timestamp after which the task expires - * @param _cycles How often the Task List should be executed, e.g. 5 times - */ - function submitTaskCycle( - Provider calldata _provider, - Task[] memory _tasks, - uint256 _expiryDate, - uint256 _cycles - ) - public - delegatecallOnly("ConnectGelato.submitTaskCycle") - { - try IGelatoCore(gelatoCore).submitTaskCycle( - _provider, - _tasks, - _expiryDate, - _cycles - ) { - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.submitTaskCycle:", error))); - } catch { - revert("ConnectGelato.submitTaskCycle: unknown error"); - } - } - - /** - * @dev Submits single or mulitple Task Chains to Gelato - * @param _provider Consists of proxy module address (DSA) and provider address () - * who will pay for the transaction execution - * @param _tasks A sequence of Tasks, can be a single or multiples - * @param _expiryDate Default 0, othweise timestamp after which the task expires - * @param _sumOfRequestedTaskSubmits The TOTAL number of Task auto-submits - * that should have occured once the cycle is complete - */ - function submitTaskChain( - Provider calldata _provider, - Task[] memory _tasks, - uint256 _expiryDate, - uint256 _sumOfRequestedTaskSubmits - ) - public - delegatecallOnly("ConnectGelato.submitTaskChain") - { - try IGelatoCore(gelatoCore).submitTaskChain( - _provider, - _tasks, - _expiryDate, - _sumOfRequestedTaskSubmits - ) { - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.submitTaskChain:", error))); - } catch { - revert("ConnectGelato.submitTaskChain: unknown error"); - } - } - - - - - // ===== Gelato EXIT APIs ====== - - /** - * @dev Withdraws funds from Gelato, de-whitelists TaskSpecs and Provider Modules - * in one tx - * @param _withdrawAmount Amount of ETH to withdraw from Gelato - * @param _taskSpecs List of Task Specs to de-whitelist, default empty [] - * @param _modules List of Provider Modules to de-whitelist, default empty [] - */ - function multiUnprovide( - uint256 _withdrawAmount, - TaskSpec[] memory _taskSpecs, - IGelatoProviderModule[] memory _modules, - uint256 _setId - ) - external - delegatecallOnly("ConnectGelato.multiUnprovide") - { - uint256 balanceBefore = address(this).balance; - try IGelatoProviders(gelatoCore).multiUnprovide( - _withdrawAmount, - _taskSpecs, - _modules - ) { - setUint(_setId, address(this).balance.sub(balanceBefore)); - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.multiUnprovide:", error))); - } catch { - revert("ConnectGelato.multiUnprovide: unknown error"); - } - } - - /** - * @dev Cancels outstanding Tasks - * @param _taskReceipts List of Task Receipts to cancel - */ - function multiCancelTasks(TaskReceipt[] calldata _taskReceipts) - external - delegatecallOnly("ConnectGelato.multiCancelTasks") - { - try IGelatoCore(gelatoCore).multiCancelTasks(_taskReceipts) { - } catch Error(string memory error) { - revert(string(abi.encodePacked("ConnectGelato.multiCancelTasks:", error))); - } catch { - revert("ConnectGelato.multiCancelTasks: unknown error"); - } - } -} \ No newline at end of file diff --git a/contracts/ProviderModuleDSA.sol b/contracts/ProviderModuleDSA.sol deleted file mode 100644 index d28630b..0000000 --- a/contracts/ProviderModuleDSA.sol +++ /dev/null @@ -1,106 +0,0 @@ -// "SPDX-License-Identifier: UNLICENSED" -pragma solidity 0.6.12; -pragma experimental ABIEncoderV2; - -import { - GelatoProviderModuleStandard -} from "@gelatonetwork/core/contracts/provider_modules/GelatoProviderModuleStandard.sol"; -import {Task} from "@gelatonetwork/core/contracts/gelato_core/interfaces/IGelatoCore.sol"; - -/// @dev InstaDapp Index -interface IndexInterface { - function connectors(uint version) external view returns (address); - function list() external view returns (address); -} - -/// @dev InstaDapp List -interface ListInterface { - function accountID(address _account) external view returns (uint64); -} - -/// @dev InstaDapp Connectors -interface ConnectorsInterface { - function isConnector(address[] calldata logicAddr) external view returns (bool); - function isStaticConnector(address[] calldata logicAddr) external view returns (bool); -} - -/// @dev InstaDapp Defi Smart Account wallet -interface AccountInterface { - function version() external view returns (uint); - function isAuth(address user) external view returns (bool); - function shield() external view returns (bool); - function cast(address[] calldata _targets, bytes[] calldata _datas, address _origin) - external - payable - returns (bytes32[] memory responses); -} - -contract ProviderModuleDSA is GelatoProviderModuleStandard { - IndexInterface public immutable index; - address public immutable gelatoCore; - - constructor(IndexInterface _index, address _gelatoCore) public { - index = _index; - gelatoCore = _gelatoCore; - } - - // ================= GELATO PROVIDER MODULE STANDARD ================ - function isProvided(address _userProxy, address, Task calldata _task) - external - view - override - returns(string memory) - { - // Verify InstaDapp account identity - if (ListInterface(index.list()).accountID(_userProxy) == 0) - return "ProviderModuleDSA.isProvided:InvalidUserProxy"; - - // Is GelatoCore authorized - if (!AccountInterface(_userProxy).isAuth(gelatoCore)) - return "ProviderModuleDSA.isProvided:GelatoCoreNotAuth"; - - // @dev commented out for gas savings - - // // Is connector valid - // ConnectorsInterface connectors = ConnectorsInterface(index.connectors( - // AccountInterface(_userProxy).version() - // )); - - // address[] memory targets = new address[](_task.actions.length); - // for (uint i = 0; i < _task.actions.length; i++) - // targets[i] = _task.actions[i].addr; - - // bool isShield = AccountInterface(_userProxy).shield(); - // if (isShield) - // if (!connectors.isStaticConnector(targets)) - // return "ProviderModuleDSA.isProvided:not-static-connector"; - // else - // if (!connectors.isConnector(targets)) - // return "ProviderModuleDSA.isProvided:not-connector"; - - return OK; - } - - /// @dev DS PROXY ONLY ALLOWS DELEGATE CALL for single actions, that's why we also use multisend - function execPayload(uint256, address, address, Task calldata _task, uint256) - external - view - override - returns(bytes memory payload, bool) - { - address[] memory targets = new address[](_task.actions.length); - for (uint i = 0; i < _task.actions.length; i++) - targets[i] = _task.actions[i].addr; - - bytes[] memory datas = new bytes[](_task.actions.length); - for (uint i = 0; i < _task.actions.length; i++) - datas[i] = _task.actions[i].data; - - payload = abi.encodeWithSelector( - AccountInterface.cast.selector, - targets, - datas, - gelatoCore - ); - } -} \ No newline at end of file diff --git a/package.json b/package.json index c42e7c2..304aab4 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,14 @@ "scripts": {}, "devDependencies": { "@gelatonetwork/core": "0.5.3", - "@nomiclabs/buidler": "1.4.3", + "@nomiclabs/buidler": "1.4.7", "@nomiclabs/buidler-ethers": "2.0.0", "@nomiclabs/buidler-ganache": "^1.3.3", - "@nomiclabs/buidler-waffle": "2.0.0", + "@nomiclabs/buidler-waffle": "2.1.0", "chai": "^4.2.0", "dotenv": "8.2.0", - "ethereum-waffle": "3.0.2", - "ethers": "5.0.8", + "ethereum-waffle": "3.1.0", + "ethers": "5.0.14", "prettier": "2.0.5" }, "dependencies": {} diff --git a/pre-compiles/ConnectGelato_ABI.json b/pre-compiles/ConnectGelato_ABI.json new file mode 100644 index 0000000..43a485e --- /dev/null +++ b/pre-compiles/ConnectGelato_ABI.json @@ -0,0 +1,934 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "address", "name": "userProxy", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { "internalType": "uint256", "name": "index", "type": "uint256" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { "internalType": "uint256", "name": "cycleId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "submissionsLeft", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskReceipt[]", + "name": "taskReceipt", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiCancelTasks", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "executor", + "type": "address" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskSpec[]", + "name": "taskspecs", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ethToDeposit", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiProvide", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskSpec[]", + "name": "taskspecs", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ethToWithdraw", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiUnprovide", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task", + "name": "task", + "type": "tuple" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTask", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTaskChain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTaskCycle", + "type": "event" + }, + { + "inputs": [], + "name": "connectorID", + "outputs": [ + { "internalType": "uint256", "name": "_type", "type": "uint256" }, + { "internalType": "uint256", "name": "_id", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "address", "name": "userProxy", "type": "address" }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { "internalType": "uint256", "name": "index", "type": "uint256" }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { "internalType": "uint256", "name": "cycleId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "submissionsLeft", + "type": "uint256" + } + ], + "internalType": "struct TaskReceipt[]", + "name": "_taskReceipts", + "type": "tuple[]" + } + ], + "name": "multiCancelTasks", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_executor", "type": "address" }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct TaskSpec[]", + "name": "_taskSpecs", + "type": "tuple[]" + }, + { "internalType": "address[]", "name": "_modules", "type": "address[]" }, + { "internalType": "uint256", "name": "_ethToDeposit", "type": "uint256" }, + { "internalType": "uint256", "name": "_getId", "type": "uint256" }, + { "internalType": "uint256", "name": "_setId", "type": "uint256" } + ], + "name": "multiProvide", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_withdrawAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct TaskSpec[]", + "name": "_taskSpecs", + "type": "tuple[]" + }, + { "internalType": "address[]", "name": "_modules", "type": "address[]" }, + { "internalType": "uint256", "name": "_getId", "type": "uint256" }, + { "internalType": "uint256", "name": "_setId", "type": "uint256" } + ], + "name": "multiUnprovide", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "_task", + "type": "tuple" + }, + { "internalType": "uint256", "name": "_expiryDate", "type": "uint256" } + ], + "name": "submitTask", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "_tasks", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "_expiryDate", "type": "uint256" }, + { + "internalType": "uint256", + "name": "_sumOfRequestedTaskSubmits", + "type": "uint256" + } + ], + "name": "submitTaskChain", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { "internalType": "address", "name": "inst", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "_tasks", + "type": "tuple[]" + }, + { "internalType": "uint256", "name": "_expiryDate", "type": "uint256" }, + { "internalType": "uint256", "name": "_cycles", "type": "uint256" } + ], + "name": "submitTaskCycle", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/pre-compiles/ProviderModuleDSA_ABI.json b/pre-compiles/ProviderModuleDSA_ABI.json new file mode 100644 index 0000000..fbd2b8d --- /dev/null +++ b/pre-compiles/ProviderModuleDSA_ABI.json @@ -0,0 +1,168 @@ +[ + { + "inputs": [ + { + "internalType": "contract IndexInterface", + "name": "_index", + "type": "address" + }, + { "internalType": "address", "name": "_gelatoCore", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { + "components": [ + { + "components": [ + { + "internalType": "contract IGelatoCondition", + "name": "inst", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "_task", + "type": "tuple" + }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "execPayload", + "outputs": [ + { "internalType": "bytes", "name": "payload", "type": "bytes" }, + { "internalType": "bool", "name": "", "type": "bool" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "name": "execRevertCheck", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "gelatoCore", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "index", + "outputs": [ + { + "internalType": "contract IndexInterface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "_userProxy", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" }, + { + "components": [ + { + "components": [ + { + "internalType": "contract IGelatoCondition", + "name": "inst", + "type": "address" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { "internalType": "address", "name": "addr", "type": "address" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bool", "name": "termsOkCheck", "type": "bool" } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "", + "type": "tuple" + } + ], + "name": "isProvided", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + } +] diff --git a/test/0_setup-DSA-Gelato.test.js b/test/0_setup-DSA-Gelato.test.js index 3178067..ebdddf9 100644 --- a/test/0_setup-DSA-Gelato.test.js +++ b/test/0_setup-DSA-Gelato.test.js @@ -7,7 +7,6 @@ const GelatoCoreLib = require("@gelatonetwork/core"); const { sleep } = GelatoCoreLib; // Constants -const INSTA_MASTER = "0xfCD22438AD6eD564a1C26151Df73F6B33B817B56"; const ETH = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; // Contracts @@ -17,6 +16,7 @@ const InstaConnectors = require("../pre-compiles/InstaConnectors.json"); const InstaAccount = require("../pre-compiles/InstaAccount.json"); const ConnectAuth = require("../pre-compiles/ConnectAuth.json"); const ConnectBasic = require("../pre-compiles/ConnectBasic.json"); +const ProviderModuleDSA_ABI = require("../pre-compiles/ProviderModuleDSA_ABI.json"); describe("DSA setup with Gelato Tests", function () { this.timeout(50000); @@ -29,7 +29,6 @@ describe("DSA setup with Gelato Tests", function () { let userWallet; let userAddress; let dsaAddress; - let instaMaster; // Deployed instances let instaIndex; @@ -37,11 +36,10 @@ describe("DSA setup with Gelato Tests", function () { let instaConnectors; let instaAccount; let gelatoCore; + let providerModuleDSA; // Contracts to deploy and use for local testing let dsa; - let providerModuleDSA; - let connectGelato; // Other variables let dsaVersion; @@ -51,7 +49,6 @@ describe("DSA setup with Gelato Tests", function () { // Get Test Wallet for local testnet [userWallet] = await ethers.getSigners(); userAddress = await userWallet.getAddress(); - instaMaster = await ethers.provider.getSigner(INSTA_MASTER); // ===== DSA LOCAL SETUP ================== instaIndex = await ethers.getContractAt( @@ -91,25 +88,10 @@ describe("DSA setup with Gelato Tests", function () { GelatoCoreLib.GelatoCore.abi, bre.network.config.GelatoCore ); - - // Deploy ConnectGelato to local testnet - // first query the correct connectorID - const connectorLength = await instaConnectors.connectorLength(); - const connectorId = connectorLength.add(1); - - const ConnectGelato = await ethers.getContractFactory("ConnectGelato"); - connectGelato = await ConnectGelato.deploy(connectorId, gelatoCore.address); - await connectGelato.deployed(); - - // Deploy ProviderModuleDSA to local testnet - const ProviderModuleDSA = await ethers.getContractFactory( - "ProviderModuleDSA" + providerModuleDSA = await ethers.getContractAt( + ProviderModuleDSA_ABI, + bre.network.config.ProviderModuleDSA ); - providerModuleDSA = await ProviderModuleDSA.deploy( - instaIndex.address, - gelatoCore.address - ); - await providerModuleDSA.deployed(); }); it("#1: Forks InstaDapp Mainnet config", async function () { @@ -195,25 +177,10 @@ describe("DSA setup with Gelato Tests", function () { expect(await dsa.isAuth(gelatoCore.address)).to.be.true; }); - it("#5: Allows unlocked InstaDapp master to enable Gelato connector", async function () { - expect(await instaConnectors.isConnector([connectGelato.address])).to.be - .false; - - // Send some ETH to the InstaMaster multi_sig - await userWallet.sendTransaction({ - to: INSTA_MASTER, - value: ethers.utils.parseEther("0.1"), - }); - - // Enable ConnectGelato on InstaConnectors via InstaMaster multisig - await expect( - instaConnectors.connect(instaMaster).enable(connectGelato.address) - ) - .to.emit(instaConnectors, "LogEnable") - .withArgs(connectGelato.address); - - expect(await instaConnectors.isConnector([connectGelato.address])).to.be - .true; + it("#5: ConnectGelato is deployed and whitelisted on mainnet", async function () { + expect( + await instaConnectors.isConnector([bre.network.config.ConnectGelato]) + ).to.be.true; }); it("#6: Gelato ProviderModuleDSA returns correct execPayload", async function () { diff --git a/test/1_mv-DAI-DSR-Compound.test.js b/test/1_mv-DAI-DSR-Compound.test.js index 621a799..b80f882 100644 --- a/test/1_mv-DAI-DSR-Compound.test.js +++ b/test/1_mv-DAI-DSR-Compound.test.js @@ -7,7 +7,6 @@ const GelatoCoreLib = require("@gelatonetwork/core"); const { sleep } = GelatoCoreLib; // Constants -const INSTA_MASTER = "0xfCD22438AD6eD564a1C26151Df73F6B33B817B56"; const DAI_100 = ethers.utils.parseUnits("100", 18); const APY_2_PERCENT_IN_SECONDS = ethers.BigNumber.from( "1000000000627937192491029810" @@ -15,10 +14,10 @@ const APY_2_PERCENT_IN_SECONDS = ethers.BigNumber.from( // Contracts const InstaIndex = require("../pre-compiles/InstaIndex.json"); -const InstaConnectors = require("../pre-compiles/InstaConnectors.json"); const InstaList = require("../pre-compiles/InstaList.json"); const InstaAccount = require("../pre-compiles/InstaAccount.json"); const ConnectAuth = require("../pre-compiles/ConnectAuth.json"); +const ConnectGelato_ABI = require("../pre-compiles/ConnectGelato_ABI.json"); const ConnectMaker = require("../pre-compiles/ConnectMaker.json"); const ConnectCompound = require("../pre-compiles/ConnectCompound.json"); const IERC20 = require("../pre-compiles/IERC20.json"); @@ -47,13 +46,11 @@ describe("Move DAI lending from DSR to Compound", function () { let mockDSR; let mockCDAI; let conditionCompareUints; - let connectGelato; before(async function () { // Get Test Wallet for local testnet [userWallet] = await ethers.getSigners(); userAddress = await userWallet.getAddress(); - const instaMaster = await ethers.provider.getSigner(INSTA_MASTER); // Ganache default accounts prefilled with 100 ETH expect(await userWallet.getBalance()).to.be.gt( @@ -69,10 +66,6 @@ describe("Move DAI lending from DSR to Compound", function () { InstaList.abi, bre.network.config.InstaList ); - const instaConnectors = await ethers.getContractAt( - InstaConnectors.abi, - bre.network.config.InstaConnectors - ); connectMaker = await ethers.getContractAt( ConnectMaker.abi, bre.network.config.ConnectMaker @@ -114,36 +107,6 @@ describe("Move DAI lending from DSR to Compound", function () { ); expect(await dsa.isAuth(gelatoCore.address)).to.be.true; - // Deploy ConnectGelato to local testnet - // first query the correct connectorID - const connectorLength = await instaConnectors.connectorLength(); - const connectorId = connectorLength.add(1); - - const ConnectGelato = await ethers.getContractFactory("ConnectGelato"); - connectGelato = await ConnectGelato.deploy(connectorId, gelatoCore.address); - await connectGelato.deployed(); - - // Enable ConnectGelato on InstaConnectors via InstaMaster multisig - // Send some ETH to the InstaMaster multi_sig - await userWallet.sendTransaction({ - to: INSTA_MASTER, - value: ethers.utils.parseEther("0.1"), - }); - await instaConnectors.connect(instaMaster).enable(connectGelato.address); - expect( - await instaConnectors.isConnector([connectGelato.address]) - ).to.be.true; - - // Deploy ProviderModuleDSA to local testnet - const ProviderModuleDSA = await ethers.getContractFactory( - "ProviderModuleDSA" - ); - providerModuleDSA = await ProviderModuleDSA.deploy( - instaIndex.address, - gelatoCore.address - ); - await providerModuleDSA.deployed(); - // Deploy Mocks for Testing const MockCDAI = await ethers.getContractFactory("MockCDAI"); mockCDAI = await MockCDAI.deploy(APY_2_PERCENT_IN_SECONDS); @@ -277,7 +240,7 @@ describe("Move DAI lending from DSR to Compound", function () { // protocol. Check out ./contracts/ProviderModuleDSA.sol to see what it does. const gelatoSelfProvider = new GelatoCoreLib.GelatoProvider({ addr: dsa.address, - module: providerModuleDSA.address, + module: bre.network.config.ProviderModuleDSA, }); // ======= Executor Setup ========= @@ -300,16 +263,18 @@ describe("Move DAI lending from DSR to Compound", function () { GAS_PRICE_CEIL ); await dsa.cast( - [connectGelato.address], // targets + [bre.network.config.ConnectGelato], // targets [ await bre.run("abi-encode-withselector", { - abi: require("../artifacts/ConnectGelato.json").abi, + abi: ConnectGelato_ABI, functionname: "multiProvide", inputs: [ userAddress, [], - [providerModuleDSA.address], + [bre.network.config.ProviderModuleDSA], TASK_AUTOMATION_FUNDS, + 0, // _getId + 0, // _setId ], }), ], // datas @@ -329,7 +294,10 @@ describe("Move DAI lending from DSR to Compound", function () { userAddress ); expect( - await gelatoCore.isModuleProvided(dsa.address, providerModuleDSA.address) + await gelatoCore.isModuleProvided( + dsa.address, + bre.network.config.ProviderModuleDSA + ) ).to.be.true; // ======= 📣 TASK SUBMISSION 📣 ========= @@ -338,10 +306,10 @@ describe("Move DAI lending from DSR to Compound", function () { const expiryDate = 0; await expect( dsa.cast( - [connectGelato.address], // targets + [bre.network.config.ConnectGelato], // targets [ await bre.run("abi-encode-withselector", { - abi: require("../artifacts/ConnectGelato.json").abi, + abi: ConnectGelato_ABI, functionname: "submitTask", inputs: [ gelatoSelfProvider, diff --git a/yarn.lock b/yarn.lock index 0e1d6f9..e30f868 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,18 +18,18 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@ethereum-waffle/chai@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.0.2.tgz#5492398abbf2b64ec2524deac78777ee62d02d08" - integrity sha512-aXE6KqHmCX0aaSGqeaZP0EvhPou4Ii9g/x7u0oIuj7sYchDk09/TTeuMdFs4EKgdTc7nUpQSdpJ6GuO7pLoNbA== +"@ethereum-waffle/chai@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.1.0.tgz#af88fb2167826f0581bb67ab71d41250a5f83cf6" + integrity sha512-erBoZoseFXZPEEbv9GHqJKjGAG4u1m/NzTRvXUGFDngdZYsBzMDTVU63vIrGVlVu3Cu7Wd5KfdhYib+/iH2xcQ== dependencies: - "@ethereum-waffle/provider" "^3.0.2" + "@ethereum-waffle/provider" "^3.1.0" ethers "^5.0.0" -"@ethereum-waffle/compiler@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.0.2.tgz#26dd7e63369e3c2ba458d6a26c43afe98e1e200e" - integrity sha512-PV6vtaX9szv4aFd5lXqGgfEbWFOkk2975AUDYHZQERWd9e4oerb1FNjQeXBDlYUjBX2UQ1tLlQFkqud2jcBYBg== +"@ethereum-waffle/compiler@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.1.0.tgz#088a3780807fd7614638da805ee1c3081bb3e7c6" + integrity sha512-qFwy9OHbbvltns4tz12mpbSryg8rCpATsdjM+PtSSXSJ7s04fcDlKWJgFERE3jsxE7GMGH8mfr4e7Jqncxxh7w== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" @@ -40,31 +40,33 @@ node-fetch "^2.6.0" solc "^0.6.3" -"@ethereum-waffle/ens@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.0.2.tgz#0ace2f5efbcba79a763697830bf16260c0bd7460" - integrity sha512-XkOVIbUvMt5hl6ZHgceqI7smWUercCV0LQtUjXgXPTUfONsB6JSPqAE2H6cc4sXqn82Q3cPThderLvT5QNTyRA== +"@ethereum-waffle/ens@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.1.0.tgz#d2d1173b7aad351360479a4dbe2626e9b960ba72" + integrity sha512-Q0/MUBJQsiPseZv0Sv/GFOVdWGn0wRChWtUd30r94qlcM7OqmXLdx4YQSMGu7BhRPdp2DQE2CYMFTKjiznfRkA== dependencies: "@ensdomains/ens" "^0.4.4" "@ensdomains/resolver" "^0.2.4" ethers "^5.0.1" -"@ethereum-waffle/mock-contract@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.0.2.tgz#ba0ecdd872c1eedb75a223c20d3afbea32d843f6" - integrity sha512-a3THe64cR24TxgwU2Tmk8uwZDWGv9QCKUpEhKVVArxRIF800AKMZfhIF61liXMkSVQDgivtYsayNniYxM8M11Q== +"@ethereum-waffle/mock-contract@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.1.0.tgz#64a6f8ba4e18b9b22305f0ef9e673848e1fb2c6a" + integrity sha512-mhvyb9P5aM7D2qHmaAH2ONbR95L7pVveRR9s7zfcxYdzJP0KCjy2IZfPmhOZDe/lW1tXuM3m/OL+oHfKTRYbdw== dependencies: "@ethersproject/abi" "^5.0.1" ethers "^5.0.1" -"@ethereum-waffle/provider@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.0.2.tgz#2416237ca97c1f7d8dfca990fe85c9f27d921f4d" - integrity sha512-jIbaW4mSBZmzIRUxBSuutwucdxXWOp5e3m16ds6PRnMBNd8civ9LwPM6RqwxC8pNTq/APMf6bFqLJo4UVW3PIg== +"@ethereum-waffle/provider@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.1.0.tgz#f8f668501db163b99d6c653083faa07eb28b5324" + integrity sha512-MPlmtYWVEjObSrneZQKHprRe00Da768IdT1+hyWq5x6uXluYdqo5hZc9LVNTd2f9WfHasZ8YWZLUC/wsEb86ig== dependencies: - "@ethereum-waffle/ens" "^3.0.2" + "@ethereum-waffle/ens" "^3.1.0" ethers "^5.0.1" ganache-core "^2.10.2" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" "@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1": version "5.0.2" @@ -81,6 +83,21 @@ "@ethersproject/properties" "^5.0.0" "@ethersproject/strings" "^5.0.0" +"@ethersproject/abi@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.5.tgz#6e7bbf9d014791334233ba18da85331327354aa1" + integrity sha512-FNx6UMm0LnmCMFzN3urohFwZpjbUHPvc/O60h4qkF4yiJxLJ/G7QOSPjkHQ/q/QibagR4S7OKQawRy0NcvWa9w== + 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" + "@ethersproject/abstract-provider@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.2.tgz#9b4e8f4870f0691463e8d5b092c95dd5275c635d" @@ -94,6 +111,19 @@ "@ethersproject/transactions" "^5.0.0" "@ethersproject/web" "^5.0.0" +"@ethersproject/abstract-provider@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.4.tgz#ef12df8cb5e66d0d47b567ad6ed642d682043773" + integrity sha512-EOCHUTS8jOE3WZlA1pq9b/vQwKDyDzMy4gXeAv0wZecH1kwUkD0++x8avxeSYoWI+aJn62P1FVV9B6r9pM56kQ== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + "@ethersproject/abstract-signer@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.2.tgz#5776f888fda816de1d08ddb0e74778ecb9590f69" @@ -105,6 +135,17 @@ "@ethersproject/logger" "^5.0.0" "@ethersproject/properties" "^5.0.0" +"@ethersproject/abstract-signer@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.5.tgz#d1cdea6b0b82fb8e4a83f6899ba84d3dc3bb6e66" + integrity sha512-nwSZKtCTKhJADlW42c+a//lWxQlnA7jYLTnabJ3YCfgGU6ic9jnT9nRDlAyT1U3kCMeqPL7fTcKbdWCVrM0xsw== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/address@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.2.tgz#80d0ddfb7d4bd0d32657747fa4bdd2defef2e00a" @@ -117,6 +158,18 @@ "@ethersproject/rlp" "^5.0.0" bn.js "^4.4.0" +"@ethersproject/address@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.4.tgz#8669bcbd02f4b64f4cede0a10e84df6d964ec9d3" + integrity sha512-CIjAeG6zNehbpJTi0sgwUvaH2ZICiAV9XkCBaFy5tjuEVFpQNeqd6f+B7RowcNO7Eut+QbhcQ5CVLkmP5zhL9A== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp" "^5.0.3" + bn.js "^4.4.0" + "@ethersproject/base64@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.2.tgz#48b3bb8d640a963bd8ee196cfeacd592155a0ca8" @@ -124,6 +177,13 @@ dependencies: "@ethersproject/bytes" "^5.0.0" +"@ethersproject/base64@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.3.tgz#d0aaa32c9ab08e2d62a6238581607ab6e929297e" + integrity sha512-sFq+/UwGCQsLxMvp7yO7yGWni87QXoV3C3IfjqUSY2BHkbZbCDm+PxZviUkiKf+edYZ2Glp0XnY7CgKSYUN9qw== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/basex@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.2.tgz#13029ce0ad63674f4d4dbebf6763181fb22f0e6d" @@ -132,6 +192,14 @@ "@ethersproject/bytes" "^5.0.0" "@ethersproject/properties" "^5.0.0" +"@ethersproject/basex@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.3.tgz#f8c9bc449a089131f52cfa8698cf77bc22e27e32" + integrity sha512-EvoER+OXsMAZlvbC0M/9UTxjvbBvTccYCI+uCAhXw+eS1+SUdD4v7ekAFpVX78rPLrLZB1vChKMm6vPHIu3WRA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/bignumber@^5.0.0": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.5.tgz#31bd7e75aad46ace345fae69b1f5bb120906af1b" @@ -141,6 +209,15 @@ "@ethersproject/logger" "^5.0.0" bn.js "^4.4.0" +"@ethersproject/bignumber@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.7.tgz#720b3e3df3e125a99669ee869478106d0afe7b76" + integrity sha512-wwKgDJ+KA7IpgJwc8Fc0AjKIRuDskKA2cque29/+SgII9/1K/38JpqVNPKIovkLwTC2DDofIyzHcxeaKpMFouQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + bn.js "^4.4.0" + "@ethersproject/bytes@^5.0.0": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.3.tgz#b3769963ae0188a35713d343890a903bda20af9c" @@ -148,6 +225,13 @@ dependencies: "@ethersproject/logger" "^5.0.0" +"@ethersproject/bytes@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.4.tgz#328d9d929a3e970964ecf5d62e12568a187189f1" + integrity sha512-9R6A6l9JN8x1U4s1dJCR+9h3MZTT3xQofr/Xx8wbDvj6NnY4CbBB0o8ZgHXvR74yV90pY2EzCekpkMBJnRzkSw== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/constants@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.2.tgz#f7ac0b320e2bbec1a5950da075015f8bc4e8fed1" @@ -155,6 +239,13 @@ dependencies: "@ethersproject/bignumber" "^5.0.0" +"@ethersproject/constants@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.4.tgz#9ddaa5f3c738a94e5adc4b3f71b36206fa5cdf88" + integrity sha512-Df32lcXDHPgZRPgp1dgmByNbNe4Ki1QoXR+wU61on5nggQGTqWR1Bb7pp9VtI5Go9kyE/JflFc4Te6o9MvYt8A== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/contracts@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.2.tgz#f19ed8335ceeb6abb60f5d45641f0a2a62b6fbc5" @@ -170,6 +261,21 @@ "@ethersproject/logger" "^5.0.0" "@ethersproject/properties" "^5.0.0" +"@ethersproject/contracts@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.4.tgz#27a2d7e3a7eef9bd8d006824ac2a74157b523988" + integrity sha512-gfOZNgLiO9e1D/hmQ4sEyqoolw6jDFVfqirGJv3zyFKNyX+lAXLN7YAZnnWVmp4GU1jiMtSqQKjpWp7r6ihs3Q== + dependencies: + "@ethersproject/abi" "^5.0.5" + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/hash@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.2.tgz#6d69558786961836d530b8b4a8714eac5388aec7" @@ -180,6 +286,16 @@ "@ethersproject/logger" "^5.0.0" "@ethersproject/strings" "^5.0.0" +"@ethersproject/hash@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.4.tgz#385642786405d236f3d2f1acdfaf250ab519cdac" + integrity sha512-VCs/bFBU8AQFhHcT1cQH6x7a4zjulR6fJmAOcPxUgrN7bxOQ7QkpBKF+YCDJhFtkLdaljIsr/r831TuWU4Ysfg== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/hdnode@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.2.tgz#c4f2152590a64822d0c0feb90f09cc247af657e0" @@ -198,6 +314,24 @@ "@ethersproject/transactions" "^5.0.0" "@ethersproject/wordlists" "^5.0.0" +"@ethersproject/hdnode@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.4.tgz#9c07a87781b24b9cae3507fe9404361c5870f1b7" + integrity sha512-eHmpNLvasfB4xbmQUvKXOsGF4ekjIKJH/eZm7fc6nIdMci9u5ERooSSRLjs9Dsa5QuJf6YD4DbqeJsT71n47iw== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/json-wallets@^5.0.0": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.4.tgz#e09bf2d34279c6dd2b4a4d4c44db65471bacc68b" @@ -217,6 +351,25 @@ aes-js "3.0.0" scrypt-js "3.0.1" +"@ethersproject/json-wallets@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.6.tgz#c6c1818dcab18ecf3f37fa59ca504b9bc162d559" + integrity sha512-BPCfyGdwOUSp6+xA59IaZ/2pUWrUOL5Z9HuCh8YLsJzkuyBJQN0j+z/PmhIiZ7X8ilhuE+pRUwXb42U/R39fig== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/keccak256@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.2.tgz#7ed4a95bb45ee502cf4532223833740a83602797" @@ -225,11 +378,24 @@ "@ethersproject/bytes" "^5.0.0" js-sha3 "0.5.7" +"@ethersproject/keccak256@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.3.tgz#f094a8fca3bb913c044593c4f382be424292e588" + integrity sha512-VhW3mgZMBZlETV6AyOmjNeNG+Pg68igiKkPpat8/FZl0CKnfgQ+KZQZ/ee1vT+X0IUM8/djqnei6btmtbA27Ug== + dependencies: + "@ethersproject/bytes" "^5.0.4" + js-sha3 "0.5.7" + "@ethersproject/logger@^5.0.0": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.4.tgz#09fa4765b5691233e3afb6617cb38a700f9dd2e4" integrity sha512-alA2LiAy1LdQ/L1SA9ajUC7MvGAEQLsICEfKK4erX5qhkXE1LwLSPIzobtOWFsMHf2yrXGKBLnnpuVHprI3sAw== +"@ethersproject/logger@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.5.tgz#e3ba3d0bcf9f5be4da5f043b1e328eb98b80002f" + integrity sha512-gJj72WGzQhUtCk6kfvI8elTaPOQyMvrMghp/nbz0ivTo39fZ7IjypFh/ySDeUSdBNplAwhzWKKejQhdpyefg/w== + "@ethersproject/networks@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.2.tgz#a49e82cf071e3618e87e3c5d69fdbcf54dc6766c" @@ -237,6 +403,13 @@ dependencies: "@ethersproject/logger" "^5.0.0" +"@ethersproject/networks@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.3.tgz#c4ebe56e79ca399247382627e50a022aa68ece55" + integrity sha512-Gjpejul6XFetJXyvHCd37IiCC00203kYGU9sMaRMZcAcYKszCkbOeo/Q7Mmdr/fS7YBbB5iTOahDJWiRLu/b7A== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.2.tgz#d12c5f434bbdf6f52401eddb7d753a713dd9e4ea" @@ -245,6 +418,14 @@ "@ethersproject/bytes" "^5.0.0" "@ethersproject/sha2" "^5.0.0" +"@ethersproject/pbkdf2@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.3.tgz#f9eca284a458cd11179d407884c595412d8d2775" + integrity sha512-asc+YgJn7v7GKWYXGz3GM1d9XYI2HvdCw1cLEow2niEC9BfYA29rr1exz100zISk95GIU1YP2zV//zHsMtWE5Q== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/properties@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.2.tgz#2facb62d2f2d968c7b3d0befa5bcc884cc565d3b" @@ -252,6 +433,13 @@ dependencies: "@ethersproject/logger" "^5.0.0" +"@ethersproject/properties@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.3.tgz#991aef39a5f87d4645cee76cec4df868bfb08be6" + integrity sha512-wLCSrbywkQgTO6tIF9ZdKsH9AIxPEqAJF/z5xcPkz1DK4mMAZgAXRNw1MrKYhyb+7CqNHbj3vxenNKFavGY/IA== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/providers@^5.0.0": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.5.tgz#fa28498ce9683d1d99f6cb11e1a7fe8d4886e0ce" @@ -274,6 +462,31 @@ "@ethersproject/web" "^5.0.0" ws "7.2.3" +"@ethersproject/providers@^5.0.8": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.9.tgz#88b48596dcfb0848a89da3160d2e2a055fc899f6" + integrity sha512-UtGrlJxekFNV7lriPOxQbnYminyiwTgjHMPX83pG7N/W/t+PekQK8V9rdlvMr2bRyGgafHml0ZZMaTV4FxiBYg== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + bech32 "1.1.4" + ws "7.2.3" + "@ethersproject/random@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.2.tgz#bb58aca69a85e8de506686117f050d03dac69023" @@ -282,6 +495,14 @@ "@ethersproject/bytes" "^5.0.0" "@ethersproject/logger" "^5.0.0" +"@ethersproject/random@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.3.tgz#ec16546fffdc10b9082f1207bd3a09f54cbcf5e6" + integrity sha512-pEhWRbgNeAY1oYk4nIsEtCTh9TtLsivIDbOX11n+DLZLYM3c8qCLxThXtsHwVsMs1JHClZr5auYC4YxtVVzO/A== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.2.tgz#d6b550a2ac5e484f15f0f63337e522004d2e78cd" @@ -290,6 +511,14 @@ "@ethersproject/bytes" "^5.0.0" "@ethersproject/logger" "^5.0.0" +"@ethersproject/rlp@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.3.tgz#841a5edfdf725f92155fe74424f5510c9043c13a" + integrity sha512-Hz4yyA/ilGafASAqtTlLWkA/YqwhQmhbDAq2LSIp1AJNx+wtbKWFAKSckpeZ+WG/xZmT+fw5OFKK7a5IZ4DR5g== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/sha2@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.2.tgz#baefc78c071be8729b180759eb29267129314252" @@ -299,6 +528,15 @@ "@ethersproject/logger" "^5.0.0" hash.js "1.1.3" +"@ethersproject/sha2@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.3.tgz#52c16edc1135d0ec7d242d88eed035dae72800c0" + integrity sha512-B1U9UkgxhUlC1J4sFUL2GwTo33bM2i/aaD3aiYdTh1FEXtGfqYA89KN1DJ83n+Em8iuvyiBRk6u30VmgqlHeHA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + hash.js "1.1.3" + "@ethersproject/signing-key@^5.0.0": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.3.tgz#adb84360e147bfd336cb2fe114100120732dc10a" @@ -309,6 +547,16 @@ "@ethersproject/properties" "^5.0.0" elliptic "6.5.3" +"@ethersproject/signing-key@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.4.tgz#a5334ce8a52d4e9736dc8fb6ecc384704ecf8783" + integrity sha512-I6pJoga1IvhtjYK5yXzCjs4ZpxrVbt9ZRAlpEw0SW9UuV020YfJH5EIVEGR2evdRceS3nAQIggqbsXSkP8Y1Dg== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + elliptic "6.5.3" + "@ethersproject/solidity@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.2.tgz#431cee341ec51e022bd897b93fef04521f414756" @@ -320,6 +568,17 @@ "@ethersproject/sha2" "^5.0.0" "@ethersproject/strings" "^5.0.0" +"@ethersproject/solidity@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.4.tgz#67022cbfb50cb73b72d1739178537a9e798945bf" + integrity sha512-cUq1l8A+AgRkIItRoztC98Qx7b0bMNMzKX817fszDuGNsT2POAyP5knvuEt4Fx4IBcJREXoOjsGYFfjyK5Sa+w== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/strings@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.2.tgz#1753408c3c889813fd0992abd76393e3e47a2619" @@ -329,6 +588,15 @@ "@ethersproject/constants" "^5.0.0" "@ethersproject/logger" "^5.0.0" +"@ethersproject/strings@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.4.tgz#67cda604eee3ffcc004cb9f3bd03516e1c7b09a0" + integrity sha512-azXFHaNkDXzefhr4LVVzzDMFwj3kH9EOKlATu51HjxabQafuUyVLPFgmxRFmCynnAi0Bmmp7nr+qK1pVDgRDLQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/transactions@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.2.tgz#590ede71fc87b45be7bd46002e18ae52246a2347" @@ -344,6 +612,21 @@ "@ethersproject/rlp" "^5.0.0" "@ethersproject/signing-key" "^5.0.0" +"@ethersproject/transactions@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.5.tgz#9a966f9ef4817b1752265d4efee0f1e9fd6aeaad" + integrity sha512-1Ga/QmbcB74DItggP8/DK1tggu4ErEvwTkIwIlUXUcvIAuRNXXE7kgQhlp+w1xA/SAQFhv56SqCoyqPiiLCvVA== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/units@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.2.tgz#de1461ff3ad2587e57bf367d056b6b72cfceda78" @@ -353,6 +636,15 @@ "@ethersproject/constants" "^5.0.0" "@ethersproject/logger" "^5.0.0" +"@ethersproject/units@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.4.tgz#e08876b54e1f6b362a841dcd986496a425875735" + integrity sha512-80d6skjDgiHLdbKOA9FVpzyMEPwbif40PbGd970JvcecVf48VjB09fUu37d6duG8DhRVyefRdX8nuVQLzcGGPw== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/wallet@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.2.tgz#714ca8324c1b3b66e51b9b4e0358c882e88caf1d" @@ -374,6 +666,27 @@ "@ethersproject/transactions" "^5.0.0" "@ethersproject/wordlists" "^5.0.0" +"@ethersproject/wallet@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.4.tgz#b414ae2870fc0ea10808330f0ab3c5a1ac9e34e1" + integrity sha512-h/3mdy6HZVketHbs6ZP/WjHDz+rtTIE3qZrko2MVeafjgDcYWaHcVmhsPq4LGqxginhr191a4dkJDNeQrQZWOw== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/json-wallets" "^5.0.6" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/web@^5.0.0": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.3.tgz#f5673923009bb855302f0296ddb932da8e42f0a1" @@ -385,6 +698,17 @@ "@ethersproject/properties" "^5.0.0" "@ethersproject/strings" "^5.0.0" +"@ethersproject/web@^5.0.6": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.7.tgz#ab8ccffa9cee9469a8b49af8b8fee30e384e59d8" + integrity sha512-BM8FdGrzdcULYaOIyMXDKvxv+qOwGne8FKpPxUrifZIWAWPrq/y+oBOZlzadIKsP3wvYbAcMN2CgOLO1E3yIfw== + dependencies: + "@ethersproject/base64" "^5.0.3" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/wordlists@^5.0.0": version "5.0.2" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.2.tgz#eded47314509c8608373fc2b22879ee2b71b7c7c" @@ -396,6 +720,17 @@ "@ethersproject/properties" "^5.0.0" "@ethersproject/strings" "^5.0.0" +"@ethersproject/wordlists@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.4.tgz#76a7e1dfd95aea645f6be2c1932b3f89b7f0c4ce" + integrity sha512-z/NsGqdYFvpeG6vPLxuD0pYNR5lLhQAy+oLVqg6G0o1c/OoL5J/a0iDOAFvnacQphc3lMP52d1LEX3YGoy2oBQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@gelatonetwork/core@0.5.3": version "0.5.3" resolved "https://registry.yarnpkg.com/@gelatonetwork/core/-/core-0.5.3.tgz#8193c25cc4a91aca08c4cdb4d6fc38459902065d" @@ -416,18 +751,18 @@ ts-essentials "^2.0.7" ts-interface-checker "^0.1.9" -"@nomiclabs/buidler-waffle@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/buidler-waffle/-/buidler-waffle-2.0.0.tgz#425dd952898e63494b696f9556896975603684ff" - integrity sha512-slGUjMmooIFehk1EMz+gSD07x6RVhp9aEHCmjk5MDm9FuV0+1IhPrk0DDl9ZKYlb5dgTRSWOqzIOXLXhnjmt0A== +"@nomiclabs/buidler-waffle@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler-waffle/-/buidler-waffle-2.1.0.tgz#9869ac829162eb57ac4e4096f0a02bd7ef54a71a" + integrity sha512-Z1SJOGrRCcSu9E87mFaBHi4QimNxP9ZTYtJwLZCcyszS1fi0XLgp4syzTH3QXrQUBOP2P5oQMD6uCp0gNNS3hw== dependencies: "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@nomiclabs/buidler@1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.4.3.tgz#4ac50d82830bd660fbd3b25ffd08e1d649da172e" - integrity sha512-EcUurzBFN9yJxoAzeKW+72NCyWa2WIe1pC0AOIapoUsIhElFy8OpIKERK28EWB2yuQlIxhI98hg5ieAWVg3qJw== +"@nomiclabs/buidler@1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.4.7.tgz#88436ba53e0e830d37c16601df59da4dbffde524" + integrity sha512-TyJKwKyKwu82uYPneqLf5HKFr96QX7cHDT7O7Ro93zmk1b84+EH9tn3zNIO/+96DMGISp8cCRwZhct89OwblRA== dependencies: "@nomiclabs/ethereumjs-vm" "^4.1.1" "@sentry/node" "^5.18.1" @@ -443,6 +778,7 @@ deepmerge "^2.1.0" download "^7.1.0" enquirer "^2.3.0" + env-paths "^2.2.0" eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" @@ -751,6 +1087,11 @@ typedarray-to-buffer "^3.1.5" yaeti "^0.0.6" +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1687,6 +2028,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + bignumber.js@*: version "9.0.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" @@ -2430,6 +2776,17 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypto-browserify@3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2842,6 +3199,11 @@ enquirer@^2.3.0: dependencies: ansi-colors "^4.1.1" +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + errno@~0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -3127,15 +3489,15 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereum-waffle@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.0.2.tgz#3d68f04e61dd01d67633e3c93ed15810b7743b88" - integrity sha512-VJQTL9oBbHIQRxQFuh1NBXoFXSlTIY6DrkPpO7CvevXRI9ixxq01nSc6hPYUIVy7s+U03sp4ply497O6mD3gsQ== +ethereum-waffle@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.1.0.tgz#ae6a006fd859c97694e9c7248aa8c7623113b932" + integrity sha512-QSEzYhxBAjJAgVXZcR1lMB4Px1lAtf8M3QQPIflasNwHpw/VZWaYqN4o2fl615iPtOc3FFtMu1JSEbiuYojk/w== dependencies: - "@ethereum-waffle/chai" "^3.0.2" - "@ethereum-waffle/compiler" "^3.0.2" - "@ethereum-waffle/mock-contract" "^3.0.2" - "@ethereum-waffle/provider" "^3.0.2" + "@ethereum-waffle/chai" "^3.1.0" + "@ethereum-waffle/compiler" "^3.1.0" + "@ethereum-waffle/mock-contract" "^3.1.0" + "@ethereum-waffle/provider" "^3.1.0" ethers "^5.0.1" ethereumjs-abi@0.6.5: @@ -3382,7 +3744,43 @@ ethers@4.0.0-beta.3: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@5.0.8, ethers@^5.0.0, ethers@^5.0.1: +ethers@5.0.14: + version "5.0.14" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.14.tgz#fc33613ff3c1eb04c481f32083f2be315079e2a2" + integrity sha512-6WkoYwAURTr/4JiSZlrMJ9mm3pBv/bWrOu7sVXdLGw9QU4cp/GDZVrKKnh5GafMTzanuNBJoaEanPCjsbe4Mig== + dependencies: + "@ethersproject/abi" "^5.0.5" + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/base64" "^5.0.3" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/contracts" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/json-wallets" "^5.0.6" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/providers" "^5.0.8" + "@ethersproject/random" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/solidity" "^5.0.4" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/units" "^5.0.4" + "@ethersproject/wallet" "^5.0.4" + "@ethersproject/web" "^5.0.6" + "@ethersproject/wordlists" "^5.0.4" + +ethers@^5.0.0, ethers@^5.0.1: version "5.0.8" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.8.tgz#c13d0fdf5e66db8085e2036d3309ed2f8a17ed89" integrity sha512-of/rPgJ7E3yyBADUv5A7Gtkd7EB8ta/T9NS5CCG9tj9cifnXcI3KIdYQ7d8AS+9vm38pR1g6S5I+Q/mRnlQZlg== @@ -3721,6 +4119,14 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -3870,7 +4276,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^4.0.2: +fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== @@ -4617,6 +5023,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.0: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -5080,6 +5493,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5569,7 +5989,7 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5, minimist@~1.2.5: +minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -5708,6 +6128,11 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -6094,6 +6519,24 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -6126,6 +6569,11 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -6215,6 +6663,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" @@ -6896,7 +7349,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6994,6 +7447,18 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -7013,6 +7478,11 @@ slash@^1.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7508,7 +7978,7 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -tmp@0.0.33: +tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -8274,7 +8744,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1.3.1, which@^1.2.14: +which@1.3.1, which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==