diff --git a/.circleci/config.yml b/.circleci/config.yml index 1997cb74..8248b5ca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2 jobs: checkout_and_compile: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts steps: - checkout @@ -33,7 +33,7 @@ jobs: - ~/index-coop-smart-contracts test: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts parallelism: 2 steps: @@ -60,7 +60,7 @@ jobs: test_integration_polygon: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts steps: - setup_remote_docker: @@ -83,7 +83,7 @@ jobs: test_integration_optimism: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts steps: - setup_remote_docker: @@ -106,7 +106,7 @@ jobs: test_integration_ethereum: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts steps: - setup_remote_docker: @@ -129,7 +129,7 @@ jobs: coverage: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts parallelism: 2 steps: @@ -166,7 +166,7 @@ jobs: report_coverage: docker: - - image: cimg/node:16.18 + - image: cimg/node:20.12.2 working_directory: ~/index-coop-smart-contracts steps: - attach_workspace: @@ -184,26 +184,63 @@ jobs: command: | cat coverage/lcov.info | ./node_modules/.bin/coveralls + test_integration_arbitrum: + docker: + - image: cimg/node:20.12.2 + working_directory: ~/index-coop-smart-contracts + steps: + - setup_remote_docker: + docker_layer_caching: false + - run: + name: Fetch solc version + command: docker pull ethereum/solc:0.6.10 + - restore_cache: + key: compiled-env-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: Set Up Environment Variables + command: cp .env.default .env + - run: + name: Test RPC + command: yarn chain:fork:arbitrum + environment: + ARBITRUM_RPC_URL: https://arb-mainnet.g.alchemy.com/v2/NpgutFt2TfCFgUsHixNBsyoIkdgfg6tH + NETWORK: arbitrum + FORK: TRUE + background: true + - run: + name: Hardhat Test + environment: + ARBITRUM_RPC_URL: https://arb-mainnet.g.alchemy.com/v2/NpgutFt2TfCFgUsHixNBsyoIkdgfg6tH + NETWORK: arbitrum + FORK: TRUE + command: yarn run test:integration:arbitrum + workflows: version: 2 build-and-test: jobs: - checkout_and_compile - - test: - requires: - - checkout_and_compile + # TODO: Comment back in when adding a new non-integration test (and use .only() to avoid rerunning all the old tests) + # - test: + # requires: + # - checkout_and_compile - test_integration_ethereum: requires: - checkout_and_compile - - test_integration_polygon: - requires: - - checkout_and_compile - - test_integration_optimism: + # TODO: Reactivate when developing new contract on polygon (and use .only() to avoid rerunning all the old tests) + # - test_integration_polygon: + # requires: + # - checkout_and_compile + # TODO: Reactivate when developing new contract on optimism (and use .only() to avoid rerunning all the old tests) + # - test_integration_optimism: + # requires: + # - checkout_and_compile + - test_integration_arbitrum: requires: - checkout_and_compile - - coverage: - requires: - - checkout_and_compile - - report_coverage: - requires: - - coverage + # - coverage: + # requires: + # - checkout_and_compile + # - report_coverage: + # requires: + # - coverage diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index e02ac2cc..e9d2e97c 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -14,17 +14,13 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 - name: copy env run: cp .env.default .env - name: install run: yarn - name: build run: yarn build - - name: test - run: | - yarn chain & - yarn test publish: runs-on: ubuntu-latest @@ -34,7 +30,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 - name: copy env run: cp .env.default .env - name: install diff --git a/contracts/exchangeIssuance/DEXAdapter.sol b/contracts/exchangeIssuance/DEXAdapter.sol index 5cef223e..842378f9 100644 --- a/contracts/exchangeIssuance/DEXAdapter.sol +++ b/contracts/exchangeIssuance/DEXAdapter.sol @@ -100,7 +100,7 @@ library DEXAdapter { external returns (uint256) { - if (_swapData.path[0] == _swapData.path[_swapData.path.length -1]) { + if (_swapData.path.length == 0 || _swapData.path[0] == _swapData.path[_swapData.path.length -1]) { return _amountIn; } @@ -151,7 +151,7 @@ library DEXAdapter { external returns (uint256 amountIn) { - if (_swapData.path[0] == _swapData.path[_swapData.path.length -1]) { + if (_swapData.path.length == 0 || _swapData.path[0] == _swapData.path[_swapData.path.length -1]) { return _amountOut; } diff --git a/contracts/exchangeIssuance/FlashMintLeveraged.sol b/contracts/exchangeIssuance/FlashMintLeveraged.sol index 350cb224..ae5cf0c7 100644 --- a/contracts/exchangeIssuance/FlashMintLeveraged.sol +++ b/contracts/exchangeIssuance/FlashMintLeveraged.sol @@ -36,6 +36,7 @@ import { DEXAdapter } from "./DEXAdapter.sol"; import {IVault, IFlashLoanRecipient} from "../interfaces/external/balancer-v2/IVault.sol"; import {IPool} from "../interfaces/IPool.sol"; + /** * @title FlashMintLeveraged * @author Index Coop @@ -284,6 +285,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapDataOutputToken ) external + virtual nonReentrant { _initiateRedemption( @@ -315,6 +317,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapDataOutputToken ) external + virtual nonReentrant { _initiateRedemption( @@ -346,6 +349,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapDataInputToken ) external + virtual nonReentrant { _initiateIssuance( @@ -373,6 +377,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapDataInputToken ) external + virtual payable nonReentrant { @@ -784,6 +789,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapData ) internal + virtual returns (uint256) { if(address(_outputToken) == _collateralToken){ @@ -820,6 +826,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapData ) internal + virtual isValidPath(_swapData.path, _collateralToken, addresses.weth) returns(uint256) { @@ -958,6 +965,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ DEXAdapter.SwapData memory _swapData ) internal + virtual returns (uint256) { if(address(_inputToken) == _collateralToken){ @@ -998,6 +1006,7 @@ contract FlashMintLeveraged is ReentrancyGuard, IFlashLoanRecipient{ ) internal + virtual returns(uint256) { IWETH(addresses.weth).deposit{value: _maxAmountEth}(); diff --git a/contracts/exchangeIssuance/FlashMintLeveragedExtended.sol b/contracts/exchangeIssuance/FlashMintLeveragedExtended.sol new file mode 100644 index 00000000..c20466c7 --- /dev/null +++ b/contracts/exchangeIssuance/FlashMintLeveragedExtended.sol @@ -0,0 +1,705 @@ +/* + Copyright 2024 Index Cooperative + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache License, Version 2.0 +*/ +pragma solidity 0.6.10; +pragma experimental ABIEncoderV2; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +import { FlashMintLeveraged } from "./FlashMintLeveraged.sol"; +import { DEXAdapter } from "./DEXAdapter.sol"; +import { IController } from "../interfaces/IController.sol"; +import { IAaveLeverageModule } from "../interfaces/IAaveLeverageModule.sol"; +import { IDebtIssuanceModule } from "../interfaces/IDebtIssuanceModule.sol"; +import { IAToken } from "../interfaces/IAToken.sol"; +import { ISetToken } from "../interfaces/ISetToken.sol"; +import { IWETH } from "../interfaces/IWETH.sol"; + + + +/** + * @title FlashMintLeveragedExtended + * @author Index Coop + * + * Extended version of FlashMintLeveraged which allows for exactInputIssuance and exactOutputRedemption + */ +contract FlashMintLeveragedExtended is FlashMintLeveraged, Ownable { + + + uint256 public maxIterations = 10; + uint256 public maxGasRebate = 0.01 ether; + + /* ============ Constructor ============ */ + + /** + * Sets various contract addresses + * + * @param _addresses dex adapter addreses + * @param _setController SetToken controller used to verify a given token is a set + * @param _debtIssuanceModule DebtIssuanceModule used to issue and redeem tokens + * @param _aaveLeverageModule AaveLeverageModule to sync before every issuance / redemption + * @param _aaveV3Pool Address of address provider for aaves addresses + * @param _vault Balancer Vault to flashloan from + */ + constructor( + DEXAdapter.Addresses memory _addresses, + IController _setController, + IDebtIssuanceModule _debtIssuanceModule, + IAaveLeverageModule _aaveLeverageModule, + address _aaveV3Pool, + address _vault + ) Ownable() + public + FlashMintLeveraged(_addresses, _setController, _debtIssuanceModule, _aaveLeverageModule, _aaveV3Pool, _vault) + { + } + + /** + * Redeems a variable amount of setTokens to return exactly the specified amount of outputToken to the user + * + * @param _setToken Set token to redeem + * @param _maxSetAmount Maximum amout of set tokens to redeem + * @param _outputToken Address of output token to return to the user + * @param _outputTokenAmount Amount of output token to return to the user + * @param _swapDataCollateralForDebt Data (token path and fee levels) describing the swap from Collateral Token to Debt Token + * @param _swapDataCollateralForOutputToken Data (token path and fee levels) describing the swap from Collateral Token to Output TOken + * @param _swapDataDebtForCollateral Data (token path and fee levels) describing the swap from Debt Token to Collateral Token + * @param _swapDataOutputTokenForCollateral Data (token path and fee levels) describing the swap from Output Token to Collateral Token + * @param _swapDataOutputTokenForETH Data (token path and fee levels) describing the swap from Output Token to ETH + * @param _priceEstimateInflator Factor by which to increase the estimated price from the previous iteration to account for used up liquidity + * @param _maxDust Minimum accuracy for approximating the output token amount. Excess will be swapped to eth and returned to user as gas rebate + */ + function redeemSetForExactERC20( + ISetToken _setToken, + uint256 _maxSetAmount, + address _outputToken, + uint256 _outputTokenAmount, + DEXAdapter.SwapData memory _swapDataCollateralForDebt, + DEXAdapter.SwapData memory _swapDataCollateralForOutputToken, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataOutputTokenForCollateral, + DEXAdapter.SwapData memory _swapDataOutputTokenForETH, + uint256 _priceEstimateInflator, + uint256 _maxDust + ) + external + nonReentrant + returns(uint256 setAmount) + { + uint256 setBalanceBefore = _setToken.balanceOf(msg.sender); + uint256 outputTokenBalanceBefore = IERC20(_outputToken).balanceOf(address(this)); + _initiateRedemption( + _setToken, + _maxSetAmount, + _outputToken, + _outputTokenAmount, + _swapDataCollateralForDebt, + _swapDataCollateralForOutputToken + ); + + _issueSetFromExcessOutput( + _setToken, + _maxSetAmount, + _outputToken, + _outputTokenAmount, + _swapDataDebtForCollateral, + _swapDataOutputTokenForCollateral, + _priceEstimateInflator, + _maxDust, + outputTokenBalanceBefore + ); + _sendOutputTokenAndETHToUser(_outputToken, outputTokenBalanceBefore, _outputTokenAmount, _swapDataOutputTokenForETH); + return setBalanceBefore.sub(_setToken.balanceOf(msg.sender)); + } + + /** + * Redeems a variable amount of setTokens to return exactly the specified amount of ETH to the user + * + * @param _setToken Set token to redeem + * @param _maxSetAmount Maximum amout of set tokens to redeem + * @param _outputTokenAmount Amount of eth to return to the user + * @param _swapDataCollateralForDebt Data (token path and fee levels) describing the swap from Collateral Token to Debt Token + * @param _swapDataCollateralForOutputToken Data (token path and fee levels) describing the swap from Collateral Token to eth + * @param _swapDataDebtForCollateral Data (token path and fee levels) describing the swap from Debt Token to Collateral Token + * @param _swapDataOutputTokenForCollateral Data (token path and fee levels) describing the swap from eth to Collateral Token + * @param _priceEstimateInflator Factor by which to increase the estimated price from the previous iteration to account for used up liquidity + * @param _maxDust Minimum accuracy for approximating the eth amount. Excess will be swapped to eth and returned to user as gas rebate + */ + function redeemSetForExactETH( + ISetToken _setToken, + uint256 _maxSetAmount, + uint256 _outputTokenAmount, + DEXAdapter.SwapData memory _swapDataCollateralForDebt, + DEXAdapter.SwapData memory _swapDataCollateralForOutputToken, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataOutputTokenForCollateral, + uint256 _priceEstimateInflator, + uint256 _maxDust + ) + external + nonReentrant + returns(uint256) + { + uint256 wethBalanceBefore = IERC20(addresses.weth).balanceOf(address(this)); + uint256 setBalanceBefore = _setToken.balanceOf(msg.sender); + _initiateRedemption( + _setToken, + _maxSetAmount, + DEXAdapter.ETH_ADDRESS, + _outputTokenAmount, + _swapDataCollateralForDebt, + _swapDataCollateralForOutputToken + ); + + _issueSetFromExcessOutput( + _setToken, + _maxSetAmount, + DEXAdapter.ETH_ADDRESS, + _outputTokenAmount, + _swapDataDebtForCollateral, + _swapDataOutputTokenForCollateral, + _priceEstimateInflator, + _maxDust, + wethBalanceBefore + ); + uint256 wethObtained = IERC20(addresses.weth).balanceOf(address(this)).sub(wethBalanceBefore); + require(wethObtained >= _outputTokenAmount, "FlashMintLeveragedExtended: insufficient wethObtained"); + require(wethObtained - _outputTokenAmount <= maxGasRebate, "FlashMintLeveragedExtended: maxGasRebate exceeded"); + IWETH(addresses.weth).withdraw(wethObtained); + (payable(msg.sender)).sendValue(wethObtained); + return setBalanceBefore.sub(_setToken.balanceOf(msg.sender)); + } + + + /** + * Trigger redemption of set token to pay the user with Eth + * + * @param _setToken Set token to redeem + * @param _setAmount Amount to redeem + * @param _minAmountOutputToken Minimum amount of ETH to send to the user + * @param _swapDataCollateralForDebt Data (token path and fee levels) describing the swap from Collateral Token to Debt Token + * @param _swapDataOutputToken Data (token path and fee levels) describing the swap from Collateral Token to Eth + */ + function redeemExactSetForETH( + ISetToken _setToken, + uint256 _setAmount, + uint256 _minAmountOutputToken, + DEXAdapter.SwapData memory _swapDataCollateralForDebt, + DEXAdapter.SwapData memory _swapDataOutputToken + ) + external + override + nonReentrant + { + uint256 wethBalanceBefore = IWETH(addresses.weth).balanceOf(address(this)); + _initiateRedemption( + _setToken, + _setAmount, + DEXAdapter.ETH_ADDRESS, + _minAmountOutputToken, + _swapDataCollateralForDebt, + _swapDataOutputToken + ); + uint256 amountToReturn = IWETH(addresses.weth).balanceOf(address(this)).sub(wethBalanceBefore); + IWETH(addresses.weth).withdraw(amountToReturn); + (payable(msg.sender)).sendValue(amountToReturn); + } + + /** + * Trigger redemption of set token to pay the user with an arbitrary ERC20 + * + * @param _setToken Set token to redeem + * @param _setAmount Amount to redeem + * @param _outputToken Address of the ERC20 token to send to the user + * @param _minAmountOutputToken Minimum amount of output token to send to the user + * @param _swapDataCollateralForDebt Data (token path and fee levels) describing the swap from Collateral Token to Debt Token + * @param _swapDataOutputToken Data (token path and fee levels) describing the swap from Collateral Token to Output token + */ + function redeemExactSetForERC20( + ISetToken _setToken, + uint256 _setAmount, + address _outputToken, + uint256 _minAmountOutputToken, + DEXAdapter.SwapData memory _swapDataCollateralForDebt, + DEXAdapter.SwapData memory _swapDataOutputToken + ) + external + override + nonReentrant + { + uint256 outputTokenBalanceBefore = IERC20(_outputToken).balanceOf(address(this)); + _initiateRedemption( + _setToken, + _setAmount, + _outputToken, + _minAmountOutputToken, + _swapDataCollateralForDebt, + _swapDataOutputToken + ); + uint256 outputTokenAmount = IERC20(_outputToken).balanceOf(address(this)).sub(outputTokenBalanceBefore); + IERC20(_outputToken).transfer(msg.sender, outputTokenAmount); + } + + /** + * Trigger issuance of set token paying with any arbitrary ERC20 token + * + * @param _setToken Set token to issue + * @param _setAmount Amount to issue + * @param _inputToken Input token to pay with + * @param _maxAmountInputToken Maximum amount of input token to spend + * @param _swapDataDebtForCollateral Data (token addresses and fee levels) to describe the swap path from Debt to collateral token + * @param _swapDataInputToken Data (token addresses and fee levels) to describe the swap path from input to collateral token + */ + function issueExactSetFromERC20( + ISetToken _setToken, + uint256 _setAmount, + address _inputToken, + uint256 _maxAmountInputToken, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputToken + ) + external + override + nonReentrant + { + uint256 inputTokenBalanceBefore = IERC20(_inputToken).balanceOf(address(this)); + IERC20(_inputToken).transferFrom(msg.sender, address(this), _maxAmountInputToken); + _initiateIssuance( + _setToken, + _setAmount, + _inputToken, + _maxAmountInputToken, + _swapDataDebtForCollateral, + _swapDataInputToken + ); + uint256 amountToReturn = IERC20(_inputToken).balanceOf(address(this)).sub(inputTokenBalanceBefore); + IERC20(_inputToken).transfer(msg.sender, amountToReturn); + } + + /** + * Trigger issuance of set token paying with Eth + * + * @param _setToken Set token to issue + * @param _setAmount Amount to issue + * @param _swapDataDebtForCollateral Data (token addresses and fee levels) to describe the swap path from Debt to collateral token + * @param _swapDataInputToken Data (token addresses and fee levels) to describe the swap path from eth to collateral token + */ + function issueExactSetFromETH( + ISetToken _setToken, + uint256 _setAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputToken + ) + external + override + payable + nonReentrant + { + uint256 inputTokenBalanceBefore = IERC20(addresses.weth).balanceOf(address(this)); + IWETH(addresses.weth).deposit{value: msg.value}(); + _initiateIssuance( + _setToken, + _setAmount, + DEXAdapter.ETH_ADDRESS, + msg.value, + _swapDataDebtForCollateral, + _swapDataInputToken + ); + uint256 amountToReturn = IERC20(addresses.weth).balanceOf(address(this)).sub(inputTokenBalanceBefore); + IWETH(addresses.weth).withdraw(amountToReturn); + msg.sender.transfer(amountToReturn); + } + + /** + * Issues a variable amount of set tokens for a fixed amount of input tokenss + * + * @param _setToken Set token to redeem + * @param _minSetAmount Minimum amount of Set Tokens to issue + * @param _inputToken Address of input token for which to issue set tokens + * @param _inputTokenAmount Amount of inputToken to return to the user + * @param _swapDataDebtForCollateral Data (token path and fee levels) describing the swap from Debt Token to Collateral Token + * @param _swapDataInputTokenForCollateral Data (token path and fee levels) describing the swap from input token to Collateral Token + * @param _swapDataInputTokenForETH Data (token path and fee levels) describing the swap from unspent input token to ETH, to use as gas rebate + * @param _priceEstimateInflator Factor by which to increase the estimated price from the previous iteration to account for used up liquidity + * @param _maxDust Minimum accuracy for approximating the input token amount. Excess will be swapped to input token and returned to user as gas rebate + */ + function issueSetFromExactERC20( + ISetToken _setToken, + uint256 _minSetAmount, + address _inputToken, + uint256 _inputTokenAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputTokenForCollateral, + DEXAdapter.SwapData memory _swapDataInputTokenForETH, + uint256 _priceEstimateInflator, + uint256 _maxDust + ) + external + nonReentrant + returns(uint256) + { + uint256 setBalanceBefore = _setToken.balanceOf(msg.sender); + IERC20(_inputToken).transferFrom(msg.sender, address(this), _inputTokenAmount); + + uint256 inputAmountLeft = _issueSetFromExactInput( + _setToken, + _minSetAmount, + _inputToken, + _inputTokenAmount, + _swapDataDebtForCollateral, + _swapDataInputTokenForCollateral, + _priceEstimateInflator, + _maxDust + ); + + _swapTokenForETHAndReturnToUser(_inputToken, inputAmountLeft, _swapDataInputTokenForETH); + return _setToken.balanceOf(msg.sender).sub(setBalanceBefore); + } + + /** + * Issues a variable amount of set tokens for a fixed amount of eth + * + * @param _setToken Set token to redeem + * @param _minSetAmount Minimum amount of Set Tokens to issue + * @param _swapDataDebtForCollateral Data (token path and fee levels) describing the swap from Debt Token to Collateral Token + * @param _swapDataInputTokenForCollateral Data (token path and fee levels) describing the swap from eth to Collateral Token + * @param _priceEstimateInflator Factor by which to increase the estimated price from the previous iteration to account for used up liquidity + * @param _maxDust Minimum accuracy for approximating the eth amount. Excess will be swapped to eth and returned to user as gas rebate + */ + function issueSetFromExactETH( + ISetToken _setToken, + uint256 _minSetAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputTokenForCollateral, + uint256 _priceEstimateInflator, + uint256 _maxDust + ) + external + payable + nonReentrant + returns(uint256) + { + uint256 setBalanceBefore = _setToken.balanceOf(msg.sender); + IWETH(addresses.weth).deposit{value: msg.value}(); + uint256 inputTokenLeft = _issueSetFromExactInput( + _setToken, + _minSetAmount, + DEXAdapter.ETH_ADDRESS, + msg.value, + _swapDataDebtForCollateral, + _swapDataInputTokenForCollateral, + _priceEstimateInflator, + _maxDust + ); + IWETH(addresses.weth).withdraw(inputTokenLeft); + msg.sender.transfer(inputTokenLeft); + return _setToken.balanceOf(msg.sender).sub(setBalanceBefore); + } + + /** + * Update maximum number of iterations allowed in the fixed input issuance / fixed output redemption + * + * @param _maxIterations New value to set for maximum number of iterations. If "maxDust" is not met by that iteration the respective transaction will fail + */ + function setMaxIterations(uint256 _maxIterations) external onlyOwner { + maxIterations = _maxIterations; + } + + /** + * Update maximum value of gas rebate returned to user in fixed input issuance / fixed output redemption + * + * @param _maxGasRebate New value to set for max gas rebate. Gas rebate above this value is assumed to be a misconfiguration and the respective transaction will fail + */ + function setMaxGasRebate(uint256 _maxGasRebate) external onlyOwner { + maxGasRebate = _maxGasRebate; + } + + /* ============ Internal Functions ============ */ + + // @dev Use excess amout of output token to re-issue set tokens + function _issueSetFromExcessOutput( + ISetToken _setToken, + uint256 _maxSetAmount, + address _outputToken, + uint256 _outputTokenAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputToken, + uint256 _priceEstimateInflator, + uint256 _maxDust, + uint256 _outputTokenBalanceBefore + ) + internal + { + uint256 obtainedOutputAmount; + if( _outputToken == DEXAdapter.ETH_ADDRESS) { + obtainedOutputAmount = IERC20(addresses.weth).balanceOf(address(this)).sub(_outputTokenBalanceBefore); + } else { + obtainedOutputAmount = IERC20(_outputToken).balanceOf(address(this)).sub(_outputTokenBalanceBefore); + } + + uint256 excessOutputTokenAmount = obtainedOutputAmount.sub(_outputTokenAmount); + uint256 priceEstimate = _maxSetAmount.mul(_priceEstimateInflator).div(obtainedOutputAmount); + uint256 minSetAmount = excessOutputTokenAmount.mul(priceEstimate).div(1 ether); + _issueSetFromExactInput( + _setToken, + minSetAmount, + _outputToken, + excessOutputTokenAmount, + _swapDataDebtForCollateral, + _swapDataInputToken, + _priceEstimateInflator, + _maxDust + ); + } + + + + + // @dev Send requested amount of Output tokens to user, sell excess for eth and send to user as gas rebate + function _sendOutputTokenAndETHToUser( + address _outputToken, + uint256 _outputTokenBalanceBefore, + uint256 _outputTokenAmount, + DEXAdapter.SwapData memory _swapDataOutputTokenForETH + ) + internal + { + uint256 outputTokenObtained = IERC20(_outputToken).balanceOf(address(this)).sub(_outputTokenBalanceBefore); + require(outputTokenObtained >= _outputTokenAmount, "FlashMintLeveragedExtended: insufficient outputTokenObtained"); + IERC20(_outputToken).transfer(msg.sender, _outputTokenAmount); + _swapTokenForETHAndReturnToUser(_outputToken, outputTokenObtained - _outputTokenAmount, _swapDataOutputTokenForETH); + } + + + // @dev Issue Set Tokens for (approximately) the requested amount of input tokens. Works by first issuing minimum requested amount of set tokens and then iteratively using observed exchange rate on previous issuance to spend the remaining input tokens until the difference is les than the specivied _maxDust + function _issueSetFromExactInput( + ISetToken _setToken, + uint256 _minSetAmount, + address _inputToken, + uint256 _inputTokenAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputToken, + uint256 _priceEstimateInflator, + uint256 _maxDust + ) + internal + returns(uint256) + { + require(_inputTokenAmount > _maxDust, "FlashMintLeveragedExtended: _inputToken must be more than _maxDust"); + + uint256 iterations = 0; + while (_inputTokenAmount > _maxDust) { + require(iterations < maxIterations, "FlashMintLeveragedExtended: exceeded Max Iterations"); + uint256 inputTokenAmountSpent = _initiateIssuanceAndReturnInputAmountSpent( + _setToken, + _minSetAmount, + _inputToken, + _inputTokenAmount, + _swapDataDebtForCollateral, + _swapDataInputToken + ); + // Update remaining inputTokens left to be spent + _inputTokenAmount = _inputTokenAmount - inputTokenAmountSpent; + // Estimate price of setToken / inputToken, multiplying by provided factor to account for used up liquidity + uint256 priceEstimate = _minSetAmount.mul(_priceEstimateInflator).div(inputTokenAmountSpent); + // Amount to issue in next iteration is equal to the left over amount of input tokens times the price estimate from the previous step + _minSetAmount = _inputTokenAmount.mul(priceEstimate).div(1 ether); + iterations++; + } + + return _inputTokenAmount; + } + + // @dev Extends original _initiateIssuance by returning the amount of input tokens that was spent in issuance. (requisite for approximation algorithm above + function _initiateIssuanceAndReturnInputAmountSpent( + ISetToken _setToken, + uint256 _minSetAmount, + address _inputToken, + uint256 _inputTokenAmount, + DEXAdapter.SwapData memory _swapDataDebtForCollateral, + DEXAdapter.SwapData memory _swapDataInputToken + ) + internal + returns (uint256) + { + uint256 inputTokenBalanceBefore; + if( _inputToken == DEXAdapter.ETH_ADDRESS) { + inputTokenBalanceBefore = IERC20(addresses.weth).balanceOf(address(this)); + } else { + inputTokenBalanceBefore = IERC20(_inputToken).balanceOf(address(this)); + } + _initiateIssuance( + _setToken, + _minSetAmount, + _inputToken, + _inputTokenAmount, + _swapDataDebtForCollateral, + _swapDataInputToken + ); + + uint256 inputTokenBalanceAfter; + if( _inputToken == DEXAdapter.ETH_ADDRESS) { + inputTokenBalanceAfter = IERC20(addresses.weth).balanceOf(address(this)); + } else { + inputTokenBalanceAfter = IERC20(_inputToken).balanceOf(address(this)); + } + + return inputTokenBalanceBefore.sub(inputTokenBalanceAfter); + } + + /** + * @dev Same as in FlashMintLeveraged but without transfering input token from the user (since this is now done once at the very beginning to avoid transfering multiple times back and forth) + */ + function _makeUpShortfallWithERC20( + address _collateralToken, + uint256 _collateralTokenShortfall, + address _originalSender, + IERC20 _inputToken, + uint256 _maxAmountInputToken, + DEXAdapter.SwapData memory _swapData + ) + internal + override + returns (uint256) + { + if(address(_inputToken) == _collateralToken){ + return _collateralTokenShortfall; + } else { + uint256 amountInputToken = _swapInputForCollateralToken( + _collateralToken, + _collateralTokenShortfall, + address(_inputToken), + _maxAmountInputToken, + _swapData + ); + return amountInputToken; + } + } + + /** + * @dev Same as in FlashMintLeveraged but without transfering eth from the user (since this is now done once at the very beginning to avoid transfering multiple times back and forth) + */ + function _makeUpShortfallWithETH( + address _collateralToken, + uint256 _collateralTokenShortfall, + address _originalSender, + uint256 _maxAmountEth, + DEXAdapter.SwapData memory _swapData + + ) + internal + override + returns(uint256) + { + + uint256 amountEth = _swapInputForCollateralToken( + _collateralToken, + _collateralTokenShortfall, + addresses.weth, + _maxAmountEth, + _swapData + ); + + return amountEth; + } + + /** + * @dev Same as in FlashMintLeveraged but without transfering output tokens to the user (since this is now done once at the very end to avoid transfering multiple times back and forth) + */ + function _liquidateCollateralTokensForERC20( + address _collateralToken, + uint256 _collateralRemaining, + address _originalSender, + IERC20 _outputToken, + uint256 _minAmountOutputToken, + DEXAdapter.SwapData memory _swapData + ) + internal + override + returns (uint256) + { + if(address(_outputToken) == _collateralToken){ + return _collateralRemaining; + } + uint256 outputTokenAmount = _swapCollateralForOutputToken( + _collateralToken, + _collateralRemaining, + address(_outputToken), + _minAmountOutputToken, + _swapData + ); + return outputTokenAmount; + } + + /** + * @dev Same as in FlashMintLeveraged but without transfering eth to the user (since this is now done once at the very end to avoid transfering multiple times back and forth) + */ + function _liquidateCollateralTokensForETH( + address _collateralToken, + uint256 _collateralRemaining, + address _originalSender, + uint256 _minAmountOutputToken, + DEXAdapter.SwapData memory _swapData + ) + internal + override + isValidPath(_swapData.path, _collateralToken, addresses.weth) + returns(uint256) + { + uint256 ethAmount = _swapCollateralForOutputToken( + _collateralToken, + _collateralRemaining, + addresses.weth, + _minAmountOutputToken, + _swapData + ); + return ethAmount; + } + + + /** + * @dev Used to swap excess input / output tokens for eth and return to user as gas rebate + */ + function _swapTokenForETHAndReturnToUser( + address _inputToken, + uint256 _inputAmount, + DEXAdapter.SwapData memory _swapData + ) + internal + { + uint256 ethObtained; + if(_inputToken == addresses.weth) { + ethObtained = _inputAmount; + } else { + // Setting path to empty array means opting out of the gas rebate swap + if(_swapData.path.length == 0) { + return; + } + require(_swapData.path[0] == _inputToken, "FlashMintLeveragedExtended: InputToken not first in path"); + require(_swapData.path[_swapData.path.length - 1] == addresses.weth, "FlashMintLeveragedExtended: WETH not last in path"); + ethObtained = addresses.swapExactTokensForTokens( + _inputAmount, + 0, + _swapData + ); + } + require(ethObtained <= maxGasRebate, "FlashMintLeveragedExtended: maxGasRebate exceeded"); + + IWETH(addresses.weth).withdraw(ethObtained); + msg.sender.transfer(ethObtained); + } +} + diff --git a/hardhat.config.ts b/hardhat.config.ts index 936aefb4..36f1e456 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -52,6 +52,7 @@ const config: HardhatUserConfig = { networks: { hardhat: { forking: process.env.FORK ? forkingConfig : undefined, + allowUnlimitedContractSize: true, accounts: getHardhatPrivateKeys(), // @ts-ignore timeout: INTEGRATIONTEST_TIMEOUT, diff --git a/package.json b/package.json index 2eb4a4e2..04551b37 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,11 @@ "build:npm": "yarn compile:npm && yarn build:typechain", "build:typechain": "yarn patch-hardhat-typechain && yarn typechain && yarn fix-typechain && yarn transpile-dist", "chain": "npx hardhat node --no-deploy", - "chain:fork:ethereum": "FORK=true yarn run chain", - "chain:fork:polygon": "FORK=true NETWORK=polygon yarn run chain", - "chain:fork:optimism": "FORK=true NETWORK=optimism yarn run chain", + "chain:fork": "FORK=true yarn run chain", + "chain:fork:ethereum": "yarn run chain", + "chain:fork:polygon": "NETWORK=polygon yarn run chain:fork", + "chain:fork:optimism": "NETWORK=optimism yarn run chain:fork", + "chain:fork:arbitrum": "NETWORK=arbitrum yarn run chain:fork", "clean": "rm -rf coverage.json .coverage_cache .coverage_contracts cache coverage typechain artifacts dist", "clean-dev-deployment": "rm -rf deployments/50-development.json", "compile": "npx hardhat compile", @@ -46,6 +48,7 @@ "test:integration:polygon": "find test/integration/polygon -type f -name '*.spec.ts' | xargs yarn run test:integration", "test:integration:optimism": "find test/integration/optimism -type f -name '*.spec.ts' | xargs yarn run test:integration", "test:integration:ethereum": "find test/integration/ethereum -type f -name '*.spec.ts' | xargs yarn run test:integration", + "test:integration:arbitrum": "find test/integration/arbitrum -type f -name '*.spec.ts' | xargs yarn run test:integration", "test:clean": "yarn clean && yarn build && yarn test", "transpile": "tsc", "transpile-dist": "tsc -p tsconfig.dist.json", @@ -77,7 +80,7 @@ "dotenv": "^8.2.0", "ethereum-waffle": "^3.2.1", "globby": "^11.0.2", - "hardhat": "2.9.1", + "hardhat": "2.22.3", "hardhat-contract-sizer": "^2.5.1", "hardhat-deploy": "^0.7.0-beta.39", "hardhat-typechain": "^0.3.4", @@ -87,12 +90,12 @@ "semantic-release": "^19.0.2", "solc": "^0.6.10", "solhint": "^3.1.0", - "solidity-coverage": "^0.7.13", + "solidity-coverage": "^0.8.0", "ts-generator": "^0.1.1", "ts-node": "^8.10.1", "tslint": "^6.1.3", "tslint-eslint-rules": "^5.4.0", - "typescript": "^3.9.3" + "typescript": "5.4.2" }, "dependencies": { "@chainlink/contracts": "^0.3.1", diff --git a/test/integration/arbitrum/addresses.ts b/test/integration/arbitrum/addresses.ts new file mode 100644 index 00000000..94e92cbc --- /dev/null +++ b/test/integration/arbitrum/addresses.ts @@ -0,0 +1,73 @@ + +export const PRODUCTION_ADDRESSES = { + tokens: { + weth: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + aWETH: "0xe50fA9b3c56FfB159cB0FCA61F5c9D750e8128c8", + ETH2X: "0x67d2373f0321Cd24a1b58e3c81fC1b6Ef15B205C", + ETH3X: "0x0bef95Cc308027C9a754D7674DE0844AE1dcD5b1", + iETH1X: "0xaa61DDA963d0Cf89dA3C13FE635C84a1B8B6B988", + BTC2X: "0xfa69F1e2e48B411b98a105fb693fb381764Dc857", + BTC3X: "0x53765a7cF4933bc939e32fA560FFf3D8E1d63473", + iBTC1X: "0xCaD2B03e289260cCF59209CF059778342d1Cf33b", + USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + aUSDC: "0x724dc807b04555b71ed48a6896b6F41593b8C637", + wbtc: "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f", + aWBTC: "0x078f358208685046a11C85e8ad32895DED33A249", + }, + whales: { + wbtc: "0x7bcefd1bc97a1af01c5ede3a3199aa11a77b6b45", + aWBTC: "0x8Af700bA841f30e0a3Fcb0EE4C4A9D223E1eFA05", + weth: "0xc3e5607cd4ca0d5fe51e09b60ed97a0ae6f874dd", + aWETH: "0xb7fb2b774eb5e2dad9c060fb367acbdc7fa7099b", + USDC: "0xB38e8c17e38363aF6EbdCb3dAE12e0243582891D", + aUSDC: "0xa0894a415c4f246ce95bae718849579c099cc1d2", + }, + dexes: { + uniV3: { + router: "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", // SwapRouter02 + quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e", // QuoterV2 + }, + sushiswap: { + router: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", + }, + curve: { + addressProvider: "0x0000000022D53366457F9d5E68Ec105046FC4383", + }, + balancerv2: { + vault: "0xBA12222222228d8Ba445958a75a0704d566BF2C8", + }, + }, + setFork: { + controller: "0xCd79A0B9aeca0eCE7eA59d14338ea330cb1cb2d7", + debtIssuanceModuleV2: "0x120d2f26B7ffd35a8917415A5766Fa63B2af94aa", + aaveV3LeverageModule: "0x6D1b74e18064172D028C5EE7Af5D0ccC26f2A4Ae", + extensions: { + ETH2X: { + aaveV3LeverageStrategyExtension: "0x6Ab1a997df5637810F5CEb0CC25a28ADDCD75A82", + }, + ETH3X: { + aaveV3LeverageStrategyExtension: "0x991fAA73e64435EAC3697AE9DEE4E6e7B85fda59", + }, + iETH1X: { + aaveV3LeverageStrategyExtension: "0x5d5f7b965833470A65817558C167420E6c09286e", + }, + BTC2X: { + aaveV3LeverageStrategyExtension: "0x3E6aDeC44f5271508E6A119bd4a3fecfdB87A012", + }, + BTC3X: { + aaveV3LeverageStrategyExtension: "0xeB3826bFc2fA9baf56EA3EA9771EcBfe5B0CD606", + }, + iBTC1X: { + aaveV3LeverageStrategyExtension: "0x86a71F1f8f3b140B7B2c867857d3624edDfeF5dD", + }, + }, + }, + lending: { + aaveV3: { + addressProvider: "0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb", + lendingPool: "0x794a61358D6845594F94dc1DB02A252b5b4814aD", + }, + }, +}; + +export default PRODUCTION_ADDRESSES; diff --git a/test/integration/arbitrum/flashMintLeveragedExtended.spec.ts b/test/integration/arbitrum/flashMintLeveragedExtended.spec.ts new file mode 100644 index 00000000..d0a99fea --- /dev/null +++ b/test/integration/arbitrum/flashMintLeveragedExtended.spec.ts @@ -0,0 +1,714 @@ +import "module-alias/register"; +import { Account, Address } from "@utils/types"; +import DeployHelper from "@utils/deploys"; +import { getAccounts, getWaffleExpect, preciseMul } from "@utils/index"; +import { impersonateAccount, setBlockNumber, setBalance } from "@utils/test/testingUtils"; +import { ethers } from "hardhat"; +import { BigNumber, utils } from "ethers"; +import { FlashMintLeveragedExtended } from "../../../typechain"; +import { + IWETH, + StandardTokenMock, + IDebtIssuanceModule, + IERC20__factory, + IERC20, +} from "../../../typechain"; +import { PRODUCTION_ADDRESSES } from "./addresses"; +import { ADDRESS_ZERO, MAX_UINT_256 } from "@utils/constants"; +import { ether } from "@utils/index"; + +const expect = getWaffleExpect(); + +enum Exchange { + None, + Sushiswap, + Quickswap, + UniV3, + Curve, +} + +type SwapData = { + path: Address[]; + fees: number[]; + pool: Address; + exchange: Exchange; +}; + +if (process.env.INTEGRATIONTEST) { + describe.only("FlashMintLeveragedExtended - Integration Test", async () => { + const addresses = PRODUCTION_ADDRESSES; + let owner: Account; + let deployer: DeployHelper; + let setToken: StandardTokenMock; + let weth: IWETH; + let usdc: IERC20; + + setBlockNumber(201830000); + + before(async () => { + [owner] = await getAccounts(); + deployer = new DeployHelper(owner.wallet); + + setToken = (await ethers.getContractAt( + "StandardTokenMock", + addresses.tokens.ETH2X, + )) as StandardTokenMock; + + weth = (await ethers.getContractAt("IWETH", addresses.tokens.weth)) as IWETH; + + usdc = IERC20__factory.connect(addresses.tokens.USDC, owner.wallet); + }); + + context("When exchange issuance is deployed", () => { + let flashMintLeveraged: FlashMintLeveragedExtended; + before(async () => { + flashMintLeveraged = await deployer.extensions.deployFlashMintLeveragedExtended( + addresses.tokens.weth, + ADDRESS_ZERO, + addresses.dexes.sushiswap.router, + addresses.dexes.uniV3.router, + addresses.dexes.uniV3.quoter, + addresses.setFork.controller, + addresses.setFork.debtIssuanceModuleV2, + addresses.setFork.aaveV3LeverageModule, + addresses.lending.aaveV3.lendingPool, + addresses.dexes.curve.addressProvider, + ADDRESS_ZERO, // TODO: Check if there is curve calculator deployed on arbi + addresses.dexes.balancerv2.vault, + ); + }); + + it("weth address is set correctly", async () => { + const returnedAddresses = await flashMintLeveraged.addresses(); + expect(returnedAddresses.weth).to.eq(utils.getAddress(addresses.tokens.weth)); + }); + + it("sushi router address is set correctly", async () => { + const returnedAddresses = await flashMintLeveraged.addresses(); + expect(returnedAddresses.sushiRouter).to.eq( + utils.getAddress(addresses.dexes.sushiswap.router), + ); + }); + + it("uniV3 router address is set correctly", async () => { + const returnedAddresses = await flashMintLeveraged.addresses(); + expect(returnedAddresses.uniV3Router).to.eq(utils.getAddress(addresses.dexes.uniV3.router)); + }); + + it("controller address is set correctly", async () => { + expect(await flashMintLeveraged.setController()).to.eq( + utils.getAddress(addresses.setFork.controller), + ); + }); + + it("debt issuance module address is set correctly", async () => { + expect(await flashMintLeveraged.debtIssuanceModule()).to.eq( + utils.getAddress(addresses.setFork.debtIssuanceModuleV2), + ); + }); + + describe("When setToken is approved", () => { + let collateralAToken: StandardTokenMock; + let debtToken: StandardTokenMock; + let collateralATokenAddress: Address; + let collateralTokenAddress: Address; + let debtTokenAddress: Address; + let aweth: IERC20; + before(async () => { + const awethWhale = addresses.whales.aWETH; + const wethWhale = addresses.whales.weth; + const operator = "0x37e6365d4f6aE378467b0e24c9065Ce5f06D70bF"; + await setBalance(operator, ether(1000)); + const whaleSigner = await impersonateAccount(awethWhale); + + const wethWhaleSigner = await impersonateAccount(wethWhale); + + aweth = IERC20__factory.connect(addresses.tokens.aWETH, whaleSigner); + + const weth = IERC20__factory.connect(addresses.tokens.weth, wethWhaleSigner); + await weth.transfer(owner.address, ether(100)); + await aweth.transfer(owner.address, ether(100)); + + // This is done to avoid flaky "Invalid transfer in, results in undercollateralization" error + // See: https://github.com/IndexCoop/index-protocol/blob/1a587d93d273d9004d03f1235c395f6f7cd147dc/test/protocol/modules/v1/debtIssuanceModuleV2.spec.ts#L730 + // TODO: Review if we have to do this in production. + await aweth.transfer(setToken.address, ether(0.000001)); + + await aweth + .connect(owner.wallet) + .approve(addresses.setFork.debtIssuanceModuleV2, ether(10)); + await weth.connect(owner.wallet).approve(flashMintLeveraged.address, ether(100)); + const debtIssuanceModule = (await ethers.getContractAt( + "IDebtIssuanceModule", + addresses.setFork.debtIssuanceModuleV2, + owner.wallet, + )) as IDebtIssuanceModule; + + const issueTx = await debtIssuanceModule.issue( + setToken.address, + ether(10), + owner.address, + ); + + await issueTx.wait(); + + await flashMintLeveraged.approveSetToken(setToken.address); + + const leveragedTokenData = await flashMintLeveraged.getLeveragedTokenData( + setToken.address, + ether(1), + true, + ); + + collateralATokenAddress = leveragedTokenData.collateralAToken; + collateralTokenAddress = leveragedTokenData.collateralToken; + debtTokenAddress = leveragedTokenData.debtToken; + + collateralAToken = (await ethers.getContractAt( + "StandardTokenMock", + collateralATokenAddress, + )) as StandardTokenMock; + debtToken = (await ethers.getContractAt( + "StandardTokenMock", + debtTokenAddress, + )) as StandardTokenMock; + }); + + it("should adjust collateral a token allowance correctly", async () => { + expect( + await collateralAToken.allowance( + flashMintLeveraged.address, + addresses.setFork.debtIssuanceModuleV2, + ), + ).to.equal(MAX_UINT_256); + }); + it("should adjust debt token allowance correctly", async () => { + expect( + await debtToken.allowance( + flashMintLeveraged.address, + addresses.setFork.debtIssuanceModuleV2, + ), + ).to.equal(MAX_UINT_256); + }); + + ["collateralToken", "USDC", "ETH"].forEach(inputTokenName => { + describe(`When input/output token is ${inputTokenName}`, () => { + let amountIn: BigNumber; + beforeEach(async () => { + amountIn = ether(0.4); + if (inputTokenName === "USDC") { + amountIn = utils.parseUnits("2500", 6); + usdc + .connect(await impersonateAccount(addresses.whales.USDC)) + .transfer(owner.address, utils.parseUnits("10000", 6)); + } + // This is done to avoid flaky "Invalid transfer in, results in undercollateralization" error + // See: https://github.com/IndexCoop/index-protocol/blob/1a587d93d273d9004d03f1235c395f6f7cd147dc/test/protocol/modules/v1/debtIssuanceModuleV2.spec.ts#L730 + // TODO: Review if we have to do this in production. + await aweth.transfer(setToken.address, ether(0.000001)); + }); + + describe( + inputTokenName === "ETH" ? "issueExactSetFromETH" : "#issueExactSetFromERC20", + () => { + let subjectSetAmount: BigNumber; + let swapDataDebtToCollateral: SwapData; + let swapDataInputToken: SwapData; + + let inputToken: StandardTokenMock | IWETH | IERC20; + + let subjectSetToken: Address; + let subjectMaxAmountIn: BigNumber; + let subjectInputToken: Address; + + beforeEach(async () => { + subjectSetAmount = ether(1); + swapDataDebtToCollateral = { + path: [addresses.tokens.USDC, addresses.tokens.weth], + fees: [500], + pool: ADDRESS_ZERO, + exchange: Exchange.UniV3, + }; + + swapDataInputToken = { + path: [], + fees: [], + pool: ADDRESS_ZERO, + exchange: Exchange.None, + }; + + if (inputTokenName === "collateralToken") { + inputToken = weth; + } + if (inputTokenName === "USDC") { + inputToken = usdc; + swapDataInputToken = swapDataDebtToCollateral; + } + + let inputTokenBalance: BigNumber; + if (inputTokenName === "ETH") { + subjectMaxAmountIn = amountIn; + } else { + inputTokenBalance = await inputToken.balanceOf(owner.address); + subjectMaxAmountIn = inputTokenBalance; + await inputToken.approve(flashMintLeveraged.address, subjectMaxAmountIn); + subjectInputToken = inputToken.address; + } + subjectSetToken = setToken.address; + }); + + async function subject() { + if (inputTokenName === "ETH") { + return flashMintLeveraged.issueExactSetFromETH( + subjectSetToken, + subjectSetAmount, + swapDataDebtToCollateral, + swapDataInputToken, + { value: subjectMaxAmountIn }, + ); + } + return flashMintLeveraged.issueExactSetFromERC20( + subjectSetToken, + subjectSetAmount, + subjectInputToken, + subjectMaxAmountIn, + swapDataDebtToCollateral, + swapDataInputToken, + ); + } + + async function subjectQuote() { + return flashMintLeveraged.callStatic.getIssueExactSet( + subjectSetToken, + subjectSetAmount, + swapDataDebtToCollateral, + swapDataInputToken, + ); + } + + it("should issue the correct amount of tokens", async () => { + const setBalancebefore = await setToken.balanceOf(owner.address); + await subject(); + const setBalanceAfter = await setToken.balanceOf(owner.address); + const setObtained = setBalanceAfter.sub(setBalancebefore); + expect(setObtained).to.eq(subjectSetAmount); + }); + + it("should spend less than specified max amount", async () => { + const inputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + await subject(); + const inputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + const inputSpent = inputBalanceBefore.sub(inputBalanceAfter); + expect(inputSpent.gt(0)).to.be.true; + expect(inputSpent.lte(subjectMaxAmountIn)).to.be.true; + }); + + it("should quote the correct input amount", async () => { + const quotedInputAmount = await subjectQuote(); + const inputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + await subject(); + const inputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + const inputSpent = inputBalanceBefore.sub(inputBalanceAfter); + + expect(quotedInputAmount).to.gt(preciseMul(inputSpent, ether(0.99))); + expect(quotedInputAmount).to.lt(preciseMul(inputSpent, ether(1.01))); + }); + }, + ); + + describe( + inputTokenName === "ETH" ? "issueSetFromExactETH" : "#issueSetFromExactERC20", + () => { + let swapDataDebtToCollateral: SwapData; + let swapDataInputTokenToCollateral: SwapData; + let swapDataInputTokenToETH: SwapData; + + let inputToken: IERC20 | IWETH; + let subjectMinSetAmount: BigNumber; + + let subjectSetToken: Address; + let subjectAmountIn: BigNumber; + let subjectInputToken: Address; + let subjectPriceEstimateInflater: BigNumber; + let subjectMaxDust: BigNumber; + + beforeEach(async () => { + swapDataDebtToCollateral = { + path: [addresses.tokens.USDC, addresses.tokens.weth], + fees: [500], + pool: ADDRESS_ZERO, + exchange: Exchange.UniV3, + }; + + swapDataInputTokenToCollateral = { + path: [], + fees: [], + pool: ADDRESS_ZERO, + exchange: Exchange.None, + }; + + subjectPriceEstimateInflater = ether(0.9); + + if (inputTokenName === "collateralToken") { + inputToken = weth; + // await weth.deposit({ value: amountIn }); + } + if (inputTokenName === "USDC") { + inputToken = usdc; + swapDataInputTokenToCollateral = swapDataDebtToCollateral; + } + + subjectAmountIn = amountIn; + if (inputTokenName !== "ETH") { + await inputToken.approve(flashMintLeveraged.address, MAX_UINT_256); + subjectInputToken = inputToken.address; + } + subjectMaxDust = subjectAmountIn.div(1000); + subjectMinSetAmount = ether(1); + subjectSetToken = setToken.address; + swapDataInputTokenToETH = swapDataInputTokenToCollateral; // Assumes Collateral Token is WETH + }); + + async function subject() { + if (inputTokenName === "ETH") { + return flashMintLeveraged.issueSetFromExactETH( + subjectSetToken, + subjectMinSetAmount, + swapDataDebtToCollateral, + swapDataInputTokenToCollateral, + subjectPriceEstimateInflater, + subjectMaxDust, + { value: subjectAmountIn }, + ); + } + return flashMintLeveraged.issueSetFromExactERC20( + subjectSetToken, + subjectMinSetAmount, + subjectInputToken, + subjectAmountIn, + swapDataDebtToCollateral, + swapDataInputTokenToCollateral, + swapDataInputTokenToETH, + subjectPriceEstimateInflater, + subjectMaxDust, + ); + } + + it("should issue at least minSetAmount of set tokens", async () => { + const setBalancebefore = await setToken.balanceOf(owner.address); + await subject(); + const setBalanceAfter = await setToken.balanceOf(owner.address); + const setObtained = setBalanceAfter.sub(setBalancebefore); + expect(setObtained).to.gte(subjectMinSetAmount); + }); + + if (inputTokenName !== "ETH") { + it("should give gas rebaste", async () => { + const ethBalanceBefore = await owner.wallet.getBalance(); + const tx = await subject(); + const receipt = await tx.wait(); + const gasCosts = receipt.gasUsed.mul(tx.gasPrice); + const ethBalanceAfter = await owner.wallet.getBalance(); + expect(ethBalanceBefore.sub(ethBalanceAfter)).to.lt(gasCosts); + }); + } + + it("should spend exactly inputAmount", async () => { + const inputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + + const tx = await subject(); + const receipt = await tx.wait(); + const gasCosts = receipt.gasUsed.mul(tx.gasPrice); + + const inputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await inputToken.balanceOf(owner.address); + let inputSpent = inputBalanceBefore.sub(inputBalanceAfter); + expect(inputSpent).to.gt(BigNumber.from(0)); + if (inputTokenName === "ETH") { + inputSpent = inputSpent.sub(gasCosts); + expect(inputSpent).to.gte(subjectAmountIn.sub(subjectMaxDust)); + expect(inputSpent).to.lte(subjectAmountIn); + } else { + expect(inputSpent).to.eq(subjectAmountIn); + } + }); + }, + ); + describe( + inputTokenName === "ETH" ? "redeemSetForExactETH" : "#redeemSetForExactERC20", + () => { + let swapDataCollateralToDebt: SwapData; + let swapDataOutputToken: SwapData; + let swapDataDebtToCollateral: SwapData; + let swapDataInputToken: SwapData; + let swapDataOutputTokenToETH: SwapData; + + let outputToken: IERC20 | IWETH; + + let subjectSetToken: Address; + let subjectMaxSetAmount: BigNumber; + let subjectAmountOut: BigNumber; + let subjectOutputToken: Address; + let subjectPriceEstimateInflater: BigNumber; + let subjectMaxDust: BigNumber; + + async function subject() { + if (inputTokenName === "ETH") { + return flashMintLeveraged.redeemSetForExactETH( + subjectSetToken, + subjectMaxSetAmount, + subjectAmountOut, + swapDataCollateralToDebt, + swapDataOutputToken, + swapDataDebtToCollateral, + swapDataInputToken, + subjectPriceEstimateInflater, + subjectMaxDust, + ); + } + return flashMintLeveraged.redeemSetForExactERC20( + subjectSetToken, + subjectMaxSetAmount, + subjectOutputToken, + subjectAmountOut, + swapDataCollateralToDebt, + swapDataOutputToken, + swapDataDebtToCollateral, + swapDataInputToken, + swapDataOutputTokenToETH, + subjectPriceEstimateInflater, + subjectMaxDust, + ); + } + + beforeEach(async () => { + subjectPriceEstimateInflater = ether(0.9); + subjectMaxSetAmount = ether(1); + subjectAmountOut = + inputTokenName === "USDC" ? utils.parseUnits("800", 6) : ether(0.25); + subjectMaxDust = subjectAmountOut.div(1000); + swapDataCollateralToDebt = { + path: [collateralTokenAddress, addresses.tokens.USDC], + fees: [500], + pool: ADDRESS_ZERO, + exchange: Exchange.UniV3, + }; + swapDataDebtToCollateral = { + path: [addresses.tokens.USDC, collateralTokenAddress], + fees: [500], + pool: ADDRESS_ZERO, + exchange: Exchange.UniV3, + }; + + swapDataOutputToken = { + path: [], + fees: [], + pool: ADDRESS_ZERO, + exchange: Exchange.None, + }; + swapDataInputToken = { + path: [], + fees: [], + pool: ADDRESS_ZERO, + exchange: Exchange.None, + }; + + if (inputTokenName === "collateralToken") { + outputToken = weth; + } + if (inputTokenName === "USDC") { + outputToken = usdc; + swapDataOutputToken = swapDataCollateralToDebt; + swapDataInputToken = swapDataDebtToCollateral; + } + + swapDataOutputTokenToETH = swapDataInputToken; // Assumes Collateral Token is WETH + + subjectSetToken = setToken.address; + await setToken.approve(flashMintLeveraged.address, subjectMaxSetAmount); + + if (inputTokenName !== "ETH") { + subjectOutputToken = outputToken.address; + } + }); + + it("should redeem at most subjectMaxSetAmount", async () => { + const setBalanceBefore = await setToken.balanceOf(owner.address); + await subject(); + const setBalanceAfter = await setToken.balanceOf(owner.address); + const setRedeemed = setBalanceBefore.sub(setBalanceAfter); + expect(setRedeemed).to.lte(subjectMaxSetAmount); + }); + + if (inputTokenName !== "ETH") { + it("should give gas rebaste", async () => { + const ethBalanceBefore = await owner.wallet.getBalance(); + const tx = await subject(); + const receipt = await tx.wait(); + const gasCosts = receipt.gasUsed.mul(tx.gasPrice); + const ethBalanceAfter = await owner.wallet.getBalance(); + expect(ethBalanceBefore.sub(ethBalanceAfter)).to.lt(gasCosts); + }); + } + + it("should return exactly specified of output tokens", async () => { + const outputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + const tx = await subject(); + const receipt = await tx.wait(); + const gasCosts = receipt.gasUsed.mul(tx.gasPrice); + const outputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + let outputObtained = outputBalanceAfter.sub(outputBalanceBefore); + if (inputTokenName === "ETH") { + outputObtained = outputObtained.add(gasCosts); + expect(outputObtained).to.gte(subjectAmountOut); + expect(outputObtained).to.lte(subjectAmountOut.add(subjectMaxDust)); + } else { + expect(outputObtained).to.eq(subjectAmountOut); + } + }); + }, + ); + describe( + inputTokenName === "ETH" ? "redeemExactSetForETH" : "#redeemExactSetForERC20", + () => { + let swapDataCollateralToDebt: SwapData; + let swapDataOutputToken: SwapData; + + let outputToken: IERC20 | IWETH; + + let subjectSetToken: Address; + let subjectSetAmount: BigNumber; + let subjectMinAmountOut: BigNumber; + let subjectOutputToken: Address; + + async function subject() { + if (inputTokenName === "ETH") { + return flashMintLeveraged.redeemExactSetForETH( + subjectSetToken, + subjectSetAmount, + subjectMinAmountOut, + swapDataCollateralToDebt, + swapDataOutputToken, + ); + } + return flashMintLeveraged.redeemExactSetForERC20( + subjectSetToken, + subjectSetAmount, + subjectOutputToken, + subjectMinAmountOut, + swapDataCollateralToDebt, + swapDataOutputToken, + ); + } + + async function subjectQuote(): Promise { + return flashMintLeveraged.callStatic.getRedeemExactSet( + subjectSetToken, + subjectSetAmount, + swapDataCollateralToDebt, + swapDataOutputToken, + ); + } + + beforeEach(async () => { + subjectSetAmount = ether(1); + swapDataCollateralToDebt = { + path: [collateralTokenAddress, addresses.tokens.USDC], + fees: [500], + pool: ADDRESS_ZERO, + exchange: Exchange.UniV3, + }; + swapDataOutputToken = { + path: [], + fees: [], + pool: ADDRESS_ZERO, + exchange: Exchange.None, + }; + + if (inputTokenName === "collateralToken") { + outputToken = weth; + } + if (inputTokenName === "USDC") { + outputToken = usdc; + swapDataOutputToken = swapDataCollateralToDebt; + } + + subjectMinAmountOut = + inputTokenName === "USDC" ? utils.parseUnits("800", 6) : ether(0.25); + subjectSetToken = setToken.address; + await setToken.approve(flashMintLeveraged.address, subjectSetAmount); + + if (inputTokenName !== "ETH") { + subjectOutputToken = outputToken.address; + } + }); + + it("should redeem the correct amount of tokens", async () => { + const setBalanceBefore = await setToken.balanceOf(owner.address); + await subject(); + const setBalanceAfter = await setToken.balanceOf(owner.address); + const setRedeemed = setBalanceBefore.sub(setBalanceAfter); + expect(setRedeemed).to.eq(subjectSetAmount); + }); + + it("should return at least the specified minimum of output tokens", async () => { + const outputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + await subject(); + const outputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + const outputObtained = outputBalanceAfter.sub(outputBalanceBefore); + expect(outputObtained.gte(subjectMinAmountOut)).to.be.true; + }); + + it("should quote the correct output amount", async () => { + const outputBalanceBefore = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + await subject(); + const outputBalanceAfter = + inputTokenName === "ETH" + ? await owner.wallet.getBalance() + : await outputToken.balanceOf(owner.address); + const outputObtained = outputBalanceAfter.sub(outputBalanceBefore); + + const outputAmountQuote = await subjectQuote(); + expect(outputAmountQuote).to.gt(preciseMul(outputObtained, ether(0.99))); + expect(outputAmountQuote).to.lt(preciseMul(outputObtained, ether(1.01))); + }); + }, + ); + }); + }); + }); + }); + }); +} diff --git a/test/integration/ethereum/flashMintLeveraged.spec.ts b/test/integration/ethereum/flashMintLeveraged.spec.ts index 56d15ce6..c1e9ada1 100644 --- a/test/integration/ethereum/flashMintLeveraged.spec.ts +++ b/test/integration/ethereum/flashMintLeveraged.spec.ts @@ -3,6 +3,7 @@ import { Account, Address } from "@utils/types"; import DeployHelper from "@utils/deploys"; import { getAccounts, getWaffleExpect, preciseMul } from "@utils/index"; import { setBlockNumber } from "@utils/test/testingUtils"; +import { cacheBeforeEach } from "@utils/test"; import { ethers } from "hardhat"; import { BigNumber, utils } from "ethers"; import { FlashMintLeveraged } from "@utils/contracts/index"; @@ -212,7 +213,7 @@ if (process.env.INTEGRATIONTEST) { describe(`When input/output token is ${inputTokenName}`, () => { let subjectSetAmount: BigNumber; let amountIn: BigNumber; - beforeEach(async () => { + cacheBeforeEach(async () => { amountIn = ether(2); subjectSetAmount = ether(1); }); diff --git a/test/integration/ethereum/optimisticAuctionRebalanceExtenisonV1.spec.ts b/test/integration/ethereum/optimisticAuctionRebalanceExtenisonV1.spec.ts index 53b2e2ae..f444e8b4 100644 --- a/test/integration/ethereum/optimisticAuctionRebalanceExtenisonV1.spec.ts +++ b/test/integration/ethereum/optimisticAuctionRebalanceExtenisonV1.spec.ts @@ -41,7 +41,7 @@ import { ethers } from "hardhat"; const expect = getWaffleExpect(); if (process.env.INTEGRATIONTEST) { - describe("OptimisticAuctionRebalanceExtensionV1 - Integration Test dsEth", () => { + describe.only("OptimisticAuctionRebalanceExtensionV1 - Integration Test dsEth", () => { const contractAddresses = PRODUCTION_ADDRESSES; const rules = "Rules stored on ipfs under hash: Qmc5gCcjYypU7y28oCALwfSvxCBskLuPKWpK4qpterKC7z"; diff --git a/tslint.json b/tslint.json index 019b3659..42e73e42 100644 --- a/tslint.json +++ b/tslint.json @@ -71,7 +71,7 @@ ], "max-line-length": [ true, - 150 + 350 ], "ter-no-mixed-spaces-and-tabs": [ true, diff --git a/utils/config.ts b/utils/config.ts index fbbc2021..dcb392a1 100644 --- a/utils/config.ts +++ b/utils/config.ts @@ -8,6 +8,11 @@ export const optimismForkingConfig = { blockNumber: 15275100, }; +export const arbitrumForkingConfig = { + url: process.env.ARBITRUM_RPC_URL ?? "", + blockNumber: 201830000, +}; + export const mainnetForkingConfig = { url: "https://eth-mainnet.alchemyapi.io/v2/" + process.env.ALCHEMY_TOKEN, blockNumber: process.env.LATESTBLOCK ? undefined : 17895372, @@ -18,5 +23,7 @@ export const forkingConfig = ? polygonForkingConfig : process.env.NETWORK === "optimism" ? optimismForkingConfig + : process.env.NETWORK === "arbitrum" + ? arbitrumForkingConfig : mainnetForkingConfig; diff --git a/utils/deploys/deployExtensions.ts b/utils/deploys/deployExtensions.ts index d66bfd91..35785542 100644 --- a/utils/deploys/deployExtensions.ts +++ b/utils/deploys/deployExtensions.ts @@ -35,6 +35,7 @@ import { AaveLeverageStrategyExtension__factory } from "../../typechain/factorie import { AaveV3LeverageStrategyExtension, AaveV3LeverageStrategyExtension__factory, + FlashMintLeveragedExtended__factory, } from "../../typechain"; import { AirdropExtension__factory } from "../../typechain/factories/AirdropExtension__factory"; import { AuctionRebalanceExtension__factory } from "../../typechain/factories/AuctionRebalanceExtension__factory"; @@ -222,6 +223,50 @@ export default class DeployExtensions { ); } + public async deployFlashMintLeveragedExtended( + wethAddress: Address, + quickRouterAddress: Address, + sushiRouterAddress: Address, + uniV3RouterAddress: Address, + uniswapV3QuoterAddress: Address, + setControllerAddress: Address, + basicIssuanceModuleAddress: Address, + aaveLeveragedModuleAddress: Address, + aaveAddressProviderAddress: Address, + curveCalculatorAddress: Address, + curveAddressProviderAddress: Address, + BalancerV2VaultAddress: Address, + ) { + const dexAdapter = await this.deployDEXAdapter(); + + const linkId = convertLibraryNameToLinkId( + "contracts/exchangeIssuance/DEXAdapter.sol:DEXAdapter", + ); + + return await new FlashMintLeveragedExtended__factory( + // @ts-ignore + { + [linkId]: dexAdapter.address, + }, + // @ts-ignore + this._deployerSigner, + ).deploy( + { + quickRouter: quickRouterAddress, + sushiRouter: sushiRouterAddress, + uniV3Router: uniV3RouterAddress, + uniV3Quoter: uniswapV3QuoterAddress, + curveAddressProvider: curveAddressProviderAddress, + curveCalculator: curveCalculatorAddress, + weth: wethAddress, + }, + setControllerAddress, + basicIssuanceModuleAddress, + aaveLeveragedModuleAddress, + aaveAddressProviderAddress, + BalancerV2VaultAddress, + ); + } public async deployFlashMintLeveraged( wethAddress: Address, quickRouterAddress: Address, @@ -465,7 +510,7 @@ export default class DeployExtensions { nonfungiblePositionManager: Address, addressProvider: Address, morpho: Address, - balancer: Address + balancer: Address, ): Promise { return await new MigrationExtension__factory(this._deployerSigner).deploy( manager, diff --git a/utils/test/testingUtils.ts b/utils/test/testingUtils.ts index 4f7ed637..c1a16bab 100644 --- a/utils/test/testingUtils.ts +++ b/utils/test/testingUtils.ts @@ -115,6 +115,10 @@ export async function impersonateAccount(address: string): Promise { return await ethers.provider.getSigner(address); } +export const setBalance = async (account: string, balance: BigNumber): Promise => { + await provider.send("hardhat_setBalance", [account, balance.toHexString().replace("0x0", "0x")]); +}; + export function setBlockNumber(blockNumber: number, reset: boolean = true) { before(async () => { await network.provider.request({ diff --git a/yarn.lock b/yarn.lock index a8c63d23..ea0beec6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,74 +94,19 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.1.tgz#50574d3e993ae247dcfe2abbdb91d2a4a22accb9" - integrity sha512-o5d/zpGl4SdVfdTfrsq9ZgYMXddc0ucKMiFW5OphBCX+ep4xzYnSjboFcZXT2V/tcSBr84VrKWWp21CGVb3DGw== - dependencies: - "@ethereumjs/common" "^2.6.1" - "@ethereumjs/tx" "^3.5.0" - ethereumjs-util "^7.1.4" - merkle-patricia-tree "^4.2.3" - -"@ethereumjs/blockchain@^5.5.0", "@ethereumjs/blockchain@^5.5.1": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz#60f1f50592c06cc47e1704800b88b7d32f609742" - integrity sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA== - dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/ethash" "^1.1.0" - debug "^2.2.0" - ethereumjs-util "^7.1.3" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.1", "@ethereumjs/common@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df" - integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" - -"@ethereumjs/ethash@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" - integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== - dependencies: - "@ethereumjs/block" "^3.5.0" - "@types/levelup" "^4.3.0" - buffer-xor "^2.0.1" - ethereumjs-util "^7.1.1" - miller-rabin "^4.0.0" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.0.tgz#783b0aeb08518b9991b23f5155763bbaf930a037" - integrity sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw== +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== dependencies: - "@ethereumjs/common" "^2.6.1" - ethereumjs-util "^7.1.4" - -"@ethereumjs/vm@^5.6.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.7.1.tgz#3bf757fbad0081838ccb4f22003cd73319ab3616" - integrity sha512-NiFm5FMaeDGZ9ojBL+Y9Y/xhW6S4Fgez+zPBM402T5kLsfeAR9mrRVckYhvkGVJ6FMwsY820CLjYP5OVwMjLTg== - dependencies: - "@ethereumjs/block" "^3.6.1" - "@ethereumjs/blockchain" "^5.5.1" - "@ethereumjs/common" "^2.6.2" - "@ethereumjs/tx" "^3.5.0" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.4" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.3" - rustbn.js "~0.2.0" + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" @@ -193,6 +138,21 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@ethersproject/abi@^5.0.9": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/abi@^5.1.2": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3" @@ -234,6 +194,19 @@ "@ethersproject/transactions" "^5.6.0" "@ethersproject/web" "^5.6.0" +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + "@ethersproject/abstract-signer@5.0.9", "@ethersproject/abstract-signer@^5.0.2", "@ethersproject/abstract-signer@^5.0.4", "@ethersproject/abstract-signer@^5.0.6": version "5.0.9" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.9.tgz#238ddc06031aeb9dfceee2add965292d7dd1acbf" @@ -256,6 +229,17 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/properties" "^5.6.0" +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/address@5.0.8", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.5": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.8.tgz#0c551659144a5a7643c6bea337149d410825298f" @@ -278,6 +262,17 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.0" +"@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/base64@5.0.6", "@ethersproject/base64@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.6.tgz#26311ebf29ea3d0b9c300ccf3e1fdc44b7481516" @@ -292,6 +287,13 @@ dependencies: "@ethersproject/bytes" "^5.6.0" +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/basex@5.0.6", "@ethersproject/basex@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.6.tgz#ab95c32e48288a3d868726463506641cb1e9fb6b" @@ -318,6 +320,15 @@ "@ethersproject/logger" "^5.6.0" bn.js "^4.11.9" +"@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + "@ethersproject/bytes@5.0.8", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.2", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" @@ -332,6 +343,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/constants@5.0.7", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.7.tgz#44ff979e5781b17c8c6901266896c3ee745f4e7e" @@ -346,6 +364,13 @@ dependencies: "@ethersproject/bignumber" "^5.6.0" +"@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts@5.0.8", "@ethersproject/contracts@^5.0.2": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.8.tgz#71d3ba16853a1555be2e161a6741df186f81c73b" @@ -389,6 +414,21 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" +"@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/hdnode@5.0.7", "@ethersproject/hdnode@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.7.tgz#c7bce94a337ea65e37c46bab09a83e1c1a555d99" @@ -442,6 +482,14 @@ "@ethersproject/bytes" "^5.6.0" js-sha3 "0.8.0" +"@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + "@ethersproject/logger@5.0.8", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.8.tgz#135c1903d35c878265f3cbf2b287042c4c20d5d4" @@ -452,6 +500,11 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== +"@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + "@ethersproject/networks@5.0.6", "@ethersproject/networks@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.6.tgz#4d6586bbebfde1c027504ebf6dfb783b29c3803a" @@ -466,6 +519,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.0.6", "@ethersproject/pbkdf2@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.6.tgz#105dbfb08cd5fcf33869b42bfdc35a3ebd978cbd" @@ -488,6 +548,13 @@ dependencies: "@ethersproject/logger" "^5.6.0" +"@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/providers@5.0.17", "@ethersproject/providers@^5.0.5": version "5.0.17" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.17.tgz#f380e7831149e24e7a1c6c9b5fb1d6dfc729d024" @@ -537,6 +604,14 @@ "@ethersproject/bytes" "^5.6.0" "@ethersproject/logger" "^5.6.0" +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2@5.0.6", "@ethersproject/sha2@^5.0.3": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.6.tgz#175116dc10b866a0a381f6316d094bcc510bee3c" @@ -568,6 +643,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.0.7", "@ethersproject/solidity@^5.0.2": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.7.tgz#72a3455f47a454db2dcf363992d42e9045dc7fce" @@ -597,6 +684,15 @@ "@ethersproject/constants" "^5.6.0" "@ethersproject/logger" "^5.6.0" +"@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/transactions@5.0.8", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.2", "@ethersproject/transactions@^5.0.5": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.8.tgz#3b4d7041e13b957a9c4f131e0aea9dae7b6f5a23" @@ -627,6 +723,21 @@ "@ethersproject/rlp" "^5.6.0" "@ethersproject/signing-key" "^5.6.0" +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/units@5.0.8": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.8.tgz#563325b20fe1eceff7b61857711d5e2b3f38fd09" @@ -679,6 +790,17 @@ "@ethersproject/properties" "^5.6.0" "@ethersproject/strings" "^5.6.0" +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.0.7", "@ethersproject/wordlists@^5.0.4": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.7.tgz#4e5ad38cfbef746b196a3290c0d41696eb7ab468" @@ -690,6 +812,11 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@gar/promisify@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" @@ -711,6 +838,28 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -732,6 +881,150 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@nomicfoundation/edr-darwin-arm64@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.5.tgz#3c428000ec27501617a00f7c447054a272f99177" + integrity sha512-gIXUIiPMUy6roLHpNlxf15DumU7/YhffUf7XIB+WUjMecaySfTGyZsTGnCMJZqrDyiYqWPyPKwCV/2u/jqFAUg== + +"@nomicfoundation/edr-darwin-x64@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.5.tgz#fee26c4a83c9fc534bc0a719e88382fafeed69fe" + integrity sha512-0MrpOCXUK8gmplpYZ2Cy0holHEylvWoNeecFcrP2WJ5DLQzrB23U5JU2MvUzOJ7aL76Za1VXNBWi/UeTWdHM+w== + +"@nomicfoundation/edr-linux-arm64-gnu@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.5.tgz#c48ad44b578abb50706cd8cad607a65b1289689f" + integrity sha512-aw9f7AZMiY1dZFNePJGKho2k+nEgFgzUAyyukiKfSqUIMXoFXMf1U3Ujv848czrSq9c5XGcdDa2xnEf3daU3xg== + +"@nomicfoundation/edr-linux-arm64-musl@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.5.tgz#7cc1b12e2adf872e5a542647182262cc4582f8d9" + integrity sha512-cVFRQjyABBlsbDj+XTczYBfrCHprZ6YNzN8gGGSqAh+UGIJkAIRomK6ar27GyJLNx3HkgbuDoi/9kA0zOo/95w== + +"@nomicfoundation/edr-linux-x64-gnu@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.5.tgz#ae4366c6fad03ea6ec3e2f2bafe397661c11f054" + integrity sha512-CjOg85DfR1Vt0fQWn5U0qi26DATK9tVzo3YOZEyI0JBsnqvk43fUTPv3uUAWBrPIRg5O5kOc9xG13hSpCBBxBg== + +"@nomicfoundation/edr-linux-x64-musl@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.5.tgz#4071929fcece90f95c271f6ba455c55f35750efd" + integrity sha512-hvX8bBGpBydAVevzK8jsu2FlqVZK1RrCyTX6wGHnltgMuBaoGLHYtNHiFpteOaJw2byYMiORc2bvj+98LhJ0Ew== + +"@nomicfoundation/edr-win32-x64-msvc@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.5.tgz#6e6684e56f336c67fbda9bf75b21d7ac586631b8" + integrity sha512-IJXjW13DY5UPsx/eG5DGfXtJ7Ydwrvw/BTZ2Y93lRLHzszVpSmeVmlxjZP5IW2afTSgMLaAAsqNw4NhppRGN8A== + +"@nomicfoundation/edr@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.5.tgz#04f980386f871e1c3bbc180b290d37af0336c81d" + integrity sha512-dPSM9DuI1sr71gqWUMgLo8MjHQWO4+WNDm3iWaT6P4vUFJReZX5qwA5X+3UwIPBry8GvNY084u7yWUvB3/8rqA== + optionalDependencies: + "@nomicfoundation/edr-darwin-arm64" "0.3.5" + "@nomicfoundation/edr-darwin-x64" "0.3.5" + "@nomicfoundation/edr-linux-arm64-gnu" "0.3.5" + "@nomicfoundation/edr-linux-arm64-musl" "0.3.5" + "@nomicfoundation/edr-linux-x64-gnu" "0.3.5" + "@nomicfoundation/edr-linux-x64-musl" "0.3.5" + "@nomicfoundation/edr-win32-x64-msvc" "0.3.5" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + "@nomiclabs/hardhat-ethers@^2.2.3": version "2.2.3" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" @@ -1044,6 +1337,45 @@ path-browserify "^1.0.0" url "^0.11.0" +"@scure/base@~1.1.0", "@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@semantic-release/commit-analyzer@^9.0.2": version "9.0.2" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" @@ -1197,14 +1529,12 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" - integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== - dependencies: - antlr4ts "^0.5.0-alpha.4" +"@solidity-parser/parser@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" + integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== -"@solidity-parser/parser@^0.8.1", "@solidity-parser/parser@^0.8.2": +"@solidity-parser/parser@^0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.8.2.tgz#a6a5e93ac8dca6884a99a532f133beba59b87b69" integrity sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ== @@ -1226,41 +1556,12 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@truffle/error@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.11.tgz#2789c0042d7e796dcbb840c7a9b5d2bcd8e0e2d8" - integrity sha512-ju6TucjlJkfYMmdraYY/IBJaFb+Sa+huhYtOoyOJ+G29KcgytUVnDzKGwC7Kgk6IsxQMm62Mc1E0GZzFbGGipw== - -"@truffle/interface-adapter@^0.4.18": - version "0.4.18" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.18.tgz#1aac45596997d208085d5168f82b990624610646" - integrity sha512-P9JVSYD/CX3V+NgTWu+Bf71sLh8pMwrCpbiYRB93pRw/1H3ZTvt5iDC2MVvVxCs8FkSiy4OZzQK/DJ8+hXAmYw== - dependencies: - bn.js "^4.11.8" - ethers "^4.0.32" - source-map-support "^0.5.19" - web3 "1.2.9" - -"@truffle/provider@^0.2.24": - version "0.2.25" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.25.tgz#32a9539b625fad2d2203be9843e8a9d3011aebed" - integrity sha512-BohKgT2357c2dYCH2IQwldQ4EJkfsWUClpb3j+kR8ng02vbsyAPe0HMH463I+h+tiDKvL757dBltXpe0DBJusg== - dependencies: - "@truffle/error" "^0.0.11" - "@truffle/interface-adapter" "^0.4.18" - web3 "1.2.9" - "@typechain/ethers-v5@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-5.0.0.tgz#6c91766b76c19886cf2c4833ded09611e117f92c" integrity sha512-SnLnq6BCq2NBgm5xsQP8kRIawJ7gppLux8EOMb2ceoB5EuoW87AOyi6r1J5LTYe65/J59HjOVtaGCqsO+38Xrw== -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== - -"@types/bn.js@*", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@types/bn.js@*", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1294,20 +1595,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/level-errors@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" - integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== - -"@types/levelup@^4.3.0": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" - integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== - dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" - "@types/node" "*" - "@types/lodash@^4.14.86": version "4.14.167" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.167.tgz#ce7d78553e3c886d4ea643c37ec7edc20f16765e" @@ -1353,12 +1640,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== -"@types/node@^10.12.18": - version "10.17.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.50.tgz#7a20902af591282aa9176baefc37d4372131c32d" - integrity sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA== - -"@types/node@^12.12.6", "@types/node@^12.6.1": +"@types/node@^12.12.6": version "12.19.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.12.tgz#04793c2afa4ce833a9972e4c476432e30f9df47b" integrity sha512-UwfL2uIU9arX/+/PRcIkT08/iBadGN2z6ExOROA2Dh5mAuWTBj6iJbQX4nekiV5H8cTrEG569LeX+HRco9Cbxw== @@ -1452,11 +1734,6 @@ "@types/bn.js" "*" "@types/underscore" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - "@ungap/structured-clone@^0.3.4": version "0.3.4" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-0.3.4.tgz#f6d804e185591373992781361e4aa5bb81ffba35" @@ -1508,13 +1785,6 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - abstract-leveldown@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" @@ -1536,17 +1806,6 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: dependencies: xtend "~4.0.0" -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - abstract-leveldown@~2.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" @@ -1554,17 +1813,6 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1583,11 +1831,6 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -1642,6 +1885,13 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1725,11 +1975,6 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -1884,7 +2129,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: +async-eventemitter@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -2580,11 +2825,6 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - bn.js@^4.0.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -2605,6 +2845,11 @@ bn.js@^5.1.2, bn.js@^5.2.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2626,6 +2871,20 @@ bottleneck@^2.18.1: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2634,6 +2893,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -2935,7 +3201,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -3104,6 +3370,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-columns@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" @@ -3503,14 +3774,6 @@ coveralls@^3.0.1: minimist "^1.2.5" request "^2.88.2" -crc-32@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460" - integrity sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.3.1" - create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -3617,7 +3880,7 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3631,20 +3894,13 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@^4.1.1, debug@^4.3.3: +debug@4, debug@4.3.4, debug@^4.1.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@4.3.3, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -3659,6 +3915,13 @@ debug@^3.1.0: dependencies: ms "^2.1.1" +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debug@^4.0.1, debug@^4.2.0: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -3762,14 +4025,6 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -3863,14 +4118,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -3898,6 +4145,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4031,16 +4285,6 @@ encoding-down@5.0.4, encoding-down@~5.0.0: level-errors "^2.0.0" xtend "^4.0.1" -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - encoding@^0.1.11, encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -4380,16 +4624,7 @@ eth-json-rpc-middleware@^1.5.0: promise-to-callback "^1.0.0" tape "^4.6.3" -eth-lib@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" - integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@0.2.8, eth-lib@^0.2.8: +eth-lib@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== @@ -4481,7 +4716,7 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4502,6 +4737,26 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + ethereum-waffle@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.2.1.tgz#9d6d6b93484c5e1b77dfdeb646c050ed877e836e" @@ -4647,7 +4902,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4: +ethereumjs-util@^7.0.2: version "7.1.4" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== @@ -4759,21 +5014,6 @@ ethers@5.0.24, ethers@^5.0.0, ethers@^5.0.1: "@ethersproject/web" "5.0.11" "@ethersproject/wordlists" "5.0.7" -ethers@^4.0.32: - version "4.0.48" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" - integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== - dependencies: - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.3" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -4790,26 +5030,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" @@ -4866,11 +5091,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -5398,7 +5618,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-cli@6.12.2, ganache-cli@^6.11.0: +ganache-cli@6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== @@ -5578,6 +5798,17 @@ glob@7.2.0, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -5720,11 +5951,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - handlebars@^4.0.1: version "4.7.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" @@ -5806,57 +6032,52 @@ hardhat-typechain@^0.3.4: resolved "https://registry.yarnpkg.com/hardhat-typechain/-/hardhat-typechain-0.3.5.tgz#8e50616a9da348b33bd001168c8fda9c66b7b4af" integrity sha512-w9lm8sxqTJACY+V7vijiH+NkPExnmtiQEjsV9JKD1KgMdVk2q8y+RhvU/c4B7+7b1+HylRUCxpOIvFuB3rE4+w== -hardhat@2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.1.tgz#f69f82bb4d98e28744584779483caa7c5cfbde8b" - integrity sha512-q0AkYXV7R26RzyAkHGQRhhQjk508pseVvH3wSwZwwPUbvA+tjl0vMIrD4aFQDonRXkrnXX4+5KglozzjSd0//Q== +hardhat@2.22.3: + version "2.22.3" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.3.tgz#50605daca6b29862397e446c42ec14c89430bec3" + integrity sha512-k8JV2ECWNchD6ahkg2BR5wKVxY0OiKot7fuxiIpRK0frRqyOljcR2vKwgWSLw6YIeDcNNA4xybj7Og7NSxr2hA== dependencies: - "@ethereumjs/block" "^3.6.0" - "@ethereumjs/blockchain" "^5.5.0" - "@ethereumjs/common" "^2.6.0" - "@ethereumjs/tx" "^3.4.0" - "@ethereumjs/vm" "^5.6.0" "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/edr" "^0.3.5" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" + boxen "^5.1.2" chalk "^2.4.2" chokidar "^3.4.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" - ethereum-cryptography "^0.1.2" + ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "^7.1.3" + glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + keccak "^3.0.2" lodash "^4.17.11" - merkle-patricia-tree "^4.2.2" mnemonist "^0.38.0" - mocha "^9.2.0" + mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - slash "^3.0.0" solc "0.7.3" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" tsort "0.0.1" - undici "^4.14.1" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" @@ -5989,6 +6210,11 @@ heap@0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6988,6 +7214,15 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -7064,11 +7299,6 @@ level-codec@~7.0.0: resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - level-errors@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" @@ -7118,15 +7348,6 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - level-mem@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" @@ -7135,22 +7356,6 @@ level-mem@^3.0.1: level-packager "~4.0.0" memdown "~3.0.0" -level-mem@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" - integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== - dependencies: - level-packager "^5.0.3" - memdown "^5.0.0" - -level-packager@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - level-packager@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" @@ -7182,13 +7387,6 @@ level-sublevel@6.6.4: typewiselite "~1.0.0" xtend "~4.0.0" -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - level-ws@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" @@ -7206,15 +7404,6 @@ level-ws@^1.0.0: readable-stream "^2.2.8" xtend "^4.0.1" -level-ws@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" - integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== - dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" - levelup@3.1.1, levelup@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" @@ -7238,17 +7427,6 @@ levelup@^1.2.1: semver "~5.4.1" xtend "~4.0.0" -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7706,11 +7884,6 @@ match-all@^1.2.6: resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7746,18 +7919,6 @@ memdown@^1.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" -memdown@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" - integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== - dependencies: - abstract-leveldown "~6.2.1" - functional-red-black-tree "~1.0.1" - immediate "~3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.2.0" - memdown@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" @@ -7834,23 +7995,16 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.3.tgz#b4e5d485d231f02b255ed79a7852f9d12ee0c09f" - integrity sha512-S4xevdXl5KvdBGgUxhQcxoep0onqXiIhzfwZp4M78kIuJH3Pu9o9IUgqhzSFOR2ykLO6t265026Xb6PY0q2UFQ== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - semaphore-async-await "^1.5.1" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7960,12 +8114,12 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@^3.0.4: version "3.1.2" @@ -7974,6 +8128,13 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -8108,32 +8269,28 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^9.2.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== +mocha@^10.0.0, mocha@^10.2.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" - debug "4.3.3" + debug "4.3.4" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "4.2.1" + minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.1" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" + workerpool "6.2.1" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" @@ -8237,11 +8394,6 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -9204,11 +9356,6 @@ prettier@^2.1.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -printj@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb" - integrity sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg== - private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -9398,13 +9545,6 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.7.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - qs@^6.9.4: version "6.9.4" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" @@ -9550,7 +9690,7 @@ read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9980,11 +10120,6 @@ sc-istanbul@^0.4.5: which "^1.1.1" wordwrap "^1.0.0" -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -10045,11 +10180,6 @@ semantic-release@^19.0.2: signale "^1.2.1" yargs "^16.2.0" -semaphore-async-await@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" - integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= - semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" @@ -10173,11 +10303,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -10432,30 +10557,30 @@ solhint@^3.1.0: optionalDependencies: prettier "^1.14.3" -solidity-coverage@^0.7.13: - version "0.7.13" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.13.tgz#eca0659e857aef25580742ae1fae9bdc1d9f3dd4" - integrity sha512-06r0R+/j8lgl5/Z57VwxWNFZId0ZavcQU45W2gCfsBmEt/1Y6Xgm96oMSa6JBIvwrPR8H4T3icxTLiUVsMFNeg== +solidity-coverage@^0.8.0: + version "0.8.12" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.12.tgz#c4fa2f64eff8ada7a1387b235d6b5b0e6c6985ed" + integrity sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw== dependencies: - "@solidity-parser/parser" "^0.8.1" - "@truffle/provider" "^0.2.24" + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.18.0" chalk "^2.4.2" death "^1.1.0" - detect-port "^1.3.0" + difflib "^0.2.4" fs-extra "^8.1.0" - ganache-cli "^6.11.0" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" jsonschema "^1.2.4" - lodash "^4.17.15" + lodash "^4.17.21" + mocha "^10.2.0" node-emoji "^1.10.0" pify "^4.0.1" recursive-readdir "^2.2.2" sc-istanbul "^0.4.5" semver "^7.3.4" shelljs "^0.8.3" - web3-utils "^1.3.0" + web3-utils "^1.3.6" source-map-resolve@^0.5.0: version "0.5.3" @@ -10491,7 +10616,7 @@ source-map-support@^0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.17, source-map-support@^0.5.19: +source-map-support@^0.5.17: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -10667,7 +10792,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11123,11 +11248,6 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - ts-essentials@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" @@ -11265,6 +11385,11 @@ type-fest@^0.18.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -11333,10 +11458,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.9.3: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== +typescript@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" @@ -11385,10 +11510,12 @@ underscore@1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -undici@^4.14.1: - version "4.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff" - integrity sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw== +undici@^5.14.0: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" union-value@^1.0.0: version "1.0.1" @@ -11546,11 +11673,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= - uuid@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -11622,16 +11744,6 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" - integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== - dependencies: - "@types/node" "^10.12.18" - got "9.6.0" - swarm-js "^0.1.40" - underscore "1.9.1" - web3-core-helpers@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" @@ -11641,15 +11753,6 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" - integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.9" - web3-utils "1.2.9" - web3-core-method@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" @@ -11662,18 +11765,6 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" - integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg== - 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" - web3-core-promievent@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" @@ -11681,13 +11772,6 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" - integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw== - dependencies: - eventemitter3 "3.1.2" - web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -11699,17 +11783,6 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" - integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA== - 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" - web3-core-subscriptions@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" @@ -11719,15 +11792,6 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" - integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg== - dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -11741,19 +11805,6 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" - integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA== - 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" - web3-eth-abi@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" @@ -11763,15 +11814,6 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" - integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q== - dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.9" - web3-eth-accounts@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" @@ -11789,23 +11831,6 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" - integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== - 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" - web3-eth-contract@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" @@ -11821,21 +11846,6 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" - integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== - 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" - web3-eth-ens@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" @@ -11851,21 +11861,6 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" - integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== - 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" - web3-eth-iban@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" @@ -11874,14 +11869,6 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" - integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.9" - web3-eth-personal@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" @@ -11894,18 +11881,6 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" - integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== - 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" - web3-eth@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" @@ -11925,25 +11900,6 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" - integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== - 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" - web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" @@ -11953,15 +11909,6 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" - integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== - dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" - web3-provider-engine@14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" @@ -11996,14 +11943,6 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" - integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A== - dependencies: - web3-core-helpers "1.2.9" - xhr2-cookies "1.1.0" - web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -12013,15 +11952,6 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" - integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-providers-ws@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" @@ -12032,16 +11962,6 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" - integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA== - dependencies: - eventemitter3 "^4.0.0" - underscore "1.9.1" - web3-core-helpers "1.2.9" - websocket "^1.0.31" - web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -12052,16 +11972,6 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" - integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== - dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-net "1.2.9" - web3-utils@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" @@ -12076,13 +11986,13 @@ web3-utils@1.2.11: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3" - integrity sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w== +web3-utils@^1.0.0-beta.31: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.1.tgz#9aa880dd8c9463fe5c099107889f86a085370c2e" + integrity sha512-9gPwFm8SXtIJuzdrZ37PRlalu40fufXxo+H2PiCwaO6RpKGAvlUlWU0qQbyToFNXg7W2H8djEgoAVac8NLMCKQ== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" @@ -12090,18 +12000,18 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@^1.0.0-beta.31, web3-utils@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.1.tgz#9aa880dd8c9463fe5c099107889f86a085370c2e" - integrity sha512-9gPwFm8SXtIJuzdrZ37PRlalu40fufXxo+H2PiCwaO6RpKGAvlUlWU0qQbyToFNXg7W2H8djEgoAVac8NLMCKQ== +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" web3@1.2.11: @@ -12117,19 +12027,6 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" - integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== - 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" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -12198,13 +12095,6 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@2.0.2, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -12212,6 +12102,13 @@ which@^1.1.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -12219,6 +12116,13 @@ wide-align@^1.1.2: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -12234,10 +12138,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^2.0.0: version "2.1.0" @@ -12357,12 +12261,7 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==