From 952cd16e2a979f9650e70dd700bf83fb9ccdfd78 Mon Sep 17 00:00:00 2001 From: kamescg Date: Wed, 30 Jun 2021 00:46:22 -0700 Subject: [PATCH 01/15] reduce SLOAD calls in _withdrawFromVault --- contracts/yield-source/YearnV2YieldSource.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 51e6155..f756b0a 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -184,8 +184,9 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl uint256 yShares = _tokenToYShares(amount); uint256 previousBalance = token.balanceOf(address(this)); // we accept losses to avoid being locked in the Vault (if losses happened for some reason) - if(maxLosses != 0) { - vault.withdraw(yShares, address(this), maxLosses); + uint256 _maxLosses = maxLosses; + if(_maxLosses != 0) { + vault.withdraw(yShares, address(this), _maxLosses); } else { vault.withdraw(yShares); } From a5c3841eb93405716766b1875deac5b2e666ad89 Mon Sep 17 00:00:00 2001 From: kamescg Date: Wed, 30 Jun 2021 14:59:26 -0700 Subject: [PATCH 02/15] gas optimization --- contracts/yield-source/YearnV2YieldSource.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 51e6155..70f3290 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -70,7 +70,6 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl public initializer { - require(address(vault) == address(0), "YearnV2YieldSource:: already initialized"); require(_vault.token() == address(_token), "YearnV2YieldSource:: incorrect vault"); require(_vault.activation() != uint256(0), "YearnV2YieldSource:: vault not initialized"); // NOTE: Vaults from 0.3.2 to 0.3.4 have dips in shareValue From 9da582be975ab8fe60b008e13cb4162503bbe2c0 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Wed, 7 Jul 2021 18:53:14 +0200 Subject: [PATCH 03/15] chore(lint): lint contracts --- .gitignore | 1 + contracts/yield-source/YearnV2YieldSource.sol | 26 +++++++-------- package.json | 2 +- yarn.lock | 32 +++++++++++++++---- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index da39254..86d654d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ artifacts cache node_modules types +deployments/localhost/ # Solidity Coverage coverage diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index f756b0a..424fecb 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -20,11 +20,11 @@ import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable { using SafeERC20Upgradeable for IERC20Upgradeable; using SafeMathUpgradeable for uint; - + /// @notice Yearn Vault which manages `token` to generate yield IYVaultV2 public vault; /// @dev Deposit Token contract address - IERC20Upgradeable internal token; + IERC20Upgradeable internal token; /// @dev Max % of losses that the Yield Source will accept from the Vault in BPS uint256 public maxLosses = 0; // 100% would be 10_000 @@ -33,7 +33,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl address indexed user, uint256 amount ); - + /// @notice Emitted when the yield source is initialized event YieldSourceYearnV2Initialized( IYVaultV2 vault, @@ -60,14 +60,14 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl uint256 amount ); - /// @notice Initializes the yield source with + /// @notice Initializes the yield source with /// @param _vault YearnV2 Vault in which the Yield Source will deposit `token` to generate Yield /// @param _token Underlying Token / Deposit Token function initialize( IYVaultV2 _vault, IERC20Upgradeable _token - ) - public + ) + public initializer { require(address(vault) == address(0), "YearnV2YieldSource:: already initialized"); @@ -168,7 +168,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @return The actual amount of shares that were received for the deposited tokens function _depositInVault() internal returns (uint256) { IYVaultV2 v = vault; // NOTE: for gas usage - if(token.allowance(address(this), address(v)) < token.balanceOf(address(this))) { + if (token.allowance(address(this), address(v)) < token.balanceOf(address(this))) { token.safeApprove(address(v), type(uint256).max); } // this will deposit full balance (for cases like not enough room in Vault) @@ -185,7 +185,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl uint256 previousBalance = token.balanceOf(address(this)); // we accept losses to avoid being locked in the Vault (if losses happened for some reason) uint256 _maxLosses = maxLosses; - if(_maxLosses != 0) { + if (_maxLosses != 0) { vault.withdraw(yShares, address(this), _maxLosses); } else { vault.withdraw(yShares); @@ -223,7 +223,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl } /// @notice Support function to retrieve used by Vault - /// @dev used to correctly scale prices + /// @dev used to correctly scale prices /// @return decimals of vault's shares (and underlying token) function _vaultDecimals() internal view returns (uint256) { return vault.decimals(); @@ -238,7 +238,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl return tokens.mul(10 ** _vaultDecimals()).div(_pricePerYShare()); } - /// @notice Converter from deposit yShares (yearn vault's shares) to token + /// @notice Converter from deposit yShares (yearn vault's shares) to token /// @param yShares Vault's shares to be converted /// @return tokens that will be received if yShares shares are redeemed function _ySharesToToken(uint256 yShares) internal view returns (uint256) { @@ -249,7 +249,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @param tokens amount of tokens to be converted /// @return shares number of shares equivalent to the amount of tokens function _tokenToShares(uint256 tokens) internal view returns (uint256 shares) { - if(totalSupply() == 0) { + if (totalSupply() == 0) { shares = tokens; } else { uint256 _totalTokens = _totalAssetsInToken(); @@ -262,7 +262,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @dev used to calculate how many shares to mint / burn when depositing / withdrawing /// @return tokens number of tokens equivalent (in value) to the amount of Yield Source shares function _sharesToToken(uint256 shares) internal view returns (uint256 tokens) { - if(totalSupply() == 0) { + if (totalSupply() == 0) { tokens = shares; } else { uint256 _totalTokens = _totalAssetsInToken(); @@ -277,4 +277,4 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl function areEqualStrings(string memory a, string memory b) internal pure returns (bool) { return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 6d99842..308631b 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "hardhat-deploy-ethers": "0.3.0-beta.7", "hardhat-gas-reporter": "1.0.4", "prettier": "2.2.1", - "solhint": "3.3.3", + "solhint": "3.3.6", "solidity-coverage": "0.7.16", "ts-generator": "0.1.1", "ts-node": "9.1.1", diff --git a/yarn.lock b/yarn.lock index 63caaf5..9bc631f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -895,7 +895,7 @@ __metadata: hardhat-deploy-ethers: 0.3.0-beta.7 hardhat-gas-reporter: 1.0.4 prettier: 2.2.1 - solhint: 3.3.3 + solhint: 3.3.6 solidity-coverage: 0.7.16 ts-generator: 0.1.1 ts-node: 9.1.1 @@ -1066,6 +1066,15 @@ __metadata: languageName: node linkType: hard +"@solidity-parser/parser@npm:^0.13.2": + version: 0.13.2 + resolution: "@solidity-parser/parser@npm:0.13.2" + dependencies: + antlr4ts: ^0.5.0-alpha.4 + checksum: ad2f8ca981bf7564711e5d9e709c79d3a44116419b21391692b356387c9528fc8056178378a5118d08389d2c73b93ca30cca9df2bd06de17bb0092b433077b33 + languageName: node + linkType: hard + "@solidity-parser/parser@npm:^0.5.2": version: 0.5.2 resolution: "@solidity-parser/parser@npm:0.5.2" @@ -1645,6 +1654,15 @@ __metadata: languageName: node linkType: hard +"antlr4ts@npm:^0.5.0-alpha.4": + version: 0.5.0-dev + resolution: "antlr4ts@npm:0.5.0-dev" + dependencies: + source-map-support: ^0.5.16 + checksum: 0f206ef5ef5793456de66545a1bf6d8d52343bc6c6689d941cc16ea3f0b6b18a7710b4cc3946a61d021fda51f93b89adcd7c5d7fe249ea1739b0459e7a85b42c + languageName: node + linkType: hard + "anymatch@npm:~3.1.1": version: 3.1.1 resolution: "anymatch@npm:3.1.1" @@ -10939,11 +10957,11 @@ resolve@1.1.x: languageName: node linkType: hard -"solhint@npm:3.3.3": - version: 3.3.3 - resolution: "solhint@npm:3.3.3" +"solhint@npm:3.3.6": + version: 3.3.6 + resolution: "solhint@npm:3.3.6" dependencies: - "@solidity-parser/parser": ^0.12.0 + "@solidity-parser/parser": ^0.13.2 ajv: ^6.6.1 antlr4: 4.7.1 ast-parents: 0.0.1 @@ -10963,7 +10981,7 @@ resolve@1.1.x: optional: true bin: solhint: solhint.js - checksum: 671c02462d97865b19d3058ceb6159c4afa86795390c08280b4a137c6022a434911cb2418befcfaf5262585e9ba13eb7b3010b6f06eef246e3bf1501dac7c414 + checksum: 3e8320a03932913fb45de1964563f1b8f4f92e3e8cc086d21dd0763fb17a035a1ae1665983e15c1fe57517e9b3b0820c5ec4210288fa7240b06806918d831e55 languageName: node linkType: hard @@ -11082,7 +11100,7 @@ resolve@1.1.x: languageName: node linkType: hard -"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.17": +"source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.17": version: 0.5.19 resolution: "source-map-support@npm:0.5.19" dependencies: From e59b547c5373cfd50ff951e6ba3e9993a4b7535f Mon Sep 17 00:00:00 2001 From: kamescg Date: Wed, 30 Jun 2021 00:56:09 -0700 Subject: [PATCH 04/15] reduce SLOAD calls in _depositInVault --- contracts/yield-source/YearnV2YieldSource.sol | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 2741444..645e047 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -167,9 +167,12 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @return The actual amount of shares that were received for the deposited tokens function _depositInVault() internal returns (uint256) { IYVaultV2 v = vault; // NOTE: for gas usage - if (token.allowance(address(this), address(v)) < token.balanceOf(address(this))) { - token.safeApprove(address(v), type(uint256).max); + IERC20Upgradeable _token = token; + + if (_token.allowance(address(this), address(v)) < _token.balanceOf(address(this))) { + _token.safeApprove(address(v), type(uint256).max); } + // this will deposit full balance (for cases like not enough room in Vault) return v.deposit(); } @@ -180,8 +183,9 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @param amount amount of asset tokens to be redeemed /// @return Tokens received from the Vault function _withdrawFromVault(uint amount) internal returns (uint256) { + IERC20Upgradeable _token = token; uint256 yShares = _tokenToYShares(amount); - uint256 previousBalance = token.balanceOf(address(this)); + uint256 previousBalance = _token.balanceOf(address(this)); // we accept losses to avoid being locked in the Vault (if losses happened for some reason) uint256 _maxLosses = maxLosses; if (_maxLosses != 0) { @@ -189,7 +193,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl } else { vault.withdraw(yShares); } - uint256 currentBalance = token.balanceOf(address(this)); + uint256 currentBalance = _token.balanceOf(address(this)); return previousBalance.sub(currentBalance); } From 0647477dbddd3015c852dd8fd182af8840f8ddcb Mon Sep 17 00:00:00 2001 From: kamescg Date: Wed, 30 Jun 2021 22:26:55 -0700 Subject: [PATCH 05/15] prevent locking user funds in _withdrawFromVault --- contracts/external/yearn/IYVaultV2.sol | 4 +- contracts/yield-source/YearnV2YieldSource.sol | 10 +++- test/YearnV2YieldSource.test.ts | 58 ++++++++----------- 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/contracts/external/yearn/IYVaultV2.sol b/contracts/external/yearn/IYVaultV2.sol index 9c7ba85..deeea7d 100644 --- a/contracts/external/yearn/IYVaultV2.sol +++ b/contracts/external/yearn/IYVaultV2.sol @@ -35,7 +35,7 @@ interface IYVaultV2 is IERC20 { function withdraw(uint256 maxShares) external returns (uint256); - // function withdraw(uint256 maxShares, address recipient) external returns (uint256); + function withdraw(uint256 maxShares, address recipient) external returns (uint256); function withdraw(uint256 maxShares, address recipient, uint256 maxLoss) external returns (uint256); @@ -118,4 +118,4 @@ interface IYVaultV2 is IERC20 { * is subject to guardian defined by the Vault. */ function guardian() external view returns (address); -} \ No newline at end of file +} diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 645e047..ce48ffd 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -184,18 +184,22 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @return Tokens received from the Vault function _withdrawFromVault(uint amount) internal returns (uint256) { IERC20Upgradeable _token = token; + IYVaultV2 _vault = vault; uint256 yShares = _tokenToYShares(amount); uint256 previousBalance = _token.balanceOf(address(this)); + // we accept losses to avoid being locked in the Vault (if losses happened for some reason) uint256 _maxLosses = maxLosses; + if (_maxLosses != 0) { - vault.withdraw(yShares, address(this), _maxLosses); + _vault.withdraw(yShares, address(this), _maxLosses); } else { - vault.withdraw(yShares); + _vault.withdraw(yShares, address(this)); } + uint256 currentBalance = _token.balanceOf(address(this)); - return previousBalance.sub(currentBalance); + return currentBalance.sub(previousBalance); } /// @notice Returns the amount of shares of yearn's vault that the Yield Source holds diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index dea013f..fe17e1b 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -6,19 +6,11 @@ import { JsonRpcProvider } from '@ethersproject/providers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { expect } from 'chai'; +import { Contract } from 'ethers'; +import { MockContract } from 'ethereum-waffle'; import { ethers, waffle } from 'hardhat'; -// TYPES -import { - IERC20Upgradeable as ERC20, - IYieldSource as YieldSource, - IYVaultV2 as Vault, - YearnV2YieldSourceHarness, - YearnV2YieldSourceProxyFactoryHarness -} from '../types'; -// ABIs import IYVaultV2 from '../abis/IYVaultV2.json'; -import IYieldSource from '../abis/IYieldSource.json'; import SafeERC20WrapperUpgradeable from '../abis/SafeERC20WrapperUpgradeable.json'; const toWei = ethers.utils.parseEther; @@ -31,10 +23,10 @@ describe('yearnV2YieldSource', () => { let wallet2: SignerWithAddress; let provider: JsonRpcProvider; - let vault: Vault; - let yearnV2YieldSource: YearnV2YieldSourceHarness; + let vault: MockContract; + let yearnV2YieldSource: Contract; - let underlyingToken: ERC20; + let underlyingToken: MockContract; beforeEach(async () => { const { deployMockContract } = waffle; @@ -44,12 +36,12 @@ describe('yearnV2YieldSource', () => { debug('mocking tokens...'); - underlyingToken = ((await deployMockContract( + underlyingToken = await deployMockContract( contractsOwner, SafeERC20WrapperUpgradeable, - )) as unknown) as ERC20; + ); - vault = ((await deployMockContract(contractsOwner, IYVaultV2)) as unknown) as Vault; + vault = await deployMockContract(contractsOwner, IYVaultV2); await vault.mock.token.returns(underlyingToken.address); await vault.mock.activation.returns(1617880430); await vault.mock.apiVersion.returns("0.3.0"); @@ -63,25 +55,21 @@ describe('yearnV2YieldSource', () => { debug('deploying yearnV2YieldSourceProxyFactory...'); - // const yearnV2YieldSourceProxyFactory = await ethers.getContractFactory( - // 'YearnV2YieldSourceProxyFactoryHarness', - // ); - //const hardhatyearnV2YieldSourceProxyFactory = (await yearnV2YieldSourceProxyFactory.deploy()) as YearnV2YieldSourceProxyFactoryHarness; const YearnYieldSource = await ethers.getContractFactory( 'YearnV2YieldSourceHarness', ); const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - const initializeTx = await hardhatYearnYieldSourceHarness.initialize( + await hardhatYearnYieldSourceHarness.initialize( vault.address, underlyingToken.address ); - yearnV2YieldSource = (await ethers.getContractAt( + yearnV2YieldSource = await ethers.getContractAt( 'YearnV2YieldSourceHarness', hardhatYearnYieldSourceHarness.address, contractsOwner, - )) as YearnV2YieldSourceHarness; + ); await yearnV2YieldSource.transferOwnership(yieldSourceOwner.address) }); @@ -95,7 +83,7 @@ describe('yearnV2YieldSource', () => { 'YearnV2YieldSourceHarness', ); const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - + await expect(hardhatYearnYieldSourceHarness.initialize( vault.address, underlyingToken.address @@ -113,7 +101,7 @@ describe('yearnV2YieldSource', () => { 'YearnV2YieldSourceHarness', ); const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - + await expect(hardhatYearnYieldSourceHarness.initialize( vault.address, underlyingToken.address @@ -210,7 +198,7 @@ describe('yearnV2YieldSource', () => { it('should return tokens if totalSupply is 0', async () => { await vault.mock.pricePerShare.returns(toWei('2')); - + expect(await yearnV2YieldSource.tokenToShares(toWei('100'))).to.equal(toWei('100')); }); }); @@ -275,7 +263,7 @@ describe('yearnV2YieldSource', () => { await yearnV2YieldSource.mint(wallet2.address, toWei('100')); await supplyTokenTo(yieldSourceOwner, amount); }); - + it('should revert on error', async () => { await underlyingToken.mock.approve.withArgs(vault.address, amount).returns(true); await vault.mock.deposit @@ -323,15 +311,15 @@ describe('yearnV2YieldSource', () => { await underlyingToken.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(toWei('0')); - + await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerBalance); await vault.mock.pricePerShare.returns(toWei('1')); await vault.mock.maxAvailableShares .returns(redeemAmount); - await vault.mock['withdraw(uint256)'] - .withArgs(redeemAmount) + await vault.mock['withdraw(uint256,address)'] + .withArgs(redeemAmount, yearnV2YieldSource.address) .returns(redeemAmount); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); @@ -358,7 +346,7 @@ describe('yearnV2YieldSource', () => { await underlyingToken.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(toWei('0')); - + await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerBalance); @@ -397,8 +385,8 @@ describe('yearnV2YieldSource', () => { await vault.mock.pricePerShare.returns(toWei('1')); await vault.mock.maxAvailableShares .returns(redeemAmount); - await vault.mock['withdraw(uint256)'] - .withArgs(redeemAmount) + await vault.mock['withdraw(uint256,address)'] + .withArgs(redeemAmount, yearnV2YieldSource.address) .returns(redeemAmount); await vault.mock.withdraw .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) @@ -436,8 +424,8 @@ describe('yearnV2YieldSource', () => { .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) .returns(redeemAmount); - await vault.mock['withdraw(uint256)'] - .withArgs(redeemAmount) + await vault.mock['withdraw(uint256,address)'] + .withArgs(redeemAmount,yearnV2YieldSource.address) .returns(redeemAmount); await underlyingToken.mock.balanceOf From df1c03178420b7678b1ddf9d6178e93fb5355759 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Thu, 1 Jul 2021 15:30:33 +0200 Subject: [PATCH 06/15] fix(contract): use generic proxy factory to init --- .../YearnV2YieldSourceProxyFactoryHarness.sol | 35 --- contracts/yield-source/YearnV2YieldSource.sol | 59 +++-- .../YearnV2YieldSourceProxyFactory.sol | 34 --- hardhat.config.ts | 17 +- package.json | 2 + test/YearnV2YieldSource.test.ts | 247 ++++++++---------- yarn.lock | 20 ++ 7 files changed, 198 insertions(+), 216 deletions(-) delete mode 100644 contracts/test/YearnV2YieldSourceProxyFactoryHarness.sol delete mode 100644 contracts/yield-source/YearnV2YieldSourceProxyFactory.sol diff --git a/contracts/test/YearnV2YieldSourceProxyFactoryHarness.sol b/contracts/test/YearnV2YieldSourceProxyFactoryHarness.sol deleted file mode 100644 index a22774a..0000000 --- a/contracts/test/YearnV2YieldSourceProxyFactoryHarness.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 - -pragma solidity >=0.6.0 <0.7.0; - -import "./YearnV2YieldSourceHarness.sol"; -import "../external/openzeppelin/ProxyFactory.sol"; -import "../yield-source/YearnV2YieldSourceProxyFactory.sol"; - -/// @title YearnV2 Yield Source Proxy Factory -/// @notice Minimal proxy pattern for creating new YearnV2 Yield Sources -contract YearnV2YieldSourceProxyFactoryHarness is ProxyFactory { - - /// @notice Contract template for deploying proxied aToken Yield Sources - YearnV2YieldSourceHarness public instance; - - /// @notice Initializes the Factory with an instance of the YearnV2 Yield Source - constructor () public { - instance = new YearnV2YieldSourceHarness(); - } - - /// @notice Creates a new YearnV2 Yield Source as a proxy of the template instance - /// @param _vault YearnV2 Vault address - /// @param _token Underlying Token address - /// @return A reference to the new proxied YearnV2 Yield Sources - function create( - IYVaultV2 _vault, - IERC20Upgradeable _token - ) public returns (YearnV2YieldSourceHarness) { - YearnV2YieldSourceHarness yearnV2YieldSourceHarness = YearnV2YieldSourceHarness(deployMinimal(address(instance), "")); - - yearnV2YieldSourceHarness.initialize(_vault, _token); - - return yearnV2YieldSourceHarness; - } -} diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index ce48ffd..31cd368 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -23,8 +23,10 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @notice Yearn Vault which manages `token` to generate yield IYVaultV2 public vault; + /// @dev Deposit Token contract address IERC20Upgradeable internal token; + /// @dev Max % of losses that the Yield Source will accept from the Vault in BPS uint256 public maxLosses = 0; // 100% would be 10_000 @@ -35,9 +37,12 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl ); /// @notice Emitted when the yield source is initialized - event YieldSourceYearnV2Initialized( + event YearnV2YieldSourceInitialized( IYVaultV2 vault, - IERC20Upgradeable token + uint8 decimals, + string symbol, + string name, + address indexed owner ); /// @notice Emitted when the Max Losses accepted when withdrawing from yVault are changed @@ -60,39 +65,63 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl uint256 amount ); + /// @notice Mock Initializer to initialize implementations used by minimal proxies. + function freeze() public initializer { + //no-op + } + /// @notice Initializes the yield source with - /// @param _vault YearnV2 Vault in which the Yield Source will deposit `token` to generate Yield - /// @param _token Underlying Token / Deposit Token + /// @param _vault Yearn V2 Vault in which the Yield Source will deposit `token` to generate Yield + /// @param _decimals Number of decimals the shares (inherited ERC20) will have. Same as underlying asset to ensure same ExchangeRates. + /// @param _symbol Token symbol for the underlying ERC20 shares (eg: yvysDAI). + /// @param _name Token name for the underlying ERC20 shares (eg: PoolTogether Yearn V2 Vault DAI Yield Source). + /// @param _owner Yearn V2 Vault Yield Source owner. function initialize( IYVaultV2 _vault, - IERC20Upgradeable _token + uint8 _decimals, + string calldata _symbol, + string calldata _name, + address _owner ) public initializer + returns (bool) { - require(_vault.token() == address(_token), "YearnV2YieldSource:: incorrect vault"); - require(_vault.activation() != uint256(0), "YearnV2YieldSource:: vault not initialized"); + require(address(vault) == address(0), "YearnV2YieldSource/already-initialized"); + require(_vault.activation() != uint256(0), "YearnV2YieldSource/vault-not-initialized"); + // NOTE: Vaults from 0.3.2 to 0.3.4 have dips in shareValue - require(!areEqualStrings(_vault.apiVersion(), "0.3.2"), "YearnV2YieldSource:: vault not compatible"); - require(!areEqualStrings(_vault.apiVersion(), "0.3.3"), "YearnV2YieldSource:: vault not compatible"); - require(!areEqualStrings(_vault.apiVersion(), "0.3.4"), "YearnV2YieldSource:: vault not compatible"); + require(!areEqualStrings(_vault.apiVersion(), "0.3.2"), "YearnV2YieldSource/vault-not-compatible"); + require(!areEqualStrings(_vault.apiVersion(), "0.3.3"), "YearnV2YieldSource/vault-not-compatible"); + require(!areEqualStrings(_vault.apiVersion(), "0.3.4"), "YearnV2YieldSource/vault-not-compatible"); vault = _vault; - token = _token; + token = IERC20Upgradeable(_vault.token()); __Ownable_init(); + transferOwnership(_owner); + __ReentrancyGuard_init(); - _token.safeApprove(address(vault), type(uint256).max); + __ERC20_init(_name, _symbol); + require(_decimals > 0, "YearnV2YieldSource/decimals-gt-zero"); + _setupDecimals(_decimals); - emit YieldSourceYearnV2Initialized( + token.safeApprove(address(_vault), type(uint256).max); + + emit YearnV2YieldSourceInitialized( _vault, - _token + _decimals, + _symbol, + _name, + _owner ); + + return true; } function setMaxLosses(uint256 _maxLosses) external onlyOwner { - require(_maxLosses <= 10_000, "YearnV2YieldSource:: losses set too high"); + require(_maxLosses <= 10_000, "YearnV2YieldSource/losses-set-too-high"); maxLosses = _maxLosses; diff --git a/contracts/yield-source/YearnV2YieldSourceProxyFactory.sol b/contracts/yield-source/YearnV2YieldSourceProxyFactory.sol deleted file mode 100644 index c5ef203..0000000 --- a/contracts/yield-source/YearnV2YieldSourceProxyFactory.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 - -pragma solidity 0.6.12; - -import "./YearnV2YieldSource.sol"; -import "../external/openzeppelin/ProxyFactory.sol"; - -/// @title YearnV2 Yield Source Proxy Factory -/// @notice Minimal proxy pattern for creating new YearnV2 Yield Sources -contract YearnV2YieldSourceProxyFactory is ProxyFactory { - - /// @notice Contract template for deploying proxied YearnV2 Yield Sources - YearnV2YieldSource public instance; - - /// @notice Initializes the Factory with an instance of the YearnV2 Yield Source - constructor () public { - instance = new YearnV2YieldSource(); - } - - /// @notice Creates a new YearnV2 Yield Source as a proxy of the template instance - /// @param _vault Vault address - /// @param _token Underlying Token address - /// @return A reference to the new proxied YearnV2 Yield Source - function create( - IYVaultV2 _vault, - IERC20Upgradeable _token - ) public returns (YearnV2YieldSource) { - YearnV2YieldSource yearnV2YieldSource = YearnV2YieldSource(deployMinimal(address(instance), "")); - - yearnV2YieldSource.initialize(_vault, _token); - - return yearnV2YieldSource; - } -} diff --git a/hardhat.config.ts b/hardhat.config.ts index 577346b..70c603d 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -2,6 +2,7 @@ import '@nomiclabs/hardhat-etherscan'; import '@nomiclabs/hardhat-waffle'; import '@typechain/hardhat'; import 'hardhat-abi-exporter'; +import 'hardhat-dependency-compiler'; import 'hardhat-deploy'; import 'hardhat-deploy-ethers'; import 'hardhat-gas-reporter'; @@ -26,7 +27,7 @@ const config: HardhatUserConfig = { }, gasReporter: { currency: 'USD', - gasPrice: 100, + gasPrice: 15, enabled: process.env.REPORT_GAS ? true : false, coinmarketcap: process.env.COINMARKETCAP_API_KEY, maxMethodDiff: 10, @@ -38,6 +39,17 @@ const config: HardhatUserConfig = { deployer: { default: 0, }, + genericProxyFactory: { + default: '0x14e09c3319244a84e7c1E7B52634f5220FA96623', + 4: '0x594069c560D260F90C21Be25fD2C8684efbb5628', + 42: '0x713edC7728C4F0BCc135D48fF96282444d77E604', + 137: '0xd1797D46C3E825fce5215a0259D3426a5c49455C', + 80001: '0xd1797D46C3E825fce5215a0259D3426a5c49455C', + }, + multisig: { + 1: '0x42cd8312D2BCe04277dD5161832460e95b24262E', + 137: '0xfD54F172c162072BAAb2d20DcC8E530736a269a7', + }, }, networks, solidity: { @@ -54,6 +66,9 @@ const config: HardhatUserConfig = { outDir: 'types', target: 'ethers-v5', }, + dependencyCompiler: { + paths: ['@pooltogether/pooltogether-proxy-factory/contracts/GenericProxyFactory.sol'], + } }; verifyTask; diff --git a/package.json b/package.json index 308631b..8b20907 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", "@pooltogether/fixed-point": "1.0.0", + "@pooltogether/pooltogether-proxy-factory": "1.0.0-beta.3", "@pooltogether/yield-source-interface": "1.0.1" }, "devDependencies": { @@ -50,6 +51,7 @@ "ethers": "5.0.32", "hardhat": "2.1.1", "hardhat-abi-exporter": "2.1.2", + "hardhat-dependency-compiler": "1.1.1", "hardhat-deploy": "0.7.0-beta.47", "hardhat-deploy-ethers": "0.3.0-beta.7", "hardhat-gas-reporter": "1.0.4", diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index fe17e1b..5d38838 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -2,37 +2,56 @@ import debug from 'debug'; import { Signer } from '@ethersproject/abstract-signer'; import { BigNumber } from '@ethersproject/bignumber'; -import { JsonRpcProvider } from '@ethersproject/providers'; +import { Contract } from '@ethersproject/contracts'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; - import { expect } from 'chai'; -import { Contract } from 'ethers'; import { MockContract } from 'ethereum-waffle'; import { ethers, waffle } from 'hardhat'; +import { + YearnV2YieldSourceHarness, +} from '../types'; + import IYVaultV2 from '../abis/IYVaultV2.json'; import SafeERC20WrapperUpgradeable from '../abis/SafeERC20WrapperUpgradeable.json'; const toWei = ethers.utils.parseEther; -const MAX_INTEGER = ethers.BigNumber.from('2').pow(ethers.BigNumber.from('256')).sub(ethers.BigNumber.from('1')); +const MAX_INTEGER = ethers.BigNumber.from('2') + .pow(ethers.BigNumber.from('256')) + .sub(ethers.BigNumber.from('1')); const UNDERLYING_TOKEN_DECIMALS = 18; describe('yearnV2YieldSource', () => { let contractsOwner: Signer; let yieldSourceOwner: SignerWithAddress; let wallet2: SignerWithAddress; - let provider: JsonRpcProvider; let vault: MockContract; - let yearnV2YieldSource: Contract; + let hardhatYearnYieldSourceHarness: Contract; + let yearnV2YieldSource: YearnV2YieldSourceHarness; let underlyingToken: MockContract; + let isInitializeTest = false; + + const yearnV2YieldSourceTokenDecimals = 18; + const yearnV2YieldSourceTokenSymbol = 'yvysDAI'; + const yearnV2YieldSourceTokenName = 'PoolTogether Yearn V2 Vault DAI Yield Source'; + + const initializeYearnV2YieldSource = async (vaultAddress: string, decimals: number) => { + return await yearnV2YieldSource.initialize( + vaultAddress, + decimals, + yearnV2YieldSourceTokenSymbol, + yearnV2YieldSourceTokenName, + yieldSourceOwner.address, + ); + }; + beforeEach(async () => { const { deployMockContract } = waffle; [contractsOwner, yieldSourceOwner, wallet2] = await ethers.getSigners(); - provider = waffle.provider; debug('mocking tokens...'); @@ -44,71 +63,72 @@ describe('yearnV2YieldSource', () => { vault = await deployMockContract(contractsOwner, IYVaultV2); await vault.mock.token.returns(underlyingToken.address); await vault.mock.activation.returns(1617880430); - await vault.mock.apiVersion.returns("0.3.0"); - await underlyingToken.mock.allowance - .returns(toWei('0')); - await underlyingToken.mock.approve - .withArgs(vault.address, MAX_INTEGER) - .returns(true); + await vault.mock.apiVersion.returns('0.3.0'); + await underlyingToken.mock.allowance.returns(toWei('0')); + await underlyingToken.mock.approve.withArgs(vault.address, MAX_INTEGER).returns(true); debug('mocking contracts...'); debug('deploying yearnV2YieldSourceProxyFactory...'); - const YearnYieldSource = await ethers.getContractFactory( - 'YearnV2YieldSourceHarness', - ); - const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - - await hardhatYearnYieldSourceHarness.initialize( - vault.address, - underlyingToken.address - ); + const YearnYieldSource = await ethers.getContractFactory('YearnV2YieldSourceHarness'); + hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); yearnV2YieldSource = await ethers.getContractAt( 'YearnV2YieldSourceHarness', hardhatYearnYieldSourceHarness.address, contractsOwner, - ); + ) as YearnV2YieldSourceHarness; - await yearnV2YieldSource.transferOwnership(yieldSourceOwner.address) + if (!isInitializeTest) { + await initializeYearnV2YieldSource(vault.address, 18); + } }); describe('initialize()', () => { - const compatibleVersions = ['0.3.0', '0.3.1', '0.3.5'] - for(const v of compatibleVersions) { + const compatibleVersions = ['0.3.0', '0.3.1', '0.3.5']; + const incompatibleVersions = ['0.3.2', '0.3.3', '0.3.4']; + + let randomWalletAddress: string; + + before(() => { + isInitializeTest = true; + }); + + beforeEach(() => { + randomWalletAddress = ethers.Wallet.createRandom().address; + }); + + after(() => { + isInitializeTest = false; + }); + + for (const v of compatibleVersions) { it(`should let use a ${v} vault`, async () => { await vault.mock.apiVersion.returns(v); - const YearnYieldSource = await ethers.getContractFactory( - 'YearnV2YieldSourceHarness', - ); - const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - - await expect(hardhatYearnYieldSourceHarness.initialize( - vault.address, - underlyingToken.address - )) - .to.emit(hardhatYearnYieldSourceHarness, "YieldSourceYearnV2Initialized") - .withArgs(vault.address, underlyingToken.address); - }) + + await expect(initializeYearnV2YieldSource(vault.address, yearnV2YieldSourceTokenDecimals)) + .to.emit(yearnV2YieldSource, 'YearnV2YieldSourceInitialized') + .withArgs( + vault.address, + yearnV2YieldSourceTokenDecimals, + yearnV2YieldSourceTokenSymbol, + yearnV2YieldSourceTokenName, + yieldSourceOwner.address, + ); + }); } - const incompatibleVersions = ['0.3.2', '0.3.3', '0.3.4'] - for(const v of incompatibleVersions) { + for (const v of incompatibleVersions) { it(`should not let use a ${v} vault`, async () => { await vault.mock.apiVersion.returns(v); - const YearnYieldSource = await ethers.getContractFactory( - 'YearnV2YieldSourceHarness', - ); - const hardhatYearnYieldSourceHarness = await YearnYieldSource.deploy(); - - await expect(hardhatYearnYieldSourceHarness.initialize( - vault.address, - underlyingToken.address - )).to.be.revertedWith("!vault not compatible") - }) + + await expect( + initializeYearnV2YieldSource(vault.address, yearnV2YieldSourceTokenDecimals), + ).to.be.revertedWith('YearnV2YieldSource/vault-not-compatible'); + }); } -}) + }); describe('create()', () => { it('should create yearnV2YieldSource', async () => { @@ -140,9 +160,7 @@ describe('yearnV2YieldSource', () => { it('should return YieldSource yShares balance', async () => { await vault.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('1000')); await vault.mock.pricePerShare.returns(toWei('2')); - expect(await yearnV2YieldSource.callStatic.balanceOfYShares()).to.equal( - toWei('1000'), - ); + expect(await yearnV2YieldSource.callStatic.balanceOfYShares()).to.equal(toWei('1000')); }); }); @@ -150,17 +168,13 @@ describe('yearnV2YieldSource', () => { it('should return Vault pricePerShare', async () => { await vault.mock.pricePerShare.returns(toWei('2')); - expect(await yearnV2YieldSource.callStatic.pricePerYShare()).to.equal( - toWei('2'), - ); + expect(await yearnV2YieldSource.callStatic.pricePerYShare()).to.equal(toWei('2')); }); }); describe('_tokenToYShares()', () => { it('should return yShares', async () => { - await underlyingToken.mock.balanceOf - .withArgs(vault.address) - .returns(toWei('1000')); + await underlyingToken.mock.balanceOf.withArgs(vault.address).returns(toWei('1000')); await vault.mock.pricePerShare.returns(toWei('2')); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); @@ -172,9 +186,7 @@ describe('yearnV2YieldSource', () => { describe('_ySharesToToken()', () => { it('should return token amount', async () => { - await underlyingToken.mock.balanceOf - .withArgs(vault.address) - .returns(toWei('1000')); + await underlyingToken.mock.balanceOf.withArgs(vault.address).returns(toWei('1000')); await vault.mock.pricePerShare.returns(toWei('2')); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); @@ -238,10 +250,8 @@ describe('yearnV2YieldSource', () => { .withArgs(yearnV2YieldSource.address, vault.address) .returns(toWei('0')); await underlyingToken.mock.approve.withArgs(vault.address, userAmount).returns(true); - await vault.mock.availableDepositLimit - .returns(ethers.utils.parseEther('1')); - await vault.mock.deposit - .returns(userAmount); + await vault.mock.availableDepositLimit.returns(ethers.utils.parseEther('1')); + await vault.mock.deposit.returns(userAmount); await yearnV2YieldSource.connect(user).supplyTokenTo(userAmount, userAddress); }; @@ -266,8 +276,7 @@ describe('yearnV2YieldSource', () => { it('should revert on error', async () => { await underlyingToken.mock.approve.withArgs(vault.address, amount).returns(true); - await vault.mock.deposit - .reverts(); + await vault.mock.deposit.reverts(); await expect( yearnV2YieldSource.supplyTokenTo(amount, yearnV2YieldSource.address), @@ -278,24 +287,23 @@ describe('yearnV2YieldSource', () => { describe('setMaxLosses()', () => { it('should set max losses', async () => { await expect(yearnV2YieldSource.connect(yieldSourceOwner).setMaxLosses(10_000)) - .to.emit(yearnV2YieldSource, "MaxLossesChanged") - .withArgs(10_000); + .to.emit(yearnV2YieldSource, 'MaxLossesChanged') + .withArgs(10_000); expect(await yearnV2YieldSource.maxLosses()).to.eq(10_000); - }) + }); it('should not allow to set losses over 100%', async () => { await expect( - yearnV2YieldSource.connect(yieldSourceOwner).setMaxLosses(11_000) - ).to.be.revertedWith('!losses set too high'); - - }) + yearnV2YieldSource.connect(yieldSourceOwner).setMaxLosses(11_000), + ).to.be.revertedWith('YearnV2YieldSource/losses-set-too-high'); + }); it('should not allow other users to set max losses', async () => { - await expect( - yearnV2YieldSource.connect(wallet2).setMaxLosses(10_000) - ).to.be.revertedWith('Ownable: caller is not the owner') + await expect(yearnV2YieldSource.connect(wallet2).setMaxLosses(10_000)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); - }) + }); describe('redeemToken()', () => { let yieldSourceOwnerBalance: BigNumber; @@ -308,16 +316,14 @@ describe('yearnV2YieldSource', () => { it('should redeem assets', async () => { await yearnV2YieldSource.mint(yieldSourceOwner.address, yieldSourceOwnerBalance); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns(toWei('0')); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('0')); await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerBalance); await vault.mock.pricePerShare.returns(toWei('1')); - await vault.mock.maxAvailableShares - .returns(redeemAmount); + await vault.mock.maxAvailableShares.returns(redeemAmount); + await vault.mock['withdraw(uint256,address)'] .withArgs(redeemAmount, yearnV2YieldSource.address) .returns(redeemAmount); @@ -327,12 +333,12 @@ describe('yearnV2YieldSource', () => { .withArgs(yieldSourceOwner.address, redeemAmount) .returns(true); - const balanceAfter = await vault.balanceOf(yearnV2YieldSource.address) + const balanceAfter = await vault.balanceOf(yearnV2YieldSource.address); const balanceDiff = yieldSourceOwnerBalance.sub(balanceAfter); await underlyingToken.mock.transfer - .withArgs(yieldSourceOwner.address, balanceDiff) - .returns(true); + .withArgs(yieldSourceOwner.address, balanceDiff) + .returns(true); await yearnV2YieldSource.connect(yieldSourceOwner).redeemToken(redeemAmount); @@ -343,19 +349,16 @@ describe('yearnV2YieldSource', () => { it('should redeem assets with maxLosses set', async () => { await yearnV2YieldSource.mint(yieldSourceOwner.address, yieldSourceOwnerBalance); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns(toWei('0')); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('0')); await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerBalance); await vault.mock.pricePerShare.returns(toWei('1')); - await vault.mock.maxAvailableShares - .returns(redeemAmount); + await vault.mock.maxAvailableShares.returns(redeemAmount); await vault.mock['withdraw(uint256,address,uint256)'] - .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) - .returns(redeemAmount); + .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) + .returns(redeemAmount); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); await underlyingToken.mock.transfer @@ -364,12 +367,12 @@ describe('yearnV2YieldSource', () => { await yearnV2YieldSource.connect(yieldSourceOwner).setMaxLosses(10_000); - const balanceAfter = await vault.balanceOf(yearnV2YieldSource.address) + const balanceAfter = await vault.balanceOf(yearnV2YieldSource.address); const balanceDiff = yieldSourceOwnerBalance.sub(balanceAfter); await underlyingToken.mock.transfer - .withArgs(yieldSourceOwner.address, balanceDiff) - .returns(true); + .withArgs(yieldSourceOwner.address, balanceDiff) + .returns(true); await yearnV2YieldSource.connect(yieldSourceOwner).redeemToken(redeemAmount); @@ -383,19 +386,14 @@ describe('yearnV2YieldSource', () => { .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerBalance); await vault.mock.pricePerShare.returns(toWei('1')); - await vault.mock.maxAvailableShares - .returns(redeemAmount); + await vault.mock.maxAvailableShares.returns(redeemAmount); + await vault.mock['withdraw(uint256,address)'] .withArgs(redeemAmount, yearnV2YieldSource.address) .returns(redeemAmount); - await vault.mock.withdraw - .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) - .returns(redeemAmount); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns('0'); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns('0'); await underlyingToken.mock.transfer .withArgs(yieldSourceOwner.address, redeemAmount) .returns(true); @@ -412,25 +410,20 @@ describe('yearnV2YieldSource', () => { await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) .returns(yieldSourceOwnerLowBalance); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns(toWei('0')); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('0')); await vault.mock.pricePerShare.returns(toWei('1')); await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); - await vault.mock.maxAvailableShares - .returns(redeemAmount); + await vault.mock.maxAvailableShares.returns(redeemAmount); await vault.mock.withdraw - .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) - .returns(redeemAmount); + .withArgs(redeemAmount, yearnV2YieldSource.address, 10_000) + .returns(redeemAmount); await vault.mock['withdraw(uint256,address)'] .withArgs(redeemAmount,yearnV2YieldSource.address) .returns(redeemAmount); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns('0'); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns('0'); await underlyingToken.mock.transfer .withArgs(yieldSourceOwner.address, yieldSourceOwnerLowBalance) .returns(true); @@ -451,16 +444,10 @@ describe('yearnV2YieldSource', () => { it('should sponsor Yield Source', async () => { const wallet2Amount = toWei('100'); await yearnV2YieldSource.mint(wallet2.address, wallet2Amount); - await vault.mock.availableDepositLimit - .returns(amount); - await vault.mock.pricePerShare - .returns(toWei('1')); - await vault.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns(toWei('500')); - await underlyingToken.mock.balanceOf - .withArgs(yearnV2YieldSource.address) - .returns(toWei('0')); + await vault.mock.availableDepositLimit.returns(amount); + await vault.mock.pricePerShare.returns(toWei('1')); + await vault.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('500')); + await underlyingToken.mock.balanceOf.withArgs(yearnV2YieldSource.address).returns(toWei('0')); await underlyingToken.mock.transferFrom .withArgs(yieldSourceOwner.address, yearnV2YieldSource.address, amount) .returns(true); @@ -468,9 +455,8 @@ describe('yearnV2YieldSource', () => { .withArgs(yearnV2YieldSource.address, vault.address) .returns(toWei('0')); await underlyingToken.mock.approve.withArgs(vault.address, amount).returns(true); - await vault.mock.deposit - .returns(amount); - await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS) + await vault.mock.deposit.returns(amount); + await vault.mock.decimals.returns(UNDERLYING_TOKEN_DECIMALS); await yearnV2YieldSource.connect(yieldSourceOwner).sponsor(amount); await vault.mock.balanceOf .withArgs(yearnV2YieldSource.address) @@ -488,8 +474,7 @@ describe('yearnV2YieldSource', () => { .withArgs(yearnV2YieldSource.address, vault.address) .returns(toWei('0')); await underlyingToken.mock.approve.withArgs(vault.address, amount).returns(true); - await vault.mock.deposit - .reverts(); + await vault.mock.deposit.reverts(); await expect(yearnV2YieldSource.connect(yieldSourceOwner).sponsor(amount)).to.be.revertedWith( '', diff --git a/yarn.lock b/yarn.lock index 9bc631f..ff1466d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -842,6 +842,15 @@ __metadata: languageName: node linkType: hard +"@pooltogether/pooltogether-proxy-factory@npm:1.0.0-beta.3": + version: 1.0.0-beta.3 + resolution: "@pooltogether/pooltogether-proxy-factory@npm:1.0.0-beta.3" + dependencies: + "@openzeppelin/contracts-upgradeable": 3.4.1 + checksum: 5be9b261127188536d075d3b226933b99e32e0378b66da94722fbd52b1173ee4f7cbce31ea385df16c9a138b7f5e2280e9b227a1e944023edc8ec4b384260fed + languageName: node + linkType: hard + "@pooltogether/pooltogether-rng-contracts@npm:1.0.0": version: 1.0.0 resolution: "@pooltogether/pooltogether-rng-contracts@npm:1.0.0" @@ -875,6 +884,7 @@ __metadata: "@openzeppelin/hardhat-upgrades": 1.6.0 "@pooltogether/fixed-point": 1.0.0 "@pooltogether/pooltogether-contracts": 3.3.6 + "@pooltogether/pooltogether-proxy-factory": 1.0.0-beta.3 "@pooltogether/pooltogether-rng-contracts": 1.1.1 "@pooltogether/yield-source-interface": 1.0.1 "@studydefi/money-legos": 2.4.1 @@ -891,6 +901,7 @@ __metadata: ethers: 5.0.32 hardhat: 2.1.1 hardhat-abi-exporter: 2.1.2 + hardhat-dependency-compiler: 1.1.1 hardhat-deploy: 0.7.0-beta.47 hardhat-deploy-ethers: 0.3.0-beta.7 hardhat-gas-reporter: 1.0.4 @@ -6387,6 +6398,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"hardhat-dependency-compiler@npm:1.1.1": + version: 1.1.1 + resolution: "hardhat-dependency-compiler@npm:1.1.1" + peerDependencies: + hardhat: ^2.0.0 + checksum: 835019a2b4cc107c1eb45a9fafdad44cb22bad4109ba9227987d3df0db5d4f1ecdef63d9610723411c80479028b88c463f3196261669792eca83642d2c0d4d04 + languageName: node + linkType: hard + "hardhat-deploy-ethers@npm:0.3.0-beta.7": version: 0.3.0-beta.7 resolution: "hardhat-deploy-ethers@npm:0.3.0-beta.7" From e68cb91d9d536c76872b3c270b84011f7bb7f48a Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Thu, 1 Jul 2021 15:33:51 +0200 Subject: [PATCH 07/15] feat(deploy): update deploy script --- Constant.ts | 9 +- deploy/deploy.ts | 194 +++++++++++++-------- hardhat.network.ts | 1 - helpers.ts | 37 ++++ scripts/fork/createYearnV2PrizePool.ts | 84 +++++---- scripts/fork/distributeEtherFromBinance.ts | 18 +- scripts/fork/impersonateAccounts.ts | 14 +- scripts/helpers.ts | 4 - 8 files changed, 231 insertions(+), 130 deletions(-) create mode 100644 helpers.ts delete mode 100644 scripts/helpers.ts diff --git a/Constant.ts b/Constant.ts index 7a1bdfa..99a0f2d 100644 --- a/Constant.ts +++ b/Constant.ts @@ -1,10 +1,5 @@ -export const ADAI_ADDRESS_KOVAN = '0xdCf0aF9e59C002FA3AA091a46196b37530FD48a8'; -export const LENDING_POOL_ADDRESSES_PROVIDER_REGISTRY_ADDRESS_KOVAN = - '0x1E40B561EC587036f9789aF83236f057D1ed2A90'; - export const USDC_VAULT_ADDRESS_MAINNET = '0x5f18C75AbDAe578b483E5F43f12a39cF75b973a9'; -export const USDC_ADDRESS_MAINNET = - '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; +export const USDC_ADDRESS_MAINNET = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'; export const DAI_VAULT_ADDRESS_MAINNET = '0x19D3364A399d251E894aC732651be8B0E4e85001'; export const DAI_ADDRESS_MAINNET = '0x6B175474E89094C44Da98b954EedeAC495271d0F'; @@ -14,4 +9,4 @@ export const BINANCE7_ADDRESS = '0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8'; export const DAI_RICH_ADDRESS = '0xF977814e90dA44bFA03b6295A0616a897441aceC'; export const USDC_RICH_ADDRESS = '0x55FE002aefF02F77364de339a1292923A15844B8'; -export const YEARN_GOV_ADDRESS = '0x0'; \ No newline at end of file +export const YEARN_GOV_ADDRESS = '0x0'; diff --git a/deploy/deploy.ts b/deploy/deploy.ts index f78c3e3..ccb8de0 100644 --- a/deploy/deploy.ts +++ b/deploy/deploy.ts @@ -1,102 +1,150 @@ -import chalk from 'chalk'; +import { Contract } from 'ethers'; +import { getChainByChainId } from 'evm-chains'; +import { writeFileSync } from 'fs'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { DeployFunction, DeployResult } from 'hardhat-deploy/types'; +import { DeployFunction, DeploymentSubmission, DeployResult } from 'hardhat-deploy/types'; -const displayLogs = !process.env.HIDE_DEPLOY_LOG; - -function dim(logMessage: string) { - if (displayLogs) { - console.log(chalk.dim(logMessage)); - } -} +import { DAI_VAULT_ADDRESS_MAINNET } from '../Constant'; +import { action, alert, info, success, isTestEnvironment as isTestEnvironmentHelper } from '../helpers'; -function cyan(logMessage: string) { - if (displayLogs) { - console.log(chalk.cyan(logMessage)); - } -} - -function yellow(logMessage: string) { - if (displayLogs) { - console.log(chalk.yellow(logMessage)); - } -} - -function green(logMessage: string) { - if (displayLogs) { - console.log(chalk.green(logMessage)); - } -} +const displayLogs = !process.env.HIDE_DEPLOY_LOG; function displayResult(name: string, result: DeployResult) { if (!result.newlyDeployed) { - yellow(`Re-used existing ${name} at ${result.address}`); + alert(`Re-used existing ${name} at ${result.address}`); } else { - green(`${name} deployed at ${result.address}`); + success(`${name} deployed at ${result.address}`); } } -const chainName = (chainId: number) => { - switch (chainId) { - case 1: - return 'Mainnet'; - case 3: - return 'Ropsten'; - case 4: - return 'Rinkeby'; - case 5: - return 'Goerli'; - case 42: - return 'Kovan'; - case 77: - return 'POA Sokol'; - case 99: - return 'POA'; - case 100: - return 'xDai'; - case 137: - return 'Matic'; - case 31337: - return 'HardhatEVM'; - case 80001: - return 'Matic (Mumbai)'; - default: - return 'Unknown'; - } -}; - const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const { getNamedAccounts, deployments, getChainId, ethers } = hre; + info('\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); + info('PoolTogether YearnV2 Yield Source - Deploy Script'); + info('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n'); + + const { artifacts, getNamedAccounts, deployments, getChainId, ethers, network } = hre; const { deploy } = deployments; + const { getContractAt, provider } = ethers; - let { deployer, admin } = await getNamedAccounts(); + const outputDirectory = `./deployments/${network.name}`; + + let { deployer, multisig } = await getNamedAccounts(); const chainId = parseInt(await getChainId()); // 31337 is unit testing, 1337 is for coverage - const isTestEnvironment = chainId === 31337 || chainId === 1337; + const isNotTestChainId = chainId !== 31337 && chainId !== 1337; + const networkName = isNotTestChainId ? getChainByChainId(chainId)?.network : 'Test'; + const isTestEnvironment = isTestEnvironmentHelper(network); + + info(`Network: ${networkName} (${isTestEnvironment ? 'local' : 'remote'})`); + info(`Deployer: ${deployer}`); + + if (!multisig) { + alert( + `Multisig address not defined for network ${networkName}, falling back to deployer: ${deployer}`, + ); + multisig = deployer; + } else { + info(`Multisig: ${multisig}`); + } - const signer = ethers.provider.getSigner(deployer); + action(`Deploying YearnV2YieldSource...`); + const yearnV2YieldSourceResult: DeployResult = await deploy('YearnV2YieldSource', { + from: deployer, + skipIfAlreadyDeployed: true, + }); - dim('\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'); - dim('PoolTogether YearnV2 Yield Source - Deploy Script'); - dim('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n'); + displayResult('YearnV2YieldSource', yearnV2YieldSourceResult); - dim(`network: ${chainName(chainId)} (${isTestEnvironment ? 'local' : 'remote'})`); - dim(`deployer: ${deployer}`); + const yearnV2YieldSourceContract = await getContractAt( + 'YearnV2YieldSource', + yearnV2YieldSourceResult.address, + ); - if (!admin) { - admin = signer._address; + if (yearnV2YieldSourceContract.newlyDeployed) { + action('Calling mockInitialize()'); + await yearnV2YieldSourceContract.freeze(); + success('mockInitialize called successfully'); } - dim(`deployer: ${admin}`); + let proxyFactoryContract: Contract; - cyan(`\nDeploying YearnV2YieldSourceProxyFactory...`); - const yearnV2YieldSourceProxyFactoryResult = await deploy('YearnV2YieldSourceProxyFactory', { - from: deployer, + if (isTestEnvironment) { + action(`TestEnvironment detected, deploying a local GenericProxyFactory`); + + const genericProxyFactoryResult: DeployResult = await deploy('GenericProxyFactory', { + from: deployer, + skipIfAlreadyDeployed: true, + }); + + proxyFactoryContract = await getContractAt( + 'GenericProxyFactory', + genericProxyFactoryResult.address, + ); + + success(`Deployed a local GenericProxyFactory at ${proxyFactoryContract.address}`); + } else { + let { genericProxyFactory } = await getNamedAccounts(); + proxyFactoryContract = await getContractAt('GenericProxyFactory', genericProxyFactory); + success(`GenericProxyFactory deployed at ${proxyFactoryContract.address}`); + } + + action(`Deploying YearnV2DAIYieldSource...`); + const yearnV2YieldSourceArtifact = await artifacts.readArtifact('YearnV2YieldSource'); + const yearnV2YieldSourceABI = yearnV2YieldSourceArtifact.abi; + + const yearnV2YieldSourceInterface = new ethers.utils.Interface(yearnV2YieldSourceABI); + + const constructorArgs = yearnV2YieldSourceInterface.encodeFunctionData( + yearnV2YieldSourceInterface.getFunction('initialize'), + [ + DAI_VAULT_ADDRESS_MAINNET, + 18, + 'yvysDAI', + 'PoolTogether Yearn V2 Vault DAI Yield Source', + multisig, + ], + ); + + const yearnV2DAIYieldSourceResult = await proxyFactoryContract.create( + yearnV2YieldSourceContract.address, + constructorArgs, + ); + + const yearnV2DAIYieldSourceReceipt = await provider.getTransactionReceipt( + yearnV2DAIYieldSourceResult.hash, + ); + + const yearnV2DAIYieldSourceEvent = proxyFactoryContract.interface.parseLog( + yearnV2DAIYieldSourceReceipt.logs[0], + ); + + const yearnV2DAIYieldSourceAddress = yearnV2DAIYieldSourceEvent.args.created; + + success(`YearnV2DAIYieldSource deployed at ${yearnV2DAIYieldSourceAddress}`); + + action('Saving deployments file for Yearn V2 DAI'); + + const deploymentSubmission: DeploymentSubmission = { + address: yearnV2DAIYieldSourceAddress, + abi: yearnV2YieldSourceABI, + receipt: yearnV2DAIYieldSourceReceipt, + transactionHash: yearnV2DAIYieldSourceReceipt.transactionHash, + args: [constructorArgs], + bytecode: `${await provider.getCode(yearnV2DAIYieldSourceAddress)}`, + }; + + const outputFile = `${outputDirectory}/AaveDAISwappableYieldSource.json`; + + action(`Writing to ${outputFile}...`); + writeFileSync(outputFile, JSON.stringify(deploymentSubmission, null, 2), { + encoding: 'utf8', + flag: 'w', }); - displayResult('YearnV2YieldSourceProxyFactory', yearnV2YieldSourceProxyFactoryResult); + + await deployments.save('AaveDAISwappableYieldSource', deploymentSubmission); }; export default deployFunction; diff --git a/hardhat.network.ts b/hardhat.network.ts index e608366..205660c 100644 --- a/hardhat.network.ts +++ b/hardhat.network.ts @@ -28,7 +28,6 @@ if (alchemyUrl && process.env.FORK_ENABLED && mnemonic) { }, }; } else { - console.log(alchemyUrl, process.env.FORK_ENABLED, mnemonic) networks.hardhat = { allowUnlimitedContractSize: true, }; diff --git a/helpers.ts b/helpers.ts new file mode 100644 index 0000000..60c015e --- /dev/null +++ b/helpers.ts @@ -0,0 +1,37 @@ +import chalk from 'chalk'; +import { HardhatRuntimeEnvironment, Network } from 'hardhat/types'; + +const displayLogs = !process.env.HIDE_DEPLOY_LOG; + +export const action = (message: string) => { + if (displayLogs) { + console.log(chalk.cyan(message)); + } +}; + +export const alert = (message: string) => { + if (displayLogs) { + console.log(chalk.yellow(message)); + } +}; + +export const info = (message: string) => { + if (displayLogs) { + console.log(chalk.dim(message)); + } +}; + +export const success = (message: string) => { + if (displayLogs) { + console.log(chalk.green(message)); + } +}; + +export const increaseTime = async (hre: HardhatRuntimeEnvironment, time: number) => { + let provider = hre.ethers.provider; + await provider.send('evm_increaseTime', [time]); + await provider.send('evm_mine', []); +}; + +export const isTestEnvironment = (network: Network) => + network?.config ? network.config?.tags?.[0] === 'test' : network?.tags?.test; diff --git a/scripts/fork/createYearnV2PrizePool.ts b/scripts/fork/createYearnV2PrizePool.ts index d9396f5..17a02f0 100644 --- a/scripts/fork/createYearnV2PrizePool.ts +++ b/scripts/fork/createYearnV2PrizePool.ts @@ -8,49 +8,69 @@ import { dai, usdc } from '@studydefi/money-legos/erc20'; import { task } from 'hardhat/config'; -import { - USDC_ADDRESS_MAINNET, - USDC_VAULT_ADDRESS_MAINNET, -} from '../../Constant'; +import { USDC_VAULT_ADDRESS_MAINNET } from '../../Constant'; -import { info, success } from '../helpers'; +import { action, info, success } from '../../helpers'; export default task('fork:create-yearnV2-prize-pool', 'Create YearnV2 Prize Pool').setAction( async (taskArguments, hre) => { - const { ethers } = hre; - const { constants, provider, getContractAt, getContractFactory, getSigners, utils } = ethers; - const [contractsOwner] = await getSigners(); + const { artifacts, deployments, ethers, getNamedAccounts } = hre; + + const { constants, provider, getContractAt, utils } = ethers; const { AddressZero } = constants; - const { getBlock, getBlockNumber, getTransactionReceipt, send } = provider; + const { getBlock, getBlockNumber, getSigner, getTransactionReceipt, send } = provider; + const { Interface } = utils; async function increaseTime(time: number) { await send('evm_increaseTime', [time]); await send('evm_mine', []); } - info('Deploying YearnV2YieldSourceProxyFactory...'); + const { deployer, genericProxyFactory } = await getNamedAccounts(); + const contractsOwner = getSigner(deployer); + + const { YearnV2YieldSource: yearnV2YieldSourceProxyContract } = await deployments.all(); - const YearnV2YieldSourceProxyFactory = await getContractFactory('YearnV2YieldSourceProxyFactory'); + info(`Deployer: ${deployer}`); - const hardhatYearnV2YieldSourceProxyFactory = (await YearnV2YieldSourceProxyFactory.deploy()); + action('Deploying YearnV2YieldSource...'); + + const genericProxyFactoryContract = await getContractAt( + 'GenericProxyFactory', + genericProxyFactory, + ); - const yearnV2YieldSourceProxyFactoryTx = await hardhatYearnV2YieldSourceProxyFactory.create( - USDC_VAULT_ADDRESS_MAINNET, - USDC_ADDRESS_MAINNET + const yearnV2YieldSourceArtifact = await artifacts.readArtifact('YearnV2YieldSource'); + const yearnV2YieldSourceABI = yearnV2YieldSourceArtifact.abi; + const yearnV2YieldSourceInterface = new Interface(yearnV2YieldSourceABI); + + const yearnV2YieldSourceConstructorArgs = yearnV2YieldSourceInterface.encodeFunctionData( + yearnV2YieldSourceInterface.getFunction('initialize'), + [ + USDC_VAULT_ADDRESS_MAINNET, + 18, + 'yvysDAI', + 'PoolTogether Yearn V2 Vault DAI Yield Source', + contractsOwner._address, + ], ); - const yearnV2YieldSourceProxyFactoryReceipt = await getTransactionReceipt( - yearnV2YieldSourceProxyFactoryTx.hash, + const createYearnV2YieldSourceResult = await genericProxyFactoryContract.create( + yearnV2YieldSourceProxyContract.address, + yearnV2YieldSourceConstructorArgs, ); - const proxyCreatedEvent = hardhatYearnV2YieldSourceProxyFactory.interface.parseLog( - yearnV2YieldSourceProxyFactoryReceipt.logs[0], + + const createYearnV2YieldSourceReceipt = await getTransactionReceipt( + createYearnV2YieldSourceResult.hash, ); - const yearnV2YieldSource = (await getContractAt( - 'YearnV2YieldSource', - proxyCreatedEvent.args.proxy, - contractsOwner, - )); + const createYearnV2YieldSourceEvent = genericProxyFactoryContract.interface.parseLog( + createYearnV2YieldSourceReceipt.logs[0], + ); + + const yearnV2YieldSourceAddress = createYearnV2YieldSourceEvent.args.created; + + success(`Deployed Yearn V2 Yield Source! ${yearnV2YieldSourceAddress}`); info('Deploying YearnV2YieldSourcePrizePool...'); @@ -61,7 +81,7 @@ export default task('fork:create-yearnV2-prize-pool', 'Create YearnV2 Prize Pool ); const yearnV2YieldSourcePrizePoolConfig = { - yieldSource: yearnV2YieldSource.address, + yieldSource: yearnV2YieldSourceAddress, maxExitFeeMantissa: ethers.utils.parseUnits('0.5', 18), maxTimelockDuration: 1000, }; @@ -121,18 +141,18 @@ export default task('fork:create-yearnV2-prize-pool', 'Create YearnV2 Prize Pool const usdcAmount = ethers.utils.parseUnits('1000', 6); const usdcContract = await getContractAt(usdc.abi, usdc.address, contractsOwner); await usdcContract.approve(prizePool.address, usdcAmount); - + info(`Depositing ${ethers.utils.formatUnits(usdcAmount, 6)} USDC...`); await prizePool.depositTo( - contractsOwner.address, + contractsOwner._address, usdcAmount, await prizeStrategy.ticket(), AddressZero, ); success('Deposited USDC!'); - + info(`Prize strategy owner: ${await prizeStrategy.owner()}`); await increaseTime(30); @@ -167,10 +187,14 @@ export default task('fork:create-yearnV2-prize-pool', 'Create YearnV2 Prize Pool const ticketAddress = await prizeStrategy.ticket(); const ticket = await getContractAt(ControlledToken, ticketAddress, contractsOwner); const withdrawalAmount = ethers.utils.parseUnits('100', 6); - const earlyExitFee = await prizePool.callStatic.calculateEarlyExitFee(contractsOwner.address, ticket.address, withdrawalAmount); + const earlyExitFee = await prizePool.callStatic.calculateEarlyExitFee( + contractsOwner._address, + ticket.address, + withdrawalAmount, + ); const withdrawTx = await prizePool.withdrawInstantlyFrom( - contractsOwner.address, + contractsOwner._address, withdrawalAmount, ticket.address, earlyExitFee.exitFee, diff --git a/scripts/fork/distributeEtherFromBinance.ts b/scripts/fork/distributeEtherFromBinance.ts index 4369131..51f3e67 100644 --- a/scripts/fork/distributeEtherFromBinance.ts +++ b/scripts/fork/distributeEtherFromBinance.ts @@ -1,9 +1,8 @@ -import { dai, usdc } from '@studydefi/money-legos/erc20'; - +import { usdc } from '@studydefi/money-legos/erc20'; import { task } from 'hardhat/config'; -import { BINANCE_ADDRESS, BINANCE7_ADDRESS, DAI_RICH_ADDRESS } from '../../Constant'; -import { info, success } from '../helpers'; +import { BINANCE7_ADDRESS, DAI_RICH_ADDRESS } from '../../Constant'; +import { info, success } from '../../helpers'; export default task( 'fork:distribute-ether-from-binance', @@ -12,16 +11,19 @@ export default task( info('Gathering funds from Binance...'); const { getNamedAccounts, ethers } = hre; - const { provider, getContractAt } = ethers; + const { provider, getContractAt, getSigners } = ethers; const { deployer } = await getNamedAccounts(); + const [contractsOwner, yieldSourceOwner] = await getSigners(); - const binance = provider.getUncheckedSigner(BINANCE_ADDRESS); - const binance7 = provider.getUncheckedSigner(BINANCE7_ADDRESS); + const binance = provider.getUncheckedSigner(BINANCE7_ADDRESS); + const daiRichSigner = provider.getUncheckedSigner(DAI_RICH_ADDRESS); - const usdcContract = await getContractAt(usdc.abi, usdc.address, binance7); + const usdcContract = await getContractAt(usdc.abi, usdc.address, daiRichSigner); const recipients: { [key: string]: string } = { ['Deployer']: deployer, + ['contractsOwner']: contractsOwner.address, + ['yieldSourceOwner']: yieldSourceOwner.address, }; const keys = Object.keys(recipients); diff --git a/scripts/fork/impersonateAccounts.ts b/scripts/fork/impersonateAccounts.ts index c983d53..2c6304f 100644 --- a/scripts/fork/impersonateAccounts.ts +++ b/scripts/fork/impersonateAccounts.ts @@ -1,7 +1,12 @@ import { task } from 'hardhat/config'; -import { BINANCE_ADDRESS, BINANCE7_ADDRESS, DAI_RICH_ADDRESS, YEARN_GOV_ADDRESS } from '../../Constant'; -import { info, success } from '../helpers'; +import { + BINANCE_ADDRESS, + BINANCE7_ADDRESS, + DAI_RICH_ADDRESS, + YEARN_GOV_ADDRESS, +} from '../../Constant'; +import { info, success } from '../../helpers'; export default task('fork:impersonate-accounts', 'Impersonate accounts').setAction( async (taskArguments, hre) => { @@ -22,11 +27,6 @@ export default task('fork:impersonate-accounts', 'Impersonate accounts').setActi params: [BINANCE7_ADDRESS], }); - // await hre.network.provider.request({ - // method: 'hardhat_impersonateAccount', - // params: [YEARN_GOV_ADDRESS], - // }) - await hre.network.provider.request({ method: 'hardhat_impersonateAccount', params: [DAI_RICH_ADDRESS], diff --git a/scripts/helpers.ts b/scripts/helpers.ts deleted file mode 100644 index 36a90d0..0000000 --- a/scripts/helpers.ts +++ /dev/null @@ -1,4 +0,0 @@ -import chalk from 'chalk'; - -export const info = (message: string) => console.log(chalk.dim(message)); -export const success = (message: string) => console.log(chalk.green(message)); From dc38be52b8d53b50b6334fed88cc9884dd0d0a88 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Thu, 1 Jul 2021 15:35:02 +0200 Subject: [PATCH 08/15] chore(lint): setup prettier and lint --- .gitignore | 1 + .prettierignore | 1 + .prettierrc | 6 + README.md | 4 +- deploy/deploy.ts | 8 +- hardhat.config.ts | 2 +- package.json | 20 +- tsconfig.json | 3 +- yarn.lock | 2281 ++++++++++++++++++++++++++------------------- 9 files changed, 1366 insertions(+), 960 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc diff --git a/.gitignore b/.gitignore index 86d654d..d6b829a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ abis artifacts cache +deployments/localhost/ node_modules types deployments/localhost/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..64dba6c --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +types diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0e992e5 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "tabWidth": 2 +} diff --git a/README.md b/README.md index 1c5c747..b4280c1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@
-# PoolTogether YearnV2 Yield Source 👻 +# PoolTogether YearnV2 Yield Source [![Coverage Status](https://coveralls.io/repos/github/jmonteer/pooltogether-yearnv2-yield-source/badge.svg?branch=master)](https://coveralls.io/github/jmonteer/pooltogether-yearnv2-yield-source?branch=master) [![built-with openzeppelin](https://img.shields.io/badge/built%20with-OpenZeppelin-3677FF)](https://docs.openzeppelin.com/) [![Coveralls](https://github.com/jmonteer/pooltogether-yearnv2-yield-source/actions/workflows/main.yml/badge.svg)](https://github.com/jmonteer/pooltogether-yearnv2-yield-source/actions/workflows/main.yml) @@ -89,7 +89,7 @@ Start Mainnet fork in a terminal window with the command: yarn start-fork ``` -In another window, start the scripts to deploy and create a YearnV2 Yield Source Prize Pool, deposit USDC into it, send some profit to the Vault, award the prize and withdraw. +In another window, start the scripts to deploy and create a YearnV2 Yield Source Prize Pool, deposit USDC into it, send some profit to the Vault, award the prize and withdraw. ``` yarn deploy-fork && yarn run-fork diff --git a/deploy/deploy.ts b/deploy/deploy.ts index ccb8de0..8a13773 100644 --- a/deploy/deploy.ts +++ b/deploy/deploy.ts @@ -6,7 +6,13 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction, DeploymentSubmission, DeployResult } from 'hardhat-deploy/types'; import { DAI_VAULT_ADDRESS_MAINNET } from '../Constant'; -import { action, alert, info, success, isTestEnvironment as isTestEnvironmentHelper } from '../helpers'; +import { + action, + alert, + info, + success, + isTestEnvironment as isTestEnvironmentHelper, +} from '../helpers'; const displayLogs = !process.env.HIDE_DEPLOY_LOG; diff --git a/hardhat.config.ts b/hardhat.config.ts index 70c603d..5f2debd 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -68,7 +68,7 @@ const config: HardhatUserConfig = { }, dependencyCompiler: { paths: ['@pooltogether/pooltogether-proxy-factory/contracts/GenericProxyFactory.sol'], - } + }, }; verifyTask; diff --git a/package.json b/package.json index 8b20907..483d68d 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,11 @@ "author": "jmonteer ", "license": "GPL-3.0", "scripts": { + "clean": "rm -rf cache/ artifacts/", "compile": "hardhat --show-stack-traces --max-memory 8192 compile", "coverage": "HIDE_DEPLOY_LOG=true OPTIMIZER_DISABLED=true hardhat coverage", "deploy": "hardhat deploy --write true --network", + "deploy-fork": "FORK_ENABLED=true; rm -rf deployments/localhost && yarn deploy localhost", "etherscan-verify": "hardhat etherscan:verify --network", "format": "prettier --config .prettierrc --write **/*.ts", "format:file": "prettier --config .prettierrc --write", @@ -36,31 +38,33 @@ "@nomiclabs/hardhat-waffle": "2.0.1", "@openzeppelin/hardhat-upgrades": "1.6.0", "@pooltogether/pooltogether-contracts": "3.3.6", + "@pooltogether/pooltogether-proxy-factory": "1.0.0-beta.3", "@pooltogether/pooltogether-rng-contracts": "1.1.1", "@studydefi/money-legos": "2.4.1", - "@typechain/ethers-v5": "6.0.2", - "@typechain/hardhat": "1.0.1", + "@typechain/ethers-v5": "7.0.1", + "@typechain/hardhat": "2.1.0", "@types/chai": "4.2.15", "@types/debug": "4.1.5", "@types/mocha": "8.2.1", - "@types/node": "14.14.32", + "@types/node": "15.12.5", "chai": "4.3.4", "chalk": "4.1.0", "debug": "4.3.1", "ethereum-waffle": "3.3.0", - "ethers": "5.0.32", + "ethers": "5.4.0", + "evm-chains": "0.2.0", "hardhat": "2.1.1", - "hardhat-abi-exporter": "2.1.2", + "hardhat-abi-exporter": "2.2.1", "hardhat-dependency-compiler": "1.1.1", - "hardhat-deploy": "0.7.0-beta.47", - "hardhat-deploy-ethers": "0.3.0-beta.7", + "hardhat-deploy": "0.8.9", + "hardhat-deploy-ethers": "0.3.0-beta.10", "hardhat-gas-reporter": "1.0.4", "prettier": "2.2.1", "solhint": "3.3.6", "solidity-coverage": "0.7.16", "ts-generator": "0.1.1", "ts-node": "9.1.1", - "typechain": "4.0.3", + "typechain": "5.1.1", "typescript": "4.2.3" } } diff --git a/tsconfig.json b/tsconfig.json index bc97d73..2b999cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ "./deploy", "./scripts", "./test", - "types/**/*" + "types/**/*", + "Constant.ts" ] } diff --git a/yarn.lock b/yarn.lock index ff1466d..3da1a89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6,29 +6,29 @@ __metadata: cacheKey: 7 "@babel/code-frame@npm:^7.0.0": - version: 7.12.13 - resolution: "@babel/code-frame@npm:7.12.13" + version: 7.14.5 + resolution: "@babel/code-frame@npm:7.14.5" dependencies: - "@babel/highlight": ^7.12.13 - checksum: 471532bb7cb4a300bd1a3201e75e7c0c83ebfb4e0e6610fdb53270521505d7efe0961258de61e7b1970ef3092a97ed675248ee1a44597912a1f61f903d85ef41 + "@babel/highlight": ^7.14.5 + checksum: 48c584cad9aa05ff16fa965b4572deae0343d51abe658a2fb72640e924c229d47f71f880a474cc1e14e613f88a4bfd576609b1e0d8073bbc4e50e60f7e678626 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.12.11": - version: 7.12.11 - resolution: "@babel/helper-validator-identifier@npm:7.12.11" - checksum: 18de432203264b501db2690b53370a4289dc56084f5a2c66de624b159ee28b8abaeb402b2b7584296d9261645d91ddb6bfd21125d3ffd9bf02e9262e77baf3d2 +"@babel/helper-validator-identifier@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/helper-validator-identifier@npm:7.14.5" + checksum: 778312189a7c5228daac9f7767795a74f11d1eac595ca38bfea248324666459b24aaae6aef43c957ce01bbe61672039ea1c08c5623067c3701beeb1bb1f1ee33 languageName: node linkType: hard -"@babel/highlight@npm:^7.12.13": - version: 7.13.10 - resolution: "@babel/highlight@npm:7.13.10" +"@babel/highlight@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/highlight@npm:7.14.5" dependencies: - "@babel/helper-validator-identifier": ^7.12.11 + "@babel/helper-validator-identifier": ^7.14.5 chalk: ^2.0.0 js-tokens: ^4.0.0 - checksum: 8f23d3b728422713bfab45bee1e7584f2a3d2e20c9c4d6153312b898c82e776bdc5b1b2afaf9433fddb21d70417f5b477c0bb1a48613324fd761117e19a5702b + checksum: a1ed599c2655eb0b13134875ba2626b547a2634940e532c86a02896fb403f197cd56d1adaa474c7859ae4f53fabc5f1621e90770e75d235ca3350952ba78aa5c languageName: node linkType: hard @@ -70,12 +70,12 @@ __metadata: linkType: hard "@ethereum-waffle/chai@npm:^3.3.0": - version: 3.3.1 - resolution: "@ethereum-waffle/chai@npm:3.3.1" + version: 3.4.0 + resolution: "@ethereum-waffle/chai@npm:3.4.0" dependencies: - "@ethereum-waffle/provider": ^3.3.1 + "@ethereum-waffle/provider": ^3.4.0 ethers: ^5.0.0 - checksum: a975e3e333fb5fdebaaee8e74408ca167fc92b7f0c3cbce7aca10216343da028c57a3fb3ff51a7e8681644d8fac73e92fe83ea33d54049362764cc6bfebf7048 + checksum: d0a06d993b84b391acae87fe31abc89e10dd5c58736dd146418a272c860972626755222c2546e09b22f64401bca72f3147d94d4997ca2e0ac76c9126c727346d languageName: node linkType: hard @@ -96,8 +96,8 @@ __metadata: linkType: hard "@ethereum-waffle/compiler@npm:^3.3.0": - version: 3.3.1 - resolution: "@ethereum-waffle/compiler@npm:3.3.1" + version: 3.4.0 + resolution: "@ethereum-waffle/compiler@npm:3.4.0" dependencies: "@resolver-engine/imports": ^0.3.3 "@resolver-engine/imports-fs": ^0.3.3 @@ -106,22 +106,22 @@ __metadata: "@types/node-fetch": ^2.5.5 ethers: ^5.0.1 mkdirp: ^0.5.1 - node-fetch: ^2.6.0 + node-fetch: ^2.6.1 solc: ^0.6.3 ts-generator: ^0.1.1 typechain: ^3.0.0 - checksum: 7ed98ff80e6485c63d92a42c91fe5a29d8b0478a615291150a3d05535240f057ba54801aee0fbfccc9043e81981cb63e8e26a46307d1d01643281cde50f27d68 + checksum: 960bc2e2ce43842e121959d8a1d10e8306130d2a858e5d704e9bcbb2c25171bd426a547a5c295767337cf52a7284c13dec0b3e294e50ef321fd17778e39bff99 languageName: node linkType: hard -"@ethereum-waffle/ens@npm:^3.2.4": - version: 3.2.4 - resolution: "@ethereum-waffle/ens@npm:3.2.4" +"@ethereum-waffle/ens@npm:^3.3.0": + version: 3.3.0 + resolution: "@ethereum-waffle/ens@npm:3.3.0" dependencies: "@ensdomains/ens": ^0.4.4 "@ensdomains/resolver": ^0.2.4 ethers: ^5.0.1 - checksum: 25a1e0c0128837f10227d2cc2fbad45aa9e3d8523ff7327996e9e3e61f7357859095633f25ebbe256a7b00b021509f1d768fc6501f8be4f2f9b4c9eb49fffd1e + checksum: 520de58c1e3ffb967a1465864c81bfd44c7d018411fe8f89c9b88c2e2d6d14487eeb6195e51dfb5ff0fb667ce3adf150fd4bf46ce91f4c3289cc3aa362565483 languageName: node linkType: hard @@ -135,12 +135,12 @@ __metadata: linkType: hard "@ethereum-waffle/mock-contract@npm:^3.2.2": - version: 3.2.2 - resolution: "@ethereum-waffle/mock-contract@npm:3.2.2" + version: 3.3.0 + resolution: "@ethereum-waffle/mock-contract@npm:3.3.0" dependencies: "@ethersproject/abi": ^5.0.1 ethers: ^5.0.1 - checksum: b075171689dcbebafe5660fdf6280b0e658cfc153fe38e9c5d880e8d84d965785282685881bce8a61e663c93889e7ef9f30d331340fc75aa30c5c71a869847b0 + checksum: f5301cf445d0a2b2abc4fec7bfd96a36635aba975edaa1ccc88ac52911fd1f5d34c7992a425d196cfb3cfe9ef8392127e7b2b074652c55ed4c8f004dd6c1ea40 languageName: node linkType: hard @@ -154,16 +154,16 @@ __metadata: languageName: node linkType: hard -"@ethereum-waffle/provider@npm:^3.3.0, @ethereum-waffle/provider@npm:^3.3.1": - version: 3.3.2 - resolution: "@ethereum-waffle/provider@npm:3.3.2" +"@ethereum-waffle/provider@npm:^3.3.0, @ethereum-waffle/provider@npm:^3.4.0": + version: 3.4.0 + resolution: "@ethereum-waffle/provider@npm:3.4.0" dependencies: - "@ethereum-waffle/ens": ^3.2.4 + "@ethereum-waffle/ens": ^3.3.0 ethers: ^5.0.1 ganache-core: ^2.13.2 patch-package: ^6.2.2 postinstall-postinstall: ^2.1.0 - checksum: 3b65d57c82f87ea5aff229e0ac15c4079fc9b412688058044e06802784ff4fcaf8309df4e4d15dfc749fcf7b45a2cc703067827a1def2debefaac849e5c7b879 + checksum: ccd153b9bfc49e770c141fac186ec7351629478c6c344f4a17322ebb04f66c22484b04c6557d0b7e0a9f96fb9875fd25097ff6ce38583ff760212d3adb8fdff6 languageName: node linkType: hard @@ -184,426 +184,446 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.0.13, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.1, @ethersproject/abi@npm:^5.0.10, @ethersproject/abi@npm:^5.0.2": - version: 5.0.13 - resolution: "@ethersproject/abi@npm:5.0.13" +"@ethersproject/abi@npm:5.0.7": + version: 5.0.7 + resolution: "@ethersproject/abi@npm:5.0.7" dependencies: - "@ethersproject/address": ^5.0.9 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/hash": ^5.0.10 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - checksum: 3db7bc471efc03ff30303e0089cec3d7277e921eca675d5241c404427731f1ea335cdcbc215c1ef8c60ecc60ba0bd2c19aee480ee4a32f1632a88901ce327d2c + "@ethersproject/address": ^5.0.4 + "@ethersproject/bignumber": ^5.0.7 + "@ethersproject/bytes": ^5.0.4 + "@ethersproject/constants": ^5.0.4 + "@ethersproject/hash": ^5.0.4 + "@ethersproject/keccak256": ^5.0.3 + "@ethersproject/logger": ^5.0.5 + "@ethersproject/properties": ^5.0.3 + "@ethersproject/strings": ^5.0.4 + checksum: 476a3c1fe7644fdb33b06e1be808b7b3fc05928dd06e5a8b7cf70d74a9bbe001fd8d0fade2132f124928cf260c43832155c004d488a6ae48420e9edb1dcc1838 languageName: node linkType: hard -"@ethersproject/abstract-provider@npm:5.0.10, @ethersproject/abstract-provider@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/abstract-provider@npm:5.0.10" +"@ethersproject/abi@npm:5.4.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.1, @ethersproject/abi@npm:^5.0.2, @ethersproject/abi@npm:^5.3.1, @ethersproject/abi@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/abi@npm:5.4.0" dependencies: - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/networks": ^5.0.7 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/transactions": ^5.0.9 - "@ethersproject/web": ^5.0.12 - checksum: 178e17b0d4c38ba1e652eb8e05260070254136dea7dbcf174e44354002201dad40bb62dcd99193eddaa626ec78216f2a19c9cfddf604fc76c5d6ae168bb5b58e + "@ethersproject/address": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/hash": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + checksum: d4a8397139bb1266c0f1f88f8ad3de459500389868b0b0f815fb00274d4833b384a440b100e4914f185762c51941cb4cc6882d06d7cf682179b634a2546ab1ad languageName: node linkType: hard -"@ethersproject/abstract-signer@npm:5.0.14, @ethersproject/abstract-signer@npm:^5.0.10, @ethersproject/abstract-signer@npm:^5.0.2": - version: 5.0.14 - resolution: "@ethersproject/abstract-signer@npm:5.0.14" +"@ethersproject/abstract-provider@npm:5.4.0, @ethersproject/abstract-provider@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/abstract-provider@npm:5.4.0" dependencies: - "@ethersproject/abstract-provider": ^5.0.8 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - checksum: f0b9f5a17716a92c4b32a18d9809d452b1054bd62442147b9b21913d7bb7a2dba7a319d7df0530cdc2062f72fe21948398ea810dc049eccb0f04b6641ccf62e1 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/networks": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 + "@ethersproject/web": ^5.4.0 + checksum: d5aaf393c7435c90df7575df304a1c577957680ebcf4dc44bda36e1786e2ec420353ee17eb4aa1a4c816c73ab3d40dc1ed88c9857358be0030efbd7633fefbc5 languageName: node linkType: hard -"@ethersproject/address@npm:5.0.11, @ethersproject/address@npm:>=5.0.0-beta.128, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.9": - version: 5.0.11 - resolution: "@ethersproject/address@npm:5.0.11" +"@ethersproject/abstract-signer@npm:5.4.0, @ethersproject/abstract-signer@npm:^5.3.0, @ethersproject/abstract-signer@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/abstract-signer@npm:5.4.0" dependencies: - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/rlp": ^5.0.7 - checksum: 478748d76e65589c21eb83321d9c206875059f0080eaec0bd57ece7d99f92b1002a3abecb71ea8d26a774010177709dc11b6d12052608e880e1ed27917c79cc7 + "@ethersproject/abstract-provider": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + checksum: 2ede2edbc1d5651b74c1c49f362113aae6be080a76d1554fd7ea248e71627d50134db567112b601f0cc01cbbdb8eea4a1b313602575d1d440c9c056cf00a39b9 languageName: node linkType: hard -"@ethersproject/base64@npm:5.0.9, @ethersproject/base64@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/base64@npm:5.0.9" +"@ethersproject/address@npm:5.4.0, @ethersproject/address@npm:>=5.0.0-beta.128, @ethersproject/address@npm:^5.0.2, @ethersproject/address@npm:^5.0.4, @ethersproject/address@npm:^5.3.0, @ethersproject/address@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/address@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - checksum: a7fe129bc9436e2725c8b3c98ea6e76d1b02c509908e1bdfd6c8ca33bcfcff45638d659afefa8a2c7beb10ba662f28c3c27e970b07eb45bb2a4ed2b6ec2fd735 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/rlp": ^5.4.0 + checksum: 50702a81b5151244dd6223f7e725cf1fc38668ca2aa492e27f71ec60f805c8495e864298ba156fe7e61e546797b00250e97b3bfbf17c2b80062fea7a47e7d048 languageName: node linkType: hard -"@ethersproject/basex@npm:5.0.9, @ethersproject/basex@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/basex@npm:5.0.9" +"@ethersproject/base64@npm:5.4.0, @ethersproject/base64@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/base64@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/properties": ^5.0.7 - checksum: e65a65c109bf364e61864f515c764b81f3036775ef36fff93ced5f1cddca5ebaefa74e81f472310a8e09c584dc5a0bc3ef4c3f831fc84b1583ba40182f41471c + "@ethersproject/bytes": ^5.4.0 + checksum: 80933146ac8314194da709c0fb469b0748a333bee100f7818ea85f27bf6c1dd72d9c2ee9d6795223ea1d457f283950ca0f1cc42238632e6358a66d2f7f3c6059 languageName: node linkType: hard -"@ethersproject/bignumber@npm:5.0.15, @ethersproject/bignumber@npm:>=5.0.0-beta.130, @ethersproject/bignumber@npm:^5.0.13, @ethersproject/bignumber@npm:^5.0.5": - version: 5.0.15 - resolution: "@ethersproject/bignumber@npm:5.0.15" +"@ethersproject/basex@npm:5.4.0, @ethersproject/basex@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/basex@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - bn.js: ^4.4.0 - checksum: e8a05a0160a6f1cc875e6e73958c66ce44a2fe0d90eee16056ec13c7149327231826c12064e2f3a6973841bd944b5a82c69dbb277ccb8fa9aba4e273adf5a241 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + checksum: a9f19059e8922c69ca997c9da610e854ad626b3f2adcea30cca027d6002ce02c48d2a1100c87da05c795a2dceba727b20256b52508b9b53364ed0507204e1645 + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.4.0, @ethersproject/bignumber@npm:>=5.0.0-beta.130, @ethersproject/bignumber@npm:^5.0.7, @ethersproject/bignumber@npm:^5.3.0, @ethersproject/bignumber@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/bignumber@npm:5.4.0" + dependencies: + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + bn.js: ^4.11.9 + checksum: 0c9384c5137f41dfc2cec885a4b787dd2fa4ae2430448214ccbe6cbe8283eb1908101fa1a9cb16e39eab4e9c27363d2fbc5b041fe61147a65335e9f09801d323 languageName: node linkType: hard -"@ethersproject/bytes@npm:5.0.11, @ethersproject/bytes@npm:>=5.0.0-beta.129, @ethersproject/bytes@npm:^5.0.2, @ethersproject/bytes@npm:^5.0.9": - version: 5.0.11 - resolution: "@ethersproject/bytes@npm:5.0.11" +"@ethersproject/bytes@npm:5.4.0, @ethersproject/bytes@npm:>=5.0.0-beta.129, @ethersproject/bytes@npm:^5.0.4, @ethersproject/bytes@npm:^5.3.0, @ethersproject/bytes@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/bytes@npm:5.4.0" dependencies: - "@ethersproject/logger": ^5.0.8 - checksum: 287c6db3c5e588bb85f7f342181733e6818838dfffabe3b484e20772b4dbfd202e3cc16d68488b83e7b25ad2d4485a59f4592b15ad7eeff66bf1030f6e19bba2 + "@ethersproject/logger": ^5.4.0 + checksum: 450a32f5e63a987b10f78e0621158974ff1a455a07574b1e6acc6c396425d2fecca75f8e4a198ce27e52e511adafff24f2df4e25a74e0707a6307a28ad7f09c8 languageName: node linkType: hard -"@ethersproject/constants@npm:5.0.10, @ethersproject/constants@npm:>=5.0.0-beta.128, @ethersproject/constants@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/constants@npm:5.0.10" +"@ethersproject/constants@npm:5.4.0, @ethersproject/constants@npm:>=5.0.0-beta.128, @ethersproject/constants@npm:^5.0.4, @ethersproject/constants@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/constants@npm:5.4.0" dependencies: - "@ethersproject/bignumber": ^5.0.13 - checksum: e1fbe2173a936acfaaa95030355a643fe5c4fc65d2b47b82a27f279aa38c5443005605f59fe78ef2c0ef22cb62077e0b3e09712ac7a742389f34507a9975bedf + "@ethersproject/bignumber": ^5.4.0 + checksum: 2ae64668049db513ab2ccbd57a683af0f70527d596be9c2cc63ea4996482b071f2afbb467c2aeae2e82de70ea52e9be06597c8dc6e426fdc97b542c6fdd7a029 languageName: node linkType: hard -"@ethersproject/contracts@npm:5.0.12, @ethersproject/contracts@npm:^5.0.2": - version: 5.0.12 - resolution: "@ethersproject/contracts@npm:5.0.12" +"@ethersproject/contracts@npm:5.4.0, @ethersproject/contracts@npm:^5.3.0": + version: 5.4.0 + resolution: "@ethersproject/contracts@npm:5.4.0" dependencies: - "@ethersproject/abi": ^5.0.10 - "@ethersproject/abstract-provider": ^5.0.8 - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/address": ^5.0.9 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - checksum: b75d9c779564bddfd4766da07e93e615e9035d40bdd05fa135fcc138a1d0d71ad8b8c490ffc0f523e048ff14afa30e39355457c23caf71301e1cfabf023149b2 + "@ethersproject/abi": ^5.4.0 + "@ethersproject/abstract-provider": ^5.4.0 + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/address": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 + checksum: 3d33b562c49d117642b83e71a898aeac01c6a27cd7b9065f0f5568fd2875f3a31c52fcc90eb59495dd8d2573ca252025c7d7b0aefd60cdbb7e7c9530c2e8f2cc languageName: node linkType: hard -"@ethersproject/hash@npm:5.0.12, @ethersproject/hash@npm:>=5.0.0-beta.128, @ethersproject/hash@npm:^5.0.10": - version: 5.0.12 - resolution: "@ethersproject/hash@npm:5.0.12" +"@ethersproject/hash@npm:5.4.0, @ethersproject/hash@npm:>=5.0.0-beta.128, @ethersproject/hash@npm:^5.0.4, @ethersproject/hash@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/hash@npm:5.4.0" dependencies: - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/address": ^5.0.9 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - checksum: 6441b454826aef02afd890daabcf193e48640decae42d0982feb2072402d4a40626e77ed8c0e32bf30f1c795ae2e192368db9cce502085e69f397e30159564c9 + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/address": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + checksum: 25ffeea78e9de84f964e354b51be2e192be735a3082633f33103111bb66cc568f9f0e0974b45028cc15c10706372b4f53dd9d3ca9476cf52737bc8d6ea2c754a languageName: node linkType: hard -"@ethersproject/hdnode@npm:5.0.10, @ethersproject/hdnode@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/hdnode@npm:5.0.10" +"@ethersproject/hdnode@npm:5.4.0, @ethersproject/hdnode@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/hdnode@npm:5.4.0" dependencies: - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/basex": ^5.0.7 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/pbkdf2": ^5.0.7 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/sha2": ^5.0.7 - "@ethersproject/signing-key": ^5.0.8 - "@ethersproject/strings": ^5.0.8 - "@ethersproject/transactions": ^5.0.9 - "@ethersproject/wordlists": ^5.0.8 - checksum: e80aef669e975b8210f1ce320e86065040a7bf4a74fb975927ada11be39821749e22a07c4bdcb83c3b93accffd4be08d5e1b046040bd9a106d17834b8972a65a + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/basex": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/pbkdf2": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/sha2": ^5.4.0 + "@ethersproject/signing-key": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 + "@ethersproject/wordlists": ^5.4.0 + checksum: 2f1dc2a06f200f0de0e9d0d714f9a46cedfb5aa5f7d2cb2c6d7c3165ab99e5268cae4372b91203bd7c4aab9c93e6bd35617667a8130ff22cf47403e7b2a0efc9 languageName: node linkType: hard -"@ethersproject/json-wallets@npm:5.0.12, @ethersproject/json-wallets@npm:^5.0.10": - version: 5.0.12 - resolution: "@ethersproject/json-wallets@npm:5.0.12" +"@ethersproject/json-wallets@npm:5.4.0, @ethersproject/json-wallets@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/json-wallets@npm:5.4.0" dependencies: - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/address": ^5.0.9 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/hdnode": ^5.0.8 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/pbkdf2": ^5.0.7 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/random": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - "@ethersproject/transactions": ^5.0.9 + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/address": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/hdnode": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/pbkdf2": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/random": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 aes-js: 3.0.0 scrypt-js: 3.0.1 - checksum: c6a76eb6f48cb9871ace788fe52587af1340fb04ec60973e6f959f432ebe8d1179a84591eb5b722294ac069fa8519d92ed336e5083775f5853e3b3d3bebd614c + checksum: e392ed65a1044ca8db1e265bbddfa4e30d0a86f56881e41107fc6cccad69730be69e756dd030077d83d845b259db39d173ae2c26cbf0e5eb83057f5200c09fbd languageName: node linkType: hard -"@ethersproject/keccak256@npm:5.0.9, @ethersproject/keccak256@npm:>=5.0.0-beta.127, @ethersproject/keccak256@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/keccak256@npm:5.0.9" +"@ethersproject/keccak256@npm:5.4.0, @ethersproject/keccak256@npm:>=5.0.0-beta.127, @ethersproject/keccak256@npm:^5.0.3, @ethersproject/keccak256@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/keccak256@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 + "@ethersproject/bytes": ^5.4.0 js-sha3: 0.5.7 - checksum: 6d24b94a3c967fceb7ee29f06c5ec6ca9fc344e783f1478e6f9050eb64b4dfda4ab882e79d041fd381f4a69ac79d487989d7fc260db249fb3f4def94c54f61fe + checksum: f56da75038bc99d40ef54b7df4efb51cfbb0d5ae5b34774eb4811452ef511aa47b0862250691acf1661e8643f8dd61d675b1b86d58481954d34f2521aed789c2 languageName: node linkType: hard -"@ethersproject/logger@npm:5.0.10, @ethersproject/logger@npm:>=5.0.0-beta.129, @ethersproject/logger@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/logger@npm:5.0.10" - checksum: c216e3cea52844dd641fcc9dd930d0d2bebdac718ec2ea51a319dd796637c4556ed69a2df1365767ad340ccb999b52c2a3320c079dcdd185f8cd0c99dfee4d4b +"@ethersproject/logger@npm:5.4.0, @ethersproject/logger@npm:>=5.0.0-beta.129, @ethersproject/logger@npm:^5.0.5, @ethersproject/logger@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/logger@npm:5.4.0" + checksum: 4b01d88f95d1f89d2ed36abdaf8de2635cad6fe571b4faa0e2b23a0343224e6714969230c1fa75f05690cb03b9e2a74c79111fc2aa6b8fb20e1fda3f49a2a88b languageName: node linkType: hard -"@ethersproject/networks@npm:5.0.9, @ethersproject/networks@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/networks@npm:5.0.9" +"@ethersproject/networks@npm:5.4.0, @ethersproject/networks@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/networks@npm:5.4.0" dependencies: - "@ethersproject/logger": ^5.0.8 - checksum: b7f03bddbc310a5f7b5bdd2de92da175c60e85faaac89ac05ac4a887b74a2c2c2ef0fc8489387303994054576088953e1b65576a6b6cd5ce7ec0aa640b3d9aa5 + "@ethersproject/logger": ^5.4.0 + checksum: fb972b89c6d15cc87060f72e8b80f66c101ba16866a27646958e5431611b701f5376e9ec4ee992bfda4f5935ca5c207d2048be3fd589bff94545c192661387c6 languageName: node linkType: hard -"@ethersproject/pbkdf2@npm:5.0.9, @ethersproject/pbkdf2@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/pbkdf2@npm:5.0.9" +"@ethersproject/pbkdf2@npm:5.4.0, @ethersproject/pbkdf2@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/pbkdf2@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/sha2": ^5.0.7 - checksum: 1b9185d12656ec9f07055c3364e8eafaba9944b276c8bbf15c1bd889f09d4f78900cf1ff2bf12d6c263164b932cfef58664162bbd185d4205a8617370509e62e + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/sha2": ^5.4.0 + checksum: ca3aa2adf0e8afa27e957aabd6f9a7c5840e5c167265815732f29735adb50f9cc63417984045589b25346717fd797ee821f7ea820cb39fc5fab1aa55ed3c3882 languageName: node linkType: hard -"@ethersproject/properties@npm:5.0.9, @ethersproject/properties@npm:>=5.0.0-beta.131, @ethersproject/properties@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/properties@npm:5.0.9" +"@ethersproject/properties@npm:5.4.0, @ethersproject/properties@npm:>=5.0.0-beta.131, @ethersproject/properties@npm:^5.0.3, @ethersproject/properties@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/properties@npm:5.4.0" dependencies: - "@ethersproject/logger": ^5.0.8 - checksum: 7178e062842318773588dac497361dcd652e78a6fb077fbccccd8ce4accd28b0c842f4329760aa83dc158ae603bf031bb9ae613432b4f0c4cc9a084c79c0cbcf + "@ethersproject/logger": ^5.4.0 + checksum: 4baea066ff0764a91d5daf42f6faba44160ecec5bdde7ab547b8500f15f50f36a52af0e9a9cad9003e7738b991c749dba84a1428f8df060e4509d54f8432c3a9 languageName: node linkType: hard -"@ethersproject/providers@npm:5.0.24, @ethersproject/providers@npm:^5.0.5": - version: 5.0.24 - resolution: "@ethersproject/providers@npm:5.0.24" +"@ethersproject/providers@npm:5.4.0, @ethersproject/providers@npm:^5.3.1": + version: 5.4.0 + resolution: "@ethersproject/providers@npm:5.4.0" dependencies: - "@ethersproject/abstract-provider": ^5.0.8 - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/address": ^5.0.9 - "@ethersproject/basex": ^5.0.7 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/hash": ^5.0.10 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/networks": ^5.0.7 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/random": ^5.0.7 - "@ethersproject/rlp": ^5.0.7 - "@ethersproject/sha2": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - "@ethersproject/transactions": ^5.0.9 - "@ethersproject/web": ^5.0.12 + "@ethersproject/abstract-provider": ^5.4.0 + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/address": ^5.4.0 + "@ethersproject/basex": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/hash": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/networks": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/random": ^5.4.0 + "@ethersproject/rlp": ^5.4.0 + "@ethersproject/sha2": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 + "@ethersproject/web": ^5.4.0 bech32: 1.1.4 - ws: 7.2.3 - checksum: 15c6d49808b9e1bd4ffec4747eab72e826e2852074cd67ba8993f5cb24ddc52c86458e8a57ee1ad84ec561371432e3a04f2df376878a7188729c536ca157fdfe + ws: 7.4.6 + checksum: 50181724d53b8f39ff6f3ddec930eebfaaf88d0e237164cfda47f0cd237855db76d33876f8951423667fadd447737c9405f75de4c7cbdf37bd30ec4305756849 languageName: node linkType: hard -"@ethersproject/random@npm:5.0.9, @ethersproject/random@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/random@npm:5.0.9" +"@ethersproject/random@npm:5.4.0, @ethersproject/random@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/random@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - checksum: 6087843d77e146dba6c37c52c1a2eac8b23d686dbde53ebb7f055f9c3b9e8b11bf19ae912d6a9d297ae2c8774ad867b533f45c85f7b38be4dc9ee620d5397f62 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + checksum: fa9c033517ec37f68e923ebdf361efffc684cd98883ecf0de8032b534f3d43eab121d10ab8433eabdceeaab94b6e4dc48667f895b4bcc433e621f86b40fd84c4 languageName: node linkType: hard -"@ethersproject/rlp@npm:5.0.9, @ethersproject/rlp@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/rlp@npm:5.0.9" +"@ethersproject/rlp@npm:5.4.0, @ethersproject/rlp@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/rlp@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - checksum: 6c70cfad1acf5cfe358c950c7284f617a3fe5cc99a57b89d9664c970f96e4cb678dd903ff147194882248bc18675fdadf1cc9a6967c4976535eb1448857124ee + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + checksum: 27bdfddb1fcd2f00e3ccb02293db475b177a627eaeab3cef1cf88c78ee53febb12b226bf9e6f7bd5184bdba53dd4dd35cd689aa51724a43b214cd7587da68d4f languageName: node linkType: hard -"@ethersproject/sha2@npm:5.0.9, @ethersproject/sha2@npm:^5.0.7": - version: 5.0.9 - resolution: "@ethersproject/sha2@npm:5.0.9" +"@ethersproject/sha2@npm:5.4.0, @ethersproject/sha2@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/sha2@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - hash.js: 1.1.3 - checksum: be33a7947dd51ac9558a9ab15dbddc98c3b08b635fe4d0486d9e1bb2669be9ddf1c98a8f2e017b4267db5645119a92ea3ab29e13832a7740850d06b112c4de2d + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + hash.js: 1.1.7 + checksum: 588c8f654a64749dad63602ec71befa3ce0f30500ddd4b132760a3f5a1a1623e23fdd4c38437592d99da930fc9fdb5021c202d2ec30691225f6d46199432e668 languageName: node linkType: hard -"@ethersproject/signing-key@npm:5.0.11, @ethersproject/signing-key@npm:^5.0.8": - version: 5.0.11 - resolution: "@ethersproject/signing-key@npm:5.0.11" +"@ethersproject/signing-key@npm:5.4.0, @ethersproject/signing-key@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/signing-key@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + bn.js: ^4.11.9 elliptic: 6.5.4 - checksum: 2002c15c1b05c3b39a69b34277cbcfd508affa98be5814fd4b0c716e57d695ca9fe29041c159f6de44cb8987e6a18fc22e24720c9d9126b12662c9134d927563 + hash.js: 1.1.7 + checksum: 647f259e0eb32aee24aaf51912f8d8cad01e2dc7e3695978aa96413d3a8c68d3a99862e763263f8069c6586d105658a22016a98ae1f36aedd8c021a8ae6032a3 languageName: node linkType: hard -"@ethersproject/solidity@npm:5.0.10, @ethersproject/solidity@npm:^5.0.2": - version: 5.0.10 - resolution: "@ethersproject/solidity@npm:5.0.10" +"@ethersproject/solidity@npm:5.4.0, @ethersproject/solidity@npm:^5.3.0": + version: 5.4.0 + resolution: "@ethersproject/solidity@npm:5.4.0" dependencies: - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/sha2": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - checksum: bde22e327db0e2210494387e9d1f85460ab12cd63d367b89dd970fc2992f266853af579ae6c3e6e436a646f7c45300771dda4f7437963effc22e301c2d75ebd1 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/sha2": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + checksum: a739414038f75ba05b3b0303207767d7f05dfc318544999b48ee94d390efd4ed8ecc1398ac7adbfd4524b605deae05e99d898ec41932f243a6119b48b9d64968 languageName: node linkType: hard -"@ethersproject/strings@npm:5.0.10, @ethersproject/strings@npm:>=5.0.0-beta.130, @ethersproject/strings@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/strings@npm:5.0.10" +"@ethersproject/strings@npm:5.4.0, @ethersproject/strings@npm:>=5.0.0-beta.130, @ethersproject/strings@npm:^5.0.4, @ethersproject/strings@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/strings@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/logger": ^5.0.8 - checksum: 510a33c1eb3334af3193dc9ecf1a5b54cc1286f1478348c962c122f66b1ce75720746a7ed5dec2e4b416326873efe8008b83b912522b0487c284dccfbb4f8384 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + checksum: 2d30f91f5a3e3f2b3315ea0d1427b51d9fb49630ad439569f681c9eb40246318029c9459581621eb19203233c1e64ebd24a61f19b0da2a050873b5f08d1d171e languageName: node linkType: hard -"@ethersproject/transactions@npm:5.0.11, @ethersproject/transactions@npm:^5.0.0-beta.135, @ethersproject/transactions@npm:^5.0.2, @ethersproject/transactions@npm:^5.0.9": - version: 5.0.11 - resolution: "@ethersproject/transactions@npm:5.0.11" +"@ethersproject/transactions@npm:5.4.0, @ethersproject/transactions@npm:^5.0.0-beta.135, @ethersproject/transactions@npm:^5.3.0, @ethersproject/transactions@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/transactions@npm:5.4.0" dependencies: - "@ethersproject/address": ^5.0.9 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/rlp": ^5.0.7 - "@ethersproject/signing-key": ^5.0.8 - checksum: dbeba12a07eca4b5f1f3a2f50cb8ac017611adcc1b8908f0df51d74420e27dfe86d58e49837c1f3a785ef35a64260ded45cb2f6eb8278b1d2cb46a6f2fc580ad + "@ethersproject/address": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/rlp": ^5.4.0 + "@ethersproject/signing-key": ^5.4.0 + checksum: 72c6190b4a89c9a5f2d91f75510acbc435a425dd5a6fbef6615dbe56199f3313e2f1b9fa76142387f697bf53ab9879a609a786e2d59ebafecaa5adcb7453df74 languageName: node linkType: hard -"@ethersproject/units@npm:5.0.11": - version: 5.0.11 - resolution: "@ethersproject/units@npm:5.0.11" +"@ethersproject/units@npm:5.4.0": + version: 5.4.0 + resolution: "@ethersproject/units@npm:5.4.0" dependencies: - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/constants": ^5.0.8 - "@ethersproject/logger": ^5.0.8 - checksum: 79cc50afa5f302820dc70f4f0ae01772c6001eecf5582c523b72c20acd571caa7561ca40ed71cd7af3766a958195426a80dd510991b13fa94462df967e725900 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/constants": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + checksum: 6ccc6175002117202f0ead13d4503c00d88b13ee0c743282a32eb22824027e0669e54473b2a92e6ffacfc312c898c79773d55b6c10b78384e8250752849384db languageName: node linkType: hard -"@ethersproject/wallet@npm:5.0.12, @ethersproject/wallet@npm:^5.0.2": - version: 5.0.12 - resolution: "@ethersproject/wallet@npm:5.0.12" +"@ethersproject/wallet@npm:5.4.0, @ethersproject/wallet@npm:^5.3.0": + version: 5.4.0 + resolution: "@ethersproject/wallet@npm:5.4.0" dependencies: - "@ethersproject/abstract-provider": ^5.0.8 - "@ethersproject/abstract-signer": ^5.0.10 - "@ethersproject/address": ^5.0.9 - "@ethersproject/bignumber": ^5.0.13 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/hash": ^5.0.10 - "@ethersproject/hdnode": ^5.0.8 - "@ethersproject/json-wallets": ^5.0.10 - "@ethersproject/keccak256": ^5.0.7 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/random": ^5.0.7 - "@ethersproject/signing-key": ^5.0.8 - "@ethersproject/transactions": ^5.0.9 - "@ethersproject/wordlists": ^5.0.8 - checksum: 900781bd50f18c052e79ae0891dbd47cb08e6050829e1bc3b3930c35bb5a1dd68d1461398873f145cdd94e034d934846b12512a47852cac5e5a6558e8bf989bd + "@ethersproject/abstract-provider": ^5.4.0 + "@ethersproject/abstract-signer": ^5.4.0 + "@ethersproject/address": ^5.4.0 + "@ethersproject/bignumber": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/hash": ^5.4.0 + "@ethersproject/hdnode": ^5.4.0 + "@ethersproject/json-wallets": ^5.4.0 + "@ethersproject/keccak256": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/random": ^5.4.0 + "@ethersproject/signing-key": ^5.4.0 + "@ethersproject/transactions": ^5.4.0 + "@ethersproject/wordlists": ^5.4.0 + checksum: 0ea229766bdb680deb73b9ca4d1fb85b687fa700fbd8d3caa92ea782dff7a853976d3d499c2bb6cbec75a81f6fa8ccd98de41d9efb669a8e07d01fadeb42fb87 languageName: node linkType: hard -"@ethersproject/web@npm:5.0.14, @ethersproject/web@npm:^5.0.12": - version: 5.0.14 - resolution: "@ethersproject/web@npm:5.0.14" +"@ethersproject/web@npm:5.4.0, @ethersproject/web@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/web@npm:5.4.0" dependencies: - "@ethersproject/base64": ^5.0.7 - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - checksum: 1b706cdf84392cb429f86d36a6033b056c4f926708043c771d52ec32759e284c1230df3e3d7f265369cacff902e4bb790d738d65c89ec04ce31b4d45620405fd + "@ethersproject/base64": ^5.4.0 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + checksum: ec65f20addfeec5aded55bf505e794500ff02ce2eba085fca9c621bbbf1b92726bad42c20d74e311a71f57217bb1435478ca984e0ef4d60d46dd0f72240395a2 languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.0.10, @ethersproject/wordlists@npm:^5.0.8": - version: 5.0.10 - resolution: "@ethersproject/wordlists@npm:5.0.10" +"@ethersproject/wordlists@npm:5.4.0, @ethersproject/wordlists@npm:^5.4.0": + version: 5.4.0 + resolution: "@ethersproject/wordlists@npm:5.4.0" dependencies: - "@ethersproject/bytes": ^5.0.9 - "@ethersproject/hash": ^5.0.10 - "@ethersproject/logger": ^5.0.8 - "@ethersproject/properties": ^5.0.7 - "@ethersproject/strings": ^5.0.8 - checksum: 1e7cb76d947b6eea19b5fe4d5a0801fbe69b59fd2ea22ac9288ec167cbc82eee86486f712b399b0785f78c1e88c6a7238f7ff4718af26954b3e32ada858e9575 + "@ethersproject/bytes": ^5.4.0 + "@ethersproject/hash": ^5.4.0 + "@ethersproject/logger": ^5.4.0 + "@ethersproject/properties": ^5.4.0 + "@ethersproject/strings": ^5.4.0 + checksum: abb3a9c1d93e9afcdbc60f632e1d37f4f0b10c8924fda43975d5ad1f02caa24296473976de3fd286d8b094dd0993e69514701af7d7c647e8f6a236faa46cf905 languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.4": - version: 2.1.4 - resolution: "@nodelib/fs.scandir@npm:2.1.4" +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" dependencies: - "@nodelib/fs.stat": 2.0.4 + "@nodelib/fs.stat": 2.0.5 run-parallel: ^1.1.9 - checksum: 30b3102ee37e1c1a0cb939a8e93f9a58b1637e2b4b546bb9143b3fb5efacd2abde3237a5313d5329bf1bc4231c418a77c3cb7f5434ce410e61a91ff4051cf215 + checksum: 91b3de88d9ba843b74057ebec53d97bb1ca006fcb794f1eb2becfe6faf114cb575c90b10fc20f7390358106ffa5e6bbc493506c24f2263a33aa69f90c1e77f74 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.4, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.4 - resolution: "@nodelib/fs.stat@npm:2.0.4" - checksum: 6454a79e945dd55102b5c2e158813804ed349f9c1cc806f8754fca4587688a5d8e4115fc3eedbdf3d8a6b343169a6b664ecd8a7a42289eed210c686a4d0897c4 +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: a4fcf7408f2a1e11737856629b1259fb9ed658c464fabb17f77db1069fea5dd47abd5e92325b217617dbc116138d82ea6d33ffc07a426de940c5f6e08603da88 languageName: node linkType: hard "@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.6 - resolution: "@nodelib/fs.walk@npm:1.2.6" + version: 1.2.7 + resolution: "@nodelib/fs.walk@npm:1.2.7" dependencies: - "@nodelib/fs.scandir": 2.1.4 + "@nodelib/fs.scandir": 2.1.5 fastq: ^1.6.0 - checksum: d0503ffd0bb4172d5ac5d23993b14665f5f6d42a460a719ad97743ce71e60588d134cc60df12ca76be0e5e3a93c9a3156904d9296b78a8cdf19425c3423c0b58 + checksum: ac8e2d9ca000b9f7fca2a7b005b9e476ba7b2f416d2873f64b94b207ed1854bd30f63ced4c221969c5e470ec82fbeb353c97504a86c3838cda11f98660fac284 languageName: node linkType: hard @@ -751,6 +771,16 @@ __metadata: languageName: node linkType: hard +"@npmcli/move-file@npm:^1.0.1": + version: 1.1.2 + resolution: "@npmcli/move-file@npm:1.1.2" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: d178d86a0a96e5aa12e6d70c00d50eb3bb9a58c0cf1c36e1d7f240acb4ae3f14642c6314659c438ea409a509f08c2a62e29c9346a033e554c3f6921cdb293219 + languageName: node + linkType: hard + "@openzeppelin/contracts-upgradeable@npm:3.4.0": version: 3.4.0 resolution: "@openzeppelin/contracts-upgradeable@npm:3.4.0" @@ -794,8 +824,8 @@ __metadata: linkType: hard "@openzeppelin/upgrades-core@npm:^1.5.0": - version: 1.5.1 - resolution: "@openzeppelin/upgrades-core@npm:1.5.1" + version: 1.8.0 + resolution: "@openzeppelin/upgrades-core@npm:1.8.0" dependencies: bn.js: ^5.1.2 cbor: ^7.0.0 @@ -803,11 +833,9 @@ __metadata: compare-versions: ^3.6.0 debug: ^4.1.1 ethereumjs-util: ^7.0.3 - fp-ts: ^2.7.1 - io-ts: ^2.2.9 proper-lockfile: ^4.1.1 solidity-ast: ^0.4.15 - checksum: 6b093d6d73ed4674a0128f2d2be339232e7e777965a854354f0449ba51c2b63fc5b1f8cdc4a743efa1863a60a20a790cf1340fdf78c6bc8a154d80c4d753b74c + checksum: 3ffa617ef047fd30f430edf740765d63e22295d35271c67e1f2ac46f6b9f39f76d6b12e392ab932689820da4b51755e51c63e7d9d2481c62681d03d622bd7821 languageName: node linkType: hard @@ -888,29 +916,30 @@ __metadata: "@pooltogether/pooltogether-rng-contracts": 1.1.1 "@pooltogether/yield-source-interface": 1.0.1 "@studydefi/money-legos": 2.4.1 - "@typechain/ethers-v5": 6.0.2 - "@typechain/hardhat": 1.0.1 + "@typechain/ethers-v5": 7.0.1 + "@typechain/hardhat": 2.1.0 "@types/chai": 4.2.15 "@types/debug": 4.1.5 "@types/mocha": 8.2.1 - "@types/node": 14.14.32 + "@types/node": 15.12.5 chai: 4.3.4 chalk: 4.1.0 debug: 4.3.1 ethereum-waffle: 3.3.0 - ethers: 5.0.32 + ethers: 5.4.0 + evm-chains: 0.2.0 hardhat: 2.1.1 - hardhat-abi-exporter: 2.1.2 + hardhat-abi-exporter: 2.2.1 hardhat-dependency-compiler: 1.1.1 - hardhat-deploy: 0.7.0-beta.47 - hardhat-deploy-ethers: 0.3.0-beta.7 + hardhat-deploy: 0.8.9 + hardhat-deploy-ethers: 0.3.0-beta.10 hardhat-gas-reporter: 1.0.4 prettier: 2.2.1 solhint: 3.3.6 solidity-coverage: 0.7.16 ts-generator: 0.1.1 ts-node: 9.1.1 - typechain: 4.0.3 + typechain: 5.1.1 typescript: 4.2.3 languageName: unknown linkType: soft @@ -1063,6 +1092,24 @@ __metadata: languageName: node linkType: hard +"@sinonjs/commons@npm:^1.7.0": + version: 1.8.3 + resolution: "@sinonjs/commons@npm:1.8.3" + dependencies: + type-detect: 4.0.8 + checksum: a7f3181512f67bbb9059dc9247febfda6dea58fc2a918360b208c6fde193b0c2cbe628650b0d13b4ba69f144470788eb6c2ef8a84e050dce4808be8511da4316 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^7.1.0": + version: 7.1.2 + resolution: "@sinonjs/fake-timers@npm:7.1.2" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 5ce48e40db14d7e1419bae287b84559133d580cb56130b51d7479dff318bfafed87531f8b48f618f07e3c9a6113c9e3f00286805d55de64986b9cccb8eb6d5cf + languageName: node + linkType: hard + "@solidity-parser/parser@npm:^0.11.0": version: 0.11.1 resolution: "@solidity-parser/parser@npm:0.11.1" @@ -1071,9 +1118,9 @@ __metadata: linkType: hard "@solidity-parser/parser@npm:^0.12.0": - version: 0.12.0 - resolution: "@solidity-parser/parser@npm:0.12.0" - checksum: a46e2a3b28bd9cd541595f1fa2ba423d6df6b0b4be6184682163ad55d71764411ae611cb225369004734c3a25afe6b116e5141437832fdefe101d5d2c4451edf + version: 0.12.2 + resolution: "@solidity-parser/parser@npm:0.12.2" + checksum: 63f0296606e96c74252452bb48a4d3a4a09185413cd259bd6b1e601c9614115bef5afb3aff11d791584772cca622cad53eefc221667a094fb009215fdd265981 languageName: node linkType: hard @@ -1111,43 +1158,53 @@ __metadata: languageName: node linkType: hard -"@truffle/error@npm:^0.0.12": - version: 0.0.12 - resolution: "@truffle/error@npm:0.0.12" - checksum: 0065c5c8fd5023a54886a8962250e05fd570c52bc947420130a9ff824fe916f695f5efe342ecf8e0c16aaf70be5a35fa36d126ca3bbc18bcb345f60c3d0854b6 +"@tootallnate/once@npm:1": + version: 1.1.2 + resolution: "@tootallnate/once@npm:1.1.2" + checksum: d030f3fb14e0373dbf5005d8f696ff34fda87bf56744bea611fc737449bfc0687ebcb28ee8ba4c6624877f51b18d701c0d417d793f406006a192f4721911d048 + languageName: node + linkType: hard + +"@truffle/error@npm:^0.0.14": + version: 0.0.14 + resolution: "@truffle/error@npm:0.0.14" + checksum: aeee1ace0395025d2520fc4373db4cb32e5d58427c7222872208413a17687676f74d9fcdd8db8a8eb4e3c8327460faf8efd86c6cd3c92ce7bbc367d66b0d28bd languageName: node linkType: hard -"@truffle/interface-adapter@npm:^0.4.20": - version: 0.4.20 - resolution: "@truffle/interface-adapter@npm:0.4.20" +"@truffle/interface-adapter@npm:^0.5.1": + version: 0.5.1 + resolution: "@truffle/interface-adapter@npm:0.5.1" dependencies: bn.js: ^5.1.3 ethers: ^4.0.32 - web3: 1.2.9 - checksum: e07ef165693ed10d6d134b40ac6d19963b6e6267ed288b00c8129f09f6df9d976f85229bc4060f7e1ef1caab3581fa4c650e22d0769e2fc29f299f57674fb398 + web3: 1.3.6 + checksum: 630f8a6bf35670e72ef54927349c7441b23a515fb3fe7e73033d3ceee32033e173b24284ff04ff9532cea3255265ba5b38bee02c2aff50c18953705827fe3d0a languageName: node linkType: hard "@truffle/provider@npm:^0.2.24": - version: 0.2.27 - resolution: "@truffle/provider@npm:0.2.27" + version: 0.2.33 + resolution: "@truffle/provider@npm:0.2.33" dependencies: - "@truffle/error": ^0.0.12 - "@truffle/interface-adapter": ^0.4.20 - web3: 1.2.9 - checksum: 94d49986fd82882edd42e0c94d3d9c1c5934e6f6d1fe4de23c57a45bd415566dfa247ea635ecb99dcae19a562b42981006fdb73658339eb8336e8c02a861d505 + "@truffle/error": ^0.0.14 + "@truffle/interface-adapter": ^0.5.1 + web3: 1.3.6 + checksum: c02ee0a80e8d6d5d21ac1b05699fb29a1f3053ce1833346ac78843986968a30326e3baf121a24f80a2405275a732627385f368c489b290b8ec35c861b26a89b9 languageName: node linkType: hard -"@typechain/ethers-v5@npm:6.0.2": - version: 6.0.2 - resolution: "@typechain/ethers-v5@npm:6.0.2" +"@typechain/ethers-v5@npm:7.0.1": + version: 7.0.1 + resolution: "@typechain/ethers-v5@npm:7.0.1" peerDependencies: - ethers: ^5.0.0 - typechain: ^4.0.0 + "@ethersproject/abi": ^5.0.0 + "@ethersproject/bytes": ^5.0.0 + "@ethersproject/providers": ^5.0.0 + ethers: ^5.1.3 + typechain: ^5.0.0 typescript: ">=4.0.0" - checksum: a19510a37df6a2fb254e7e57280a837417dc5a77af7a815e50eab91c8e753706595dd8b6fbedd8d08781a252cdce89d5c9b1e6fc5225351e98413f0cccda79ca + checksum: c618287e177c665bd38e3684eb651f92fbf7911a0a91c08a31496cec55efbb44c440ce3c6f038df6e5087987b3efb35c543f2a2c7cf5e2dcf0085ac881f0ea98 languageName: node linkType: hard @@ -1163,14 +1220,15 @@ __metadata: languageName: node linkType: hard -"@typechain/hardhat@npm:1.0.1": - version: 1.0.1 - resolution: "@typechain/hardhat@npm:1.0.1" +"@typechain/hardhat@npm:2.1.0": + version: 2.1.0 + resolution: "@typechain/hardhat@npm:2.1.0" + dependencies: + fs-extra: ^9.1.0 peerDependencies: hardhat: ^2.0.10 - ts-generator: ^0.1.1 - typechain: ^4.0.0 - checksum: afee1e5ec6a24f1dcc71de4e0945bdd4b0fc23feb950b3afa39385d90d925da61629bd7d86d9c716376e18fe2f21569981ac7761d787073be246e4d826c3e431 + typechain: ^5.0.0 + checksum: 69e33827f09921e358b69171b4bdd8c56850ea433695a9db375d6765f08c0b391d4fb5ff1045a28e29ca80a86a1bfa6d54ddd399cf5b58286c72e57cb095beda languageName: node linkType: hard @@ -1183,7 +1241,7 @@ __metadata: languageName: node linkType: hard -"@types/bn.js@npm:^4.11.3, @types/bn.js@npm:^4.11.4, @types/bn.js@npm:^4.11.5": +"@types/bn.js@npm:^4.11.3, @types/bn.js@npm:^4.11.5": version: 4.11.6 resolution: "@types/bn.js@npm:4.11.6" dependencies: @@ -1192,17 +1250,17 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:4.2.15": - version: 4.2.15 - resolution: "@types/chai@npm:4.2.15" - checksum: 671073ece087a7e336f8f32a09713deecc298fab50b51778c5496781f6ee7075c0fe1e6566407fa8da19e231f292353582eab4fc88ec439e83ace90781ae5991 +"@types/chai@npm:*, @types/chai@npm:^4.2.10": + version: 4.2.19 + resolution: "@types/chai@npm:4.2.19" + checksum: 0b1513757572a96650373586d54e03fda2a40d07fe641397b03680e0711b8a30c04443effcfd9479ddfabbffa9e86b19d96c4643ea77f861cde57ca1c5036cd4 languageName: node linkType: hard -"@types/chai@npm:^4.2.10": - version: 4.2.16 - resolution: "@types/chai@npm:4.2.16" - checksum: 8e9c49718b165c586798643aa28668ef515bfb747290a9f3e39aa578735bcb540577279c5dd706a940ee44d9886bd810bba6c8d973db219f30165defe927fae7 +"@types/chai@npm:4.2.15": + version: 4.2.15 + resolution: "@types/chai@npm:4.2.15" + checksum: 671073ece087a7e336f8f32a09713deecc298fab50b51778c5496781f6ee7075c0fe1e6566407fa8da19e231f292353582eab4fc88ec439e83ace90781ae5991 languageName: node linkType: hard @@ -1288,47 +1346,40 @@ __metadata: linkType: hard "@types/node-fetch@npm:^2.5.5": - version: 2.5.8 - resolution: "@types/node-fetch@npm:2.5.8" + version: 2.5.10 + resolution: "@types/node-fetch@npm:2.5.10" dependencies: "@types/node": "*" form-data: ^3.0.0 - checksum: 608cdd6aed2c6a44a26406eb63475d4bfb8f63f78f22f747e30dd7cda309b86dc019e4427b9092011541da95d83ef03e2e6558c37d39221c0931617f32d3c4e1 + checksum: 7687038f73cf0f2e4bac8ced3abdfbb77f8b2719de2f180d0064238d7460c8b4dc0b39c08da35a76d7db9f86528599ea0f7cee7c468ad7cfecfe2db1c5863641 languageName: node linkType: hard -"@types/node@npm:*": - version: 14.14.36 - resolution: "@types/node@npm:14.14.36" - checksum: 9eff5863af3ddf3dfd0964ce7da85e663df2c05d091412b8c97d069e61b00760fa4ce788442733bdf07ad69ce408088c0bef2fa81b5cfdca54d31117618385f3 +"@types/node@npm:*, @types/node@npm:15.12.5": + version: 15.12.5 + resolution: "@types/node@npm:15.12.5" + checksum: 42485de7a0b7277ddaae25b36ab4174fc8f23e8a5de9ccaedd002ecec17135c48227a5e09088d181c2bc34fe6b2064feb4a468954372076fd8addac2f72dad7e languageName: node linkType: hard -"@types/node@npm:14.14.32": - version: 14.14.32 - resolution: "@types/node@npm:14.14.32" - checksum: ae73f3b668242da660b4f4f2047114fc047f5a6a92b8f9f4ab2f8ca1325c914c08cf13b6f90e6e88016fafb7a662d1963b075a6220d2208651a98a1cb3407221 +"@types/node@npm:^10.0.3": + version: 10.17.60 + resolution: "@types/node@npm:10.17.60" + checksum: af7e0b300da2b917555563d9bf770d1d07d9aa1930ec639336d5ba0a32e801e04f0291a658d0d0d77ce9f5df377c3018bf9de6416cee956bddd59de0e1b93d0f languageName: node linkType: hard -"@types/node@npm:^10.0.3, @types/node@npm:^10.12.18": - version: 10.17.55 - resolution: "@types/node@npm:10.17.55" - checksum: 03924314a7a6bd74f5d710b35b602f82b14e0bc95d650724a4296ed99aec9b8680885b78422a5e21586b2cb2b1d8148cd58ec99009e2ae6e2beaf1590c71a444 - languageName: node - linkType: hard - -"@types/node@npm:^12.12.6, @types/node@npm:^12.6.1": - version: 12.20.6 - resolution: "@types/node@npm:12.20.6" - checksum: 2a652aa94521bc237fddfcbf769363ea172386bfa804e5fd409b179d8a6583d26098744500d30c23dc1de5452519a19e3836280b52cf0314d0d80e4b5be3df44 +"@types/node@npm:^12.12.6": + version: 12.20.15 + resolution: "@types/node@npm:12.20.15" + checksum: 1233326726d017e9fdc1b89e966e5e4a3944060e00308ba6fbf4c6e91f307612dbf2e2bcab4132c35f6195b310a902ef6fe10a107e3e67c7582d31b79f1bef30 languageName: node linkType: hard "@types/node@npm:^13.9.1": - version: 13.13.48 - resolution: "@types/node@npm:13.13.48" - checksum: 9ccf1d1e21b6b5c33bf003e211fe6af8d4255fede5e81c717a5768ce49eba84addcf68d299573179d58274630cd552ff5e124e0db2c55c0a358120e07b0e54ec + version: 13.13.52 + resolution: "@types/node@npm:13.13.52" + checksum: 702db7930d333cc56e38d1ffb0ac394c2ccaae3be41ad6d92d84e5225f2ccf7a69fc19bd9eceafd0c00189876add6464460c5fd47ce4bdc14f6f9b0a7212aee0 languageName: node linkType: hard @@ -1349,9 +1400,9 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.1": - version: 2.2.3 - resolution: "@types/prettier@npm:2.2.3" - checksum: b7e80288f9f776caca84391a7a217b8baac6b4fce00bb9701af69299d465cb8faf17466f0af0803970c74d2c191767ca729a6d21a2f7e2ce552d1ef6cc0d653a + version: 2.3.0 + resolution: "@types/prettier@npm:2.3.0" + checksum: 7c1ef16234220519d52b8a154723caf5c5dc9d5eaa85bfe06e367ba57472dab7f7fdac1ca7c29d9010d58f74f3b5235a9f8bad0111d9bad74018eb8141371e7e languageName: node linkType: hard @@ -1381,11 +1432,11 @@ __metadata: linkType: hard "@types/secp256k1@npm:^4.0.1": - version: 4.0.1 - resolution: "@types/secp256k1@npm:4.0.1" + version: 4.0.2 + resolution: "@types/secp256k1@npm:4.0.2" dependencies: "@types/node": "*" - checksum: 4e356a4df5fa9aa2f15979144e9ebf4bad1eb57870dcdf2176446c6619af692e1e68452905814c9279ac0ef6ae160503cf64f995fde5d638358feed9b434dd16 + checksum: 7f0d4425fc64c5b573716fee3c92e015c36fa611d327a1c314d4c8313308b1bfb9028c1d93caed6fb6133372b9777415411526a7a9e500de89d391bc6ae9da6a languageName: node linkType: hard @@ -1400,25 +1451,18 @@ __metadata: linkType: hard "@types/sinon@npm:*": - version: 9.0.11 - resolution: "@types/sinon@npm:9.0.11" + version: 10.0.2 + resolution: "@types/sinon@npm:10.0.2" dependencies: - "@types/sinonjs__fake-timers": "*" - checksum: c84ccbd5ac05d8eb45151a9c0790cf9b9fc78bdfc2f3feecb8866dab530bed82301ba0340cfb73de7148f08a40c9c1b1b7a920e4c9efd79195b60a52ab3e577d - languageName: node - linkType: hard - -"@types/sinonjs__fake-timers@npm:*": - version: 6.0.2 - resolution: "@types/sinonjs__fake-timers@npm:6.0.2" - checksum: 1dd1b391904c2a2972318b753026f615784c14a827c12ba21f67707ca6565f3cea195790a1c64178f2208e330eec4ab9c78823c99019384b9a01b02cc6987071 + "@sinonjs/fake-timers": ^7.1.0 + checksum: 44d149b0ba4ebfbadd7452e31edb35aab782d74bb542a808e5b0cc72f40fd2db6b4179bb97a79d5e2dc1b870823a395cd21349037a7af336810c1662ee9f076f languageName: node linkType: hard "@types/underscore@npm:*": - version: 1.11.0 - resolution: "@types/underscore@npm:1.11.0" - checksum: ebe300dbf0293db58a5c05000481d6ed9d4cadba215b68b50481c35b6794ccc74c86394a0d9774e05fdfdc14e7d4459bfde7db7c130790d7fb31868cea554cda + version: 1.11.2 + resolution: "@types/underscore@npm:1.11.2" + checksum: d7fdaa52f278850877c65b441c7047f76262ced49a9bc196a2c39da006fefb97094d781a7c597499e5f8864fac687e47de48c047dcf48d765beb1000e445cd59 languageName: node linkType: hard @@ -1554,7 +1598,7 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": +"agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -1563,6 +1607,27 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.1.3": + version: 4.1.4 + resolution: "agentkeepalive@npm:4.1.4" + dependencies: + debug: ^4.1.0 + depd: ^1.1.2 + humanize-ms: ^1.2.1 + checksum: c58f69d05ccf3943e70d458d0dfceacc0f85749743573f843075ec93948302801e7ef43436f6c70d0ed2d12f70f1b6c061eac5a3018513f850b839533dbcef0e + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 704d2001a303c185e9b836d211f7eef2f4557195a11c3271143b4dcda5f6f263abe746d9b8a06b5871d07870686c7db9c0b2c38e2d3cbc593784eaaee8a29043 + languageName: node + linkType: hard + "ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.6.1, ajv@npm:^6.9.1": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -1665,22 +1730,13 @@ __metadata: languageName: node linkType: hard -"antlr4ts@npm:^0.5.0-alpha.4": - version: 0.5.0-dev - resolution: "antlr4ts@npm:0.5.0-dev" - dependencies: - source-map-support: ^0.5.16 - checksum: 0f206ef5ef5793456de66545a1bf6d8d52343bc6c6689d941cc16ea3f0b6b18a7710b4cc3946a61d021fda51f93b89adcd7c5d7fe249ea1739b0459e7a85b42c - languageName: node - linkType: hard - -"anymatch@npm:~3.1.1": - version: 3.1.1 - resolution: "anymatch@npm:3.1.1" +"anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": + version: 3.1.2 + resolution: "anymatch@npm:3.1.2" dependencies: normalize-path: ^3.0.0 picomatch: ^2.0.4 - checksum: cf61bbaf7f34d9f94dd966230b7a7f8f1f24e3e2185540741a2561118e108206d85101ee2fc9876cd756475dbe6573d84d91115c3abdbf53a64e26a5f1f06b67 + checksum: cd6c08eb8d435741a9de6f5695c75cfba747a50772929ca588235535c6a57d37f2c2b34057768f015fd92abb88108b122ed2e399faac6ae30363a8ca0b6107d0 languageName: node linkType: hard @@ -1913,6 +1969,13 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.2": + version: 1.0.4 + resolution: "available-typed-arrays@npm:1.0.4" + checksum: 9474a48bed7a4bfa5ea9389acc73da5e321fac5fc299b9ba58ee9fd41d6489b6f92663a76d1b723e80c06dfe340c6b3b9f2b08762db009c53ce891e68fb0a61c + languageName: node + linkType: hard + "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" @@ -2575,9 +2638,9 @@ __metadata: linkType: hard "balanced-match@npm:^1.0.0": - version: 1.0.0 - resolution: "balanced-match@npm:1.0.0" - checksum: f515a605fe1b59f476f7477c5e1d53ad55b4f42982fca1d57b6701906f4ad1f1ac90fd6587d92cc1af2edb43eecf979214dd847ee410a6de9db4ebf0dd128d62 + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 690643f3009a04289ac401079de5a780aae452f7625fb2884051cc847b231e6521ee15dd6430b066d3cf4bd8bb00bb7ff55b7d134f34b8f0b8c043806796f94e languageName: node linkType: hard @@ -2684,9 +2747,9 @@ __metadata: linkType: hard "blakejs@npm:^1.1.0": - version: 1.1.0 - resolution: "blakejs@npm:1.1.0" - checksum: 007d68a909d94cea612294bbab0cb2c26440c3a59eb340dfca046f1913cf4aa917da56088ad762f13921883ccc81c6eed2924ceac27f4ebbf9b4d25981a85fcd + version: 1.1.1 + resolution: "blakejs@npm:1.1.1" + checksum: 7f9f34cb7b9cc57588f2d438e47ff5284a2ae05370f826612625760816bb75c3a45fb520cd42a5d9fee251326cade24fb3d4d8a53151a057000dbb883af89c36 languageName: node linkType: hard @@ -2704,13 +2767,6 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:4.11.8": - version: 4.11.8 - resolution: "bn.js@npm:4.11.8" - checksum: c1c20812fc35367c13d5d4387b88b6b1f60dd685006d928fe7710d2b4c95ace661b7c4e400f484e189874481a813965ca32f12e9cbb31c3ced465d96fab5bcd8 - languageName: node - linkType: hard - "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.10.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.1, bn.js@npm:^4.11.6, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9, bn.js@npm:^4.4.0, bn.js@npm:^4.8.0": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -2997,6 +3053,31 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^15.0.5": + version: 15.2.0 + resolution: "cacache@npm:15.2.0" + dependencies: + "@npmcli/move-file": ^1.0.1 + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + glob: ^7.1.4 + infer-owner: ^1.0.4 + lru-cache: ^6.0.0 + minipass: ^3.1.1 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.2 + mkdirp: ^1.0.3 + p-map: ^4.0.0 + promise-inflight: ^1.0.1 + rimraf: ^3.0.2 + ssri: ^8.0.1 + tar: ^6.0.2 + unique-filename: ^1.1.1 + checksum: e7d6a93c34a409abb6050e4e09a103e859f0b53f592772a714e9e828f735cee8974cb36bd3e2d08fd78c2198d6d4b6005d0f1b3974e891a2ea4bd0ef02c80593 + languageName: node + linkType: hard + "cache-base@npm:^1.0.1": version: 1.0.1 resolution: "cache-base@npm:1.0.1" @@ -3111,9 +3192,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30000844": - version: 1.0.30001204 - resolution: "caniuse-lite@npm:1.0.30001204" - checksum: 650f320ece8aa5eb1caf406a143d93097af97b84070b9a01028f41a8feab1eae8364478c4e0e0571a962ef245c9b6fbf3ea611295c9882e5f97b8b83d97de2de + version: 1.0.30001241 + resolution: "caniuse-lite@npm:1.0.30001241" + checksum: 41d5c6073852771901e58b30d1be7ecb708f0c154191171ed0c14b988ebdd5fecd158c5f7cdd46e08cfa4fe6a2fde281795f1796236e96ba9355c621d73c8e87 languageName: node linkType: hard @@ -3147,8 +3228,8 @@ __metadata: linkType: hard "cbor@npm:^7.0.0": - version: 7.0.4 - resolution: "cbor@npm:7.0.4" + version: 7.0.5 + resolution: "cbor@npm:7.0.5" dependencies: "@cto.af/textdecoder": ^0.0.0 nofilter: ^2.0.3 @@ -3157,7 +3238,7 @@ __metadata: peerDependenciesMeta: bignumber.js: optional: true - checksum: 49c9fb70c3327a749725ac83b8fd179a17f086e63e8133df674fc2d4fbf50805fe104ad62a643e59c323d9fad0b049238c85de87d71d0548bd614bdd03542a9e + checksum: e9c4f36ad912cbf2ad53db39058c7b7a6e34c340f98ef34f7ceea14ec01aacb3c633b1410e332cd4ec1d544f4460aed4c50165e04cddda1b23ccd29eea858e78 languageName: node linkType: hard @@ -3175,7 +3256,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:4.1.0, chalk@npm:^4.1.0": +"chalk@npm:4.1.0": version: 4.1.0 resolution: "chalk@npm:4.1.0" dependencies: @@ -3209,6 +3290,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^4.1.0, chalk@npm:^4.1.1": + version: 4.1.1 + resolution: "chalk@npm:4.1.1" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 445c12db7aeed0046500a1e4184d31209a77d165654c885a789c41c8598a6a95bd2392180987cac572c967b93a2a730dda778bb7f87fa06ca63fd8592f8cc59f + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -3259,21 +3350,21 @@ __metadata: linkType: hard "chokidar@npm:^3.4.0": - version: 3.5.1 - resolution: "chokidar@npm:3.5.1" + version: 3.5.2 + resolution: "chokidar@npm:3.5.2" dependencies: - anymatch: ~3.1.1 + anymatch: ~3.1.2 braces: ~3.0.2 - fsevents: ~2.3.1 - glob-parent: ~5.1.0 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 is-binary-path: ~2.1.0 is-glob: ~4.0.1 normalize-path: ~3.0.0 - readdirp: ~3.5.0 + readdirp: ~3.6.0 dependenciesMeta: fsevents: optional: true - checksum: 61b3f710f9e7dc69d76f638d8b0d37bad586497444165125ca8062f7192695f35403b5f622cbd7dfdd06805201ceaba40ff90e53ea2974df9a8087861192a99b + checksum: 52fbff3acebf06ec0125872110f6c8403e66cd3d613264c83405496e199554d99380342d9b3a7ffd7910c53c5865e242ed7dd72fcb2e883d8e3ad3f3883aee6c languageName: node linkType: hard @@ -3340,6 +3431,13 @@ __metadata: languageName: node linkType: hard +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: e291ce2b8c8c59e6449ac9a7a726090264bea6696e5343b21385e16d279c808ca09d73a1abea8fd23a9b7699e6ef5ce582df203511f71c8c27666bf3b2e300c5 + languageName: node + linkType: hard + "cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -3548,12 +3646,12 @@ __metadata: linkType: hard "config-chain@npm:^1.1.11": - version: 1.1.12 - resolution: "config-chain@npm:1.1.12" + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" dependencies: ini: ^1.3.4 proto-list: ~1.2.1 - checksum: caf4b96491c2ea6fc5e6e23cebc526040cf21779ffc544c705a21b788f7dc3d34bc439878dcdfae8c15830052be55d62b26acada13da1236142d3efc5b4329be + checksum: 047fb0971ba48cf242aa390e8e404ced375e136e2e4a8b753d2ce2b83928d62ef6b3ec74ee35e8f5b2d7cd9cb38fedd7962a83d64422c10afd7e9acfa83ecbb1 languageName: node linkType: hard @@ -3592,11 +3690,11 @@ __metadata: linkType: hard "convert-source-map@npm:^1.5.1": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" + version: 1.8.0 + resolution: "convert-source-map@npm:1.8.0" dependencies: safe-buffer: ~5.1.1 - checksum: b10fbf041e3221c65e1ab67f05c8fcbad9c5fd078c62f4a6e05cb5fddc4b5a0e8a17c6a361c6a44f011b1a0c090b36aa88543be9dfa65da8c9e7f39c5de2d4df + checksum: 09eeb0b4dcc04e26c89a17f08b835a84c9024715dc839c07cff43e87e155011f6837571997bffed64de54832823c5e3931b54b211a369d379efc392a739bc972 languageName: node linkType: hard @@ -3636,9 +3734,9 @@ __metadata: linkType: hard "core-js-pure@npm:^3.0.1": - version: 3.9.1 - resolution: "core-js-pure@npm:3.9.1" - checksum: 9cbb38523f6360c068991af52bb91a55cfdc3dd3cda0964b8e232caa795b95c08523d2fb1c80b76ffd2a8446e4822a6ba960f3bd762353ad0f8470f2fd3c652e + version: 3.15.2 + resolution: "core-js-pure@npm:3.15.2" + checksum: 098de70a85d245422046c8859d699f8d1a5e971d12074f26e108a3db539430e641af4bb311888efbb944cfdc747d4b56ec8a1970458a2ce444cc834cabdf1772 languageName: node linkType: hard @@ -3815,7 +3913,19 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.1, debug@npm:^4.0.1, debug@npm:^4.1.1": +"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1": + version: 4.3.2 + resolution: "debug@npm:4.3.2" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 5543570879e2274f6725d4285a034d6e0822d35faefc6f55965933fb440e8c21eb3a0bef934e66f4b6b491f898ee2de37cab980e9d4fd61372136c19d3ce4527 + languageName: node + linkType: hard + +"debug@npm:4.3.1": version: 4.3.1 resolution: "debug@npm:4.3.1" dependencies: @@ -4043,7 +4153,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:~1.1.2": +"depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: f45566ff7019a346852f095768a380778ed544de24e103b479fd5d3e61982d670efbb5234c09d0588d7fdb09c26c48283d7150e4be5e6ce5d3d37cd268d75c4d @@ -4215,9 +4325,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.3.47": - version: 1.3.700 - resolution: "electron-to-chromium@npm:1.3.700" - checksum: e28b9407c87bc32f688f7940b6dc5f89907a3a17cf7e088daa81e2b45ef801eda68da69f156760bdf8f5e823e9edaa099d5e90ad37c5b5d0868b4e4153fc9b52 + version: 1.3.763 + resolution: "electron-to-chromium@npm:1.3.763" + checksum: 2fae294cc9b7a38629af9d5eaa7b0ad6d4fd5b2691628583c7d5a36a7a2d588018fea6bff6ad862d742c37618cd8daf7b562a119fa4684777db2b2efd93a6e3a languageName: node linkType: hard @@ -4285,7 +4395,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11": +"encoding@npm:^0.1.11, encoding@npm:^0.1.12": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -4303,7 +4413,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.0": +"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6": version: 2.3.6 resolution: "enquirer@npm:2.3.6" dependencies: @@ -4319,6 +4429,13 @@ __metadata: languageName: node linkType: hard +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 14e09e9990bcd0dd8e91881bf6e0ac6177b9cd72404951e443e8052f6272f276dbe1f3a34c7802fd6dee5276b34134b091665e18cebc9e1ce0a4519561f16c44 + languageName: node + linkType: hard + "errno@npm:~0.1.1": version: 0.1.8 resolution: "errno@npm:0.1.8" @@ -4339,9 +4456,9 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.0-next.2": - version: 1.18.0 - resolution: "es-abstract@npm:1.18.0" +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2": + version: 1.18.3 + resolution: "es-abstract@npm:1.18.3" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 @@ -4351,15 +4468,15 @@ __metadata: has-symbols: ^1.0.2 is-callable: ^1.2.3 is-negative-zero: ^2.0.1 - is-regex: ^1.1.2 - is-string: ^1.0.5 - object-inspect: ^1.9.0 + is-regex: ^1.1.3 + is-string: ^1.0.6 + object-inspect: ^1.10.3 object-keys: ^1.1.1 object.assign: ^4.1.2 string.prototype.trimend: ^1.0.4 string.prototype.trimstart: ^1.0.4 - unbox-primitive: ^1.0.0 - checksum: 019fa7c51e10532cd07ca3aa9b76e4c6ad6f421e15064205d144da08da54f8fc057edc262f6f95775e0b249ecbb753b497050dd75ab69a3c1c89cb9b734e42ca + unbox-primitive: ^1.0.1 + checksum: 85cd62cabad4714e945e1ed8ed1c5086237daa544448b1562765857dbe33f3415f56e53b03552ea4599f8e836f7e6ecd4ce70560b23a534f78f77780565d6985 languageName: node linkType: hard @@ -4678,18 +4795,7 @@ __metadata: languageName: node linkType: hard -"eth-lib@npm:0.2.7": - version: 0.2.7 - resolution: "eth-lib@npm:0.2.7" - dependencies: - bn.js: ^4.11.6 - elliptic: ^6.4.0 - xhr-request-promise: ^0.1.2 - checksum: c5da9c6523a980d86492ff42d707aa4146c12cb5bc3365da03c638c2c35705cc0e22684b026b6170a81784e4aa5d404ef82657403fa11da63fdfafa1a13821e9 - languageName: node - linkType: hard - -"eth-lib@npm:0.2.8, eth-lib@npm:^0.2.8": +"eth-lib@npm:0.2.8": version: 0.2.8 resolution: "eth-lib@npm:0.2.8" dependencies: @@ -4791,11 +4897,11 @@ __metadata: linkType: hard "ethereum-bloom-filters@npm:^1.0.6": - version: 1.0.9 - resolution: "ethereum-bloom-filters@npm:1.0.9" + version: 1.0.10 + resolution: "ethereum-bloom-filters@npm:1.0.10" dependencies: js-sha3: ^0.8.0 - checksum: 0a1ae56da35ffaea4480a631787bb068b9dc73af4630e988e4c5e1392b0ddd4ee05a2bc8e2435c2fb9f3367c7f44882562442e0139ec6e73797c8e630ad77756 + checksum: b1e91742b00aaea7b02833d2306998e7e19766bea5810f3dcb86f7aaadfea7cbdad2928777ed8118076975eb834e2bf5b93693d395ecb07e5215aa0adb8e20ad languageName: node linkType: hard @@ -4868,11 +4974,11 @@ __metadata: "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version: 0.6.8 - resolution: "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git#commit=1a27c59c15ab1e95ee8e5c4ed6ad814c49cc439e" + resolution: "ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=ee3994657fa7a427238e6ba92a84d0b529bbcde0" dependencies: bn.js: ^4.11.8 ethereumjs-util: ^6.0.0 - checksum: d97abbea63cb78ef095a8fc5ca9fe2c7f786108121976c1f473ce62e919af19b0a3c3029de4a292b19eca9459f29bd7aa83565934661edb65747dc1ea8a63633 + checksum: b408bcf74e0e0c5ef30883296fd32ec9fb048f52928f66c74b4b2e15108399231075e35541a6246cf1ce4bfadcf13582d4c165358266caf2ab54737c88d7cbec languageName: node linkType: hard @@ -5055,8 +5161,8 @@ __metadata: linkType: hard "ethereumjs-util@npm:^7.0.2, ethereumjs-util@npm:^7.0.3": - version: 7.0.9 - resolution: "ethereumjs-util@npm:7.0.9" + version: 7.0.10 + resolution: "ethereumjs-util@npm:7.0.10" dependencies: "@types/bn.js": ^5.1.0 bn.js: ^5.1.2 @@ -5064,7 +5170,7 @@ __metadata: ethereum-cryptography: ^0.1.3 ethjs-util: 0.1.6 rlp: ^2.2.4 - checksum: 9ead09adfbd2bb447d48c056afeee75757c805f9a1f4758234a3239b15672699bbd518b0da9273dd2c85caf4684c5dac792bcc582f61b3e813e503290a925ee7 + checksum: 4dd40fd92063179af80be2384c0faa39b93d9583bbaf0ab2f418aefce721c6311b420ca91bc03057568a360b01c304328439f418cc152df32f1a25f7da0ad1d0 languageName: node linkType: hard @@ -5127,41 +5233,41 @@ __metadata: languageName: node linkType: hard -"ethers@npm:5.0.32, ethers@npm:^5.0.0, ethers@npm:^5.0.1, ethers@npm:^5.0.2": - version: 5.0.32 - resolution: "ethers@npm:5.0.32" - dependencies: - "@ethersproject/abi": 5.0.13 - "@ethersproject/abstract-provider": 5.0.10 - "@ethersproject/abstract-signer": 5.0.14 - "@ethersproject/address": 5.0.11 - "@ethersproject/base64": 5.0.9 - "@ethersproject/basex": 5.0.9 - "@ethersproject/bignumber": 5.0.15 - "@ethersproject/bytes": 5.0.11 - "@ethersproject/constants": 5.0.10 - "@ethersproject/contracts": 5.0.12 - "@ethersproject/hash": 5.0.12 - "@ethersproject/hdnode": 5.0.10 - "@ethersproject/json-wallets": 5.0.12 - "@ethersproject/keccak256": 5.0.9 - "@ethersproject/logger": 5.0.10 - "@ethersproject/networks": 5.0.9 - "@ethersproject/pbkdf2": 5.0.9 - "@ethersproject/properties": 5.0.9 - "@ethersproject/providers": 5.0.24 - "@ethersproject/random": 5.0.9 - "@ethersproject/rlp": 5.0.9 - "@ethersproject/sha2": 5.0.9 - "@ethersproject/signing-key": 5.0.11 - "@ethersproject/solidity": 5.0.10 - "@ethersproject/strings": 5.0.10 - "@ethersproject/transactions": 5.0.11 - "@ethersproject/units": 5.0.11 - "@ethersproject/wallet": 5.0.12 - "@ethersproject/web": 5.0.14 - "@ethersproject/wordlists": 5.0.10 - checksum: c3bb6231b355520f3b1ab59f090454d3754caf4902f7bd8b3842263ab6fa38e57a48fba6ddbbe7228b4d259dcb55f2ce652dac90b3819ce15c266688690dfd79 +"ethers@npm:5.4.0, ethers@npm:^5.0.0, ethers@npm:^5.0.1, ethers@npm:^5.0.2": + version: 5.4.0 + resolution: "ethers@npm:5.4.0" + dependencies: + "@ethersproject/abi": 5.4.0 + "@ethersproject/abstract-provider": 5.4.0 + "@ethersproject/abstract-signer": 5.4.0 + "@ethersproject/address": 5.4.0 + "@ethersproject/base64": 5.4.0 + "@ethersproject/basex": 5.4.0 + "@ethersproject/bignumber": 5.4.0 + "@ethersproject/bytes": 5.4.0 + "@ethersproject/constants": 5.4.0 + "@ethersproject/contracts": 5.4.0 + "@ethersproject/hash": 5.4.0 + "@ethersproject/hdnode": 5.4.0 + "@ethersproject/json-wallets": 5.4.0 + "@ethersproject/keccak256": 5.4.0 + "@ethersproject/logger": 5.4.0 + "@ethersproject/networks": 5.4.0 + "@ethersproject/pbkdf2": 5.4.0 + "@ethersproject/properties": 5.4.0 + "@ethersproject/providers": 5.4.0 + "@ethersproject/random": 5.4.0 + "@ethersproject/rlp": 5.4.0 + "@ethersproject/sha2": 5.4.0 + "@ethersproject/signing-key": 5.4.0 + "@ethersproject/solidity": 5.4.0 + "@ethersproject/strings": 5.4.0 + "@ethersproject/transactions": 5.4.0 + "@ethersproject/units": 5.4.0 + "@ethersproject/wallet": 5.4.0 + "@ethersproject/web": 5.4.0 + "@ethersproject/wordlists": 5.4.0 + checksum: 15d06eb396aca81859b5b4169c11e6615b02f1b86f93adb87ad414a2ed1301008fef11b8532a00ed0f690972cc5237ccd963b3c0d1639f46c855ad3562937bb2 languageName: node linkType: hard @@ -5209,13 +5315,6 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:3.1.2": - version: 3.1.2 - resolution: "eventemitter3@npm:3.1.2" - checksum: fa1a206c4e4e8e427542f7fdfa10bd073a4ddf2510fb22e2f9a33b9aa7a0d5669bffba9b889e22d8c1c976af51a92dab274845e58d626ddb2d3563ed4d5d50dc - languageName: node - linkType: hard - "eventemitter3@npm:4.0.4": version: 4.0.4 resolution: "eventemitter3@npm:4.0.4" @@ -5223,13 +5322,6 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.0": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 1fc12c7bc3b4194c50975827e72d56ff57c32b75a4c7dbf4d5eebf3c8371f6f1aad6799150b609de1b867c0d8a9885c08b6ca5e7e0dc437d6152f3063b2607dd - languageName: node - linkType: hard - "events@npm:^3.0.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -5237,6 +5329,13 @@ __metadata: languageName: node linkType: hard +"evm-chains@npm:0.2.0": + version: 0.2.0 + resolution: "evm-chains@npm:0.2.0" + checksum: 180b114c63e30e11df4e6b022d09356f8b7e287f822d287c6cb0c73d5cc86402bcdea3185978fab78522fadba0dc5172e3e3d7aba3689c4c5f96de61d8ac348c + languageName: node + linkType: hard + "evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -5435,16 +5534,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.0.3": - version: 3.2.5 - resolution: "fast-glob@npm:3.2.5" + version: 3.2.6 + resolution: "fast-glob@npm:3.2.6" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.0 + glob-parent: ^5.1.2 merge2: ^1.3.0 - micromatch: ^4.0.2 - picomatch: ^2.2.1 - checksum: 1a33c4a68d14cb2314c07a451689bc311bde87b09c525dd2064321165127a38a553457d121e2d3ecdd022374e3d53afb82cbb57f5694414d3406ce14ed6c0a1f + micromatch: ^4.0.4 + checksum: 0ba488ef503d250e1881bad5d01bc1393d6ca5b1243d354c9a2c8ec2b36771179b11f3e2d4e607a454aac8f9bb29682f0c0208f6cc87b6975bb82067a54960b2 languageName: node linkType: hard @@ -5706,12 +5804,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.12.1": - version: 1.13.3 - resolution: "follow-redirects@npm:1.13.3" + version: 1.14.1 + resolution: "follow-redirects@npm:1.14.1" peerDependenciesMeta: debug: optional: true - checksum: 9ad74c3b66ad5c32d8c009a2afb4e5c1b9e5dbe1f631419296c21f8e4f9976ed2c52f9a676c4acdd1d7f41a8f17a03dfaa3704993b25b5965eb11bc9dc9a8ef5 + checksum: 761a18699688b19d66b3e9199ecaf9cd39ede953f3529299c7fca4190b27b855c17c491170977844d5db5e169ffc35ebae999bb0833e9c9c61988d19c20ae7ab languageName: node linkType: hard @@ -5731,6 +5829,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.5": + version: 2.0.5 + resolution: "foreach@npm:2.0.5" + checksum: 890d6c3dec185be6b1f7a94003d67d1b36a068fd7ac5a89f92818c3459d7d43e040a0b228a632e2e50d8a5aa804da6a5d27258ccbc1b7b724fe39eea3834f240 + languageName: node + linkType: hard + "forever-agent@npm:~0.6.1": version: 0.6.1 resolution: "forever-agent@npm:0.6.1" @@ -5760,6 +5865,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: ecbe8f41bcf5c415f38e39058b34598a9261bb74a3d54b633d0b5dd8b7cf9a30b0626cd06ae8e79874a2ca88c222041142a7893e5afdd35fdfc3272264d03d44 + languageName: node + linkType: hard + "form-data@npm:~2.3.2": version: 2.3.3 resolution: "form-data@npm:2.3.3" @@ -5771,10 +5887,10 @@ __metadata: languageName: node linkType: hard -"forwarded@npm:~0.1.2": - version: 0.1.2 - resolution: "forwarded@npm:0.1.2" - checksum: 568d862ad1c514813fc62dc1bd58b8669b16d4ee2e634a6fc71f4849df798883ab94e63d8e1b35a17af51b2b39ca869e672c7310efe42fc7b9bad43a80b5ff87 +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 1e84548d8ffb072d7edd4c5375ce71e2631c28efcd1084c4578f1a71dd6c4b0d58a6ddcdc923514766030cf38068258971a919e91ffa472460ec0f6dac7209ea languageName: node linkType: hard @@ -5792,13 +5908,6 @@ __metadata: languageName: node linkType: hard -"fp-ts@npm:^2.7.1": - version: 2.9.5 - resolution: "fp-ts@npm:2.9.5" - checksum: de7dfc21068ad4254b05f558c67b3abafc442b7756933b0932d0de593cf172c0d52a38bd8eab4c19ab1a7c33ac6c3a1d4f8723dcf3cdbee01c3f7e1d3199b793 - languageName: node - linkType: hard - "fragment-cache@npm:^0.2.1": version: 0.2.1 resolution: "fragment-cache@npm:0.2.1" @@ -5845,6 +5954,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^10.0.0": + version: 10.0.0 + resolution: "fs-extra@npm:10.0.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 84632d143fe3125b8c3c2b1fedbbdfcfb84fc3e087522b4e138cc07edf574619925713a6609f6d5e53ede2e31ab319c7d528ea4a4a770ba6622a16bf4447cd8b + languageName: node + linkType: hard + "fs-extra@npm:^4.0.2, fs-extra@npm:^4.0.3": version: 4.0.3 resolution: "fs-extra@npm:4.0.3" @@ -5878,7 +5998,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.0.0": +"fs-extra@npm:^9.1.0": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" dependencies: @@ -5931,7 +6051,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@~2.3.1#builtin": +"fsevents@patch:fsevents@~2.3.2#builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#builtin::version=2.3.2&hash=11e9ea" dependencies: @@ -5949,7 +6069,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -fsevents@~2.3.1: +fsevents@~2.3.2: version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -6155,7 +6275,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"glob-parent@npm:^5.1.0, glob-parent@npm:~5.1.0": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -6191,9 +6311,9 @@ fsevents@~2.3.1: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.1.6": - version: 7.1.6 - resolution: "glob@npm:7.1.6" +"glob@npm:^7.0.0, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:~7.1.6": + version: 7.1.7 + resolution: "glob@npm:7.1.7" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 @@ -6201,7 +6321,7 @@ fsevents@~2.3.1: minimatch: ^3.0.4 once: ^1.3.0 path-is-absolute: ^1.0.0 - checksum: 789977b52432865bd63846da5c75a6efc2c56abdc0cb5ffcdb8e91eeb67a58fa5594c1195d18b2b4aff99675b0739ed6bd61024b26562e0cca18c8f993efdc82 + checksum: 352f74f08247db5420161a2f68f2bd84b53228b5fcfc9dcc37cd54d3f19ec0232495d84aeff1286d0727059e9fdc1031400e00b971bdc59e30f8f82b199c9d02 languageName: node linkType: hard @@ -6340,7 +6460,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4": +"graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.6 resolution: "graceful-fs@npm:4.2.6" checksum: 84d39c7756892553da990a9db7e45f844b3309b37b5a00174cbb4748476f2250c54f24594d4d252f64f085c65c2fdac7c809419bf6d55f0e6e42eb07ac0f5bf2 @@ -6389,12 +6509,12 @@ fsevents@~2.3.1: languageName: node linkType: hard -"hardhat-abi-exporter@npm:2.1.2": - version: 2.1.2 - resolution: "hardhat-abi-exporter@npm:2.1.2" +"hardhat-abi-exporter@npm:2.2.1": + version: 2.2.1 + resolution: "hardhat-abi-exporter@npm:2.2.1" peerDependencies: hardhat: ^2.0.0 - checksum: 376070262dc56b7d6fa23431fbd7052282875ebae65eb1e20bc161db442edddff086a79a0ba4c25566b6c4b07513ee8dab8fdc7ae74fe26901bef01a684ba80e + checksum: f343d5ec2238ac21f4b90a168b67a4ae07bdfc66810886382564dca458acb1ff81684e8e3d24b878279d0e8e747730825c36cac915da8f15c5fa6dcb02a6b2dc languageName: node linkType: hard @@ -6407,43 +6527,45 @@ fsevents@~2.3.1: languageName: node linkType: hard -"hardhat-deploy-ethers@npm:0.3.0-beta.7": - version: 0.3.0-beta.7 - resolution: "hardhat-deploy-ethers@npm:0.3.0-beta.7" +"hardhat-deploy-ethers@npm:0.3.0-beta.10": + version: 0.3.0-beta.10 + resolution: "hardhat-deploy-ethers@npm:0.3.0-beta.10" peerDependencies: ethers: ^5.0.0 hardhat: ^2.0.0 - checksum: aefef1f4783b37325ea0c75401fddc7f4694c6f787d201f65361b8eaaab0419a94fbc1f55c6ebb73dabf5335f8569728e1e8e5e6083222be06cdb54298d6dc27 + checksum: b3d6960cdaa84d02faedec75e3b7b3353a8d4b8bd3ad4b43e6ac592fa4757074e127025d88ea8e31f1b088353e36a34483f9bcfec3e9288f90a887d7e4e204ce languageName: node linkType: hard -"hardhat-deploy@npm:0.7.0-beta.47": - version: 0.7.0-beta.47 - resolution: "hardhat-deploy@npm:0.7.0-beta.47" +"hardhat-deploy@npm:0.8.9": + version: 0.8.9 + resolution: "hardhat-deploy@npm:0.8.9" dependencies: - "@ethersproject/abi": ^5.0.2 - "@ethersproject/abstract-signer": ^5.0.2 - "@ethersproject/address": ^5.0.2 - "@ethersproject/bignumber": ^5.0.5 - "@ethersproject/bytes": ^5.0.2 - "@ethersproject/contracts": ^5.0.2 - "@ethersproject/providers": ^5.0.5 - "@ethersproject/solidity": ^5.0.2 - "@ethersproject/transactions": ^5.0.2 - "@ethersproject/wallet": ^5.0.2 + "@ethersproject/abi": ^5.3.1 + "@ethersproject/abstract-signer": ^5.3.0 + "@ethersproject/address": ^5.3.0 + "@ethersproject/bignumber": ^5.3.0 + "@ethersproject/bytes": ^5.3.0 + "@ethersproject/contracts": ^5.3.0 + "@ethersproject/providers": ^5.3.1 + "@ethersproject/solidity": ^5.3.0 + "@ethersproject/transactions": ^5.3.0 + "@ethersproject/wallet": ^5.3.0 "@types/qs": ^6.9.4 axios: ^0.21.1 - chalk: ^4.1.0 + chalk: ^4.1.1 chokidar: ^3.4.0 debug: ^4.1.1 - form-data: ^3.0.0 - fs-extra: ^9.0.0 + enquirer: ^2.3.6 + form-data: ^4.0.0 + fs-extra: ^10.0.0 match-all: ^1.2.6 murmur-128: ^0.2.1 qs: ^6.9.4 peerDependencies: + "@ethersproject/hardware-wallets": ^5.0.14 hardhat: ^2.0.0 - checksum: 279e11808539cd6de35203a40df7efe0c171bf865f3501485da4412b260a0c5052371f10d96fc75820c89db9c62bd36dbaca4f9e2ae6f508b09ee10c75eff53c + checksum: 2527a5acc8ae6d9454336aeedab902c92e6e931cfd19eda678189ac4a74e52e14b5ed55b836de6421ab1c294787174acd581d18210793d9d260b1fea237cff18 languageName: node linkType: hard @@ -6650,7 +6772,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" dependencies: @@ -6698,9 +6820,9 @@ fsevents@~2.3.1: linkType: hard "hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.6.0": - version: 2.8.8 - resolution: "hosted-git-info@npm:2.8.8" - checksum: 3ecc389dc6ecbd5463fada7e04461e96f3c817fe2f989ca41e9dd3b503745a0bfa26fba405861b2831ca64edc1abc5d2fbc97ee977303f89650dac4fbfdc2d7a + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: cf4dfac9b94aa601ae889e7e3cb5a7021a8517b517f933fec0b3a8dc5002edece01475c82f70cc18a051a5a8105bcb2fbe4e64f0b8f321eb99054a49a75b5aa3 languageName: node linkType: hard @@ -6723,7 +6845,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"http-cache-semantics@npm:^4.0.0": +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" checksum: 451df9784af2acbe0cc1fd70291285c08ca4a8966ab5ee4d3975e003d1ad4d74c81473086d628f31296b31221966fda8bc5ea1e29dd8f1f33f9fc2b0fdca65ca @@ -6763,6 +6885,17 @@ fsevents@~2.3.1: languageName: node linkType: hard +"http-proxy-agent@npm:^4.0.1": + version: 4.0.1 + resolution: "http-proxy-agent@npm:4.0.1" + dependencies: + "@tootallnate/once": 1 + agent-base: 6 + debug: 4 + checksum: 6703aeb5c5d398d93757c38eb0d77df10239ff3fefee27614aad2831f06f9ca6c8b21c43e9ff02464b5284cba3c6cedefffd210750871277ebf652cbe3230566 + languageName: node + linkType: hard + "http-response-object@npm:^3.0.1": version: 3.0.2 resolution: "http-response-object@npm:3.0.2" @@ -6793,6 +6926,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 4a08769434132a229a6153e77c869a9fe7132dc003d90119d54958e7b75feb65a3c4eca19fb18921568878ac455b6f399013279ad33248d94bd61a25def1fdda + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -6803,11 +6945,11 @@ fsevents@~2.3.1: linkType: hard "iconv-lite@npm:^0.6.2": - version: 0.6.2 - resolution: "iconv-lite@npm:0.6.2" + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" dependencies: safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 0785670120f57b5912c6a4391d6a69914906746d259b59de884dc6d324a52a0abde38d5804f67370192fec6878d01e7306de525568abcea70eb41c2bceb9f547 + checksum: 9b4f24db662b717340ae20ec9ebbaf0648b378a2d0fc64aef83c6bccdd9918b622216c020e177ddf2d02eeff8456a732e85b6d989eb2cd3a40519f3e179b273c languageName: node linkType: hard @@ -6896,6 +7038,20 @@ fsevents@~2.3.1: languageName: node linkType: hard +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 3e54996c6e15ca00a7a4403be705bce4fb3bb4ac637da2e1473006e42a651863f53bfb8c3438c1b3aac77817768ac0cde0e7b7a81a6cf24a1286227a06510dbf + languageName: node + linkType: hard + +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 56aa1d87b05936947765b1d9ace5f8d7ccd8cf6ccc1d69b67e8eaaee0e1ee2960d5accd51deb50d884665a5a1af3bcbb80f5d249c01a00280365bba59db9687b + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -6997,12 +7153,10 @@ fsevents@~2.3.1: languageName: node linkType: hard -"io-ts@npm:^2.2.9": - version: 2.2.16 - resolution: "io-ts@npm:2.2.16" - peerDependencies: - fp-ts: ^2.5.0 - checksum: bb664d7ff1fbbe616df084be249328eb3cf5ce2c99efb796f25cc0b3f2f0c3d2bfa1aa041899c5e6db36057cc2043150f5818054d3afbacb1929b5f3d9d10d02 +"ip@npm:^1.1.5": + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 3ad007368cf797ec9b73fbac0a644077198dd85a128d0fe39697a78a9cdd47915577eee5c4eca9933549b575ac4716107896c2d4aa43a1622b3f72104232cad4 languageName: node linkType: hard @@ -7048,9 +7202,9 @@ fsevents@~2.3.1: linkType: hard "is-bigint@npm:^1.0.1": - version: 1.0.1 - resolution: "is-bigint@npm:1.0.1" - checksum: dd132ab80f389d6968315d491706c5dbb3f6c4bf35b64085d74895e7f3516123ab1bcf6a9a83a63cfede688f44550a08713ed37f3ae9153afe8d0cf569a8b956 + version: 1.0.2 + resolution: "is-bigint@npm:1.0.2" + checksum: 818680e551dc0a33ed8662b869cd3cb3236f6b94994850c1701200816cf9ad7e82a24fb4efbfc7046f167cd6429a71ba3672c73a7507093164c6ee9123bf30a9 languageName: node linkType: hard @@ -7064,11 +7218,11 @@ fsevents@~2.3.1: linkType: hard "is-boolean-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-boolean-object@npm:1.1.0" + version: 1.1.1 + resolution: "is-boolean-object@npm:1.1.1" dependencies: - call-bind: ^1.0.0 - checksum: 1d6047a022aa49cdf8580ac8b3d6d25da0d33a65ae00142bec2ba95c6c889de84693a0ef5acc9eabb59ba9e66fb473f47fa589ec22dd8e7ef8d88b6774e3adc6 + call-bind: ^1.0.2 + checksum: 9a45d29418f5cc7ff5ddf8eebf4a7d6bd2b3be730000e42d339029658db40e9e0ecafb1397588f6f5f17728ea9b7a8959b5d2ee000db5d95ff126c8b54218391 languageName: node linkType: hard @@ -7105,11 +7259,11 @@ fsevents@~2.3.1: linkType: hard "is-core-module@npm:^2.2.0": - version: 2.2.0 - resolution: "is-core-module@npm:2.2.0" + version: 2.4.0 + resolution: "is-core-module@npm:2.4.0" dependencies: has: ^1.0.3 - checksum: 2344744de98a3bc22e2bb30895f307d7889f09e963f9bcb1cc321788f508c8b463f75e0a9ca009eeeb8eb9465181b5c15f1ec9299a6bb6921cfbb2423892e0ba + checksum: caa2b30873ed14dff76e5351e3c55a677b890cf19cc4263e9894702eb4bd64f81ce78552daad878ba72adcdc9e62cad45ca57928fc8b4bdc84a7ff8acf934389 languageName: node linkType: hard @@ -7132,9 +7286,9 @@ fsevents@~2.3.1: linkType: hard "is-date-object@npm:^1.0.1": - version: 1.0.2 - resolution: "is-date-object@npm:1.0.2" - checksum: 0e322699464a99da638c8a583b74dfb791732b6bc9c102bc0b7ac6303d83c86b9935f19b8d2ed4de52092241190c8826b099cb31972dea49a99b755293c0b1cf + version: 1.0.4 + resolution: "is-date-object@npm:1.0.4" + checksum: f159a5cff60f657792a9677892b87d0802ac95e15cf26e7bba7f36064e8ffde41c8ac73921629ad976f14a8c0e2fe785818ef67172b906be0300919d4d4ea553 languageName: node linkType: hard @@ -7168,11 +7322,11 @@ fsevents@~2.3.1: linkType: hard "is-docker@npm:^2.0.0": - version: 2.1.1 - resolution: "is-docker@npm:2.1.1" + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" bin: is-docker: cli.js - checksum: dc8e36fa63a246728e5dd4b3ab2d454f685d3dcc1fecbe62144a0c3bc1f5eef0cf67cb3af1b4a9d274dd18877b954b651c7ef0a483abae6a7a2baa8f987554ba + checksum: 7dbd6eecfe91984ef28ee80b13bd20ce4b27c1645542ae714a3976c881f7d166a3dcddb8b4f67c22285c4505f0b0e585a3b12feb4518b17f86b8a15b9f55c718 languageName: node linkType: hard @@ -7236,6 +7390,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"is-generator-function@npm:^1.0.7": + version: 1.0.9 + resolution: "is-generator-function@npm:1.0.9" + checksum: d0583d0917769a107ffb6811129a55c5db5c85cc432a0f6967296c46f35c83b0110a94e0972c9f2ced2905f822b81c0c9674fcf577f50c14e0871bc54204546a + languageName: node + linkType: hard + "is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": version: 4.0.1 resolution: "is-glob@npm:4.0.1" @@ -7262,6 +7423,13 @@ fsevents@~2.3.1: languageName: node linkType: hard +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 669ea37e8fafa800d076e7e7c64eadc9fd2a0607a3bc67e602d37092f2fec91c29929cdeec94e694607a88a2e0bdc7f8e122a9819dacadf05a9c5767c9672eb7 + languageName: node + linkType: hard + "is-natural-number@npm:^4.0.1": version: 4.0.1 resolution: "is-natural-number@npm:4.0.1" @@ -7277,9 +7445,9 @@ fsevents@~2.3.1: linkType: hard "is-number-object@npm:^1.0.4": - version: 1.0.4 - resolution: "is-number-object@npm:1.0.4" - checksum: 5bae52129f0e097485da25cbe89307dd46cf5ce7640edb6fcf40350d59c9f909039713d35fbeb0f1de1df817da6ec6e88aceca41b01e5ac989f6fdfc15c438a7 + version: 1.0.5 + resolution: "is-number-object@npm:1.0.5" + checksum: 2725b594081cb159766a8fca6af2dab65da601caf656a1be1baf6c100ad614cae2fa1a6c7c1dfc90ad8e78cf668d2761f9efaeac5dd7ab7ecd5d648e7d240399 languageName: node linkType: hard @@ -7331,13 +7499,13 @@ fsevents@~2.3.1: languageName: node linkType: hard -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.2": - version: 1.1.2 - resolution: "is-regex@npm:1.1.2" +"is-regex@npm:^1.0.4, is-regex@npm:^1.1.3": + version: 1.1.3 + resolution: "is-regex@npm:1.1.3" dependencies: call-bind: ^1.0.2 - has-symbols: ^1.0.1 - checksum: 5e2f80f495f5297d1295730820a4be31f3848ca92357cfef1b2a61c09fe0fcd3f68c34f3042a5b81885e249cd50eac8efac472ad6da7ecb497bb2d7bad402a9a + has-symbols: ^1.0.2 + checksum: 1beb14b9f8df6e302c6ba0cafdea4a393fd58b93cd66b4ef3017b74f72683c50f7a82d08c86e20e5b555a2a6a5e5b681e62eb4e4b49e62986da01ffd073d19eb languageName: node linkType: hard @@ -7364,19 +7532,32 @@ fsevents@~2.3.1: languageName: node linkType: hard -"is-string@npm:^1.0.5": - version: 1.0.5 - resolution: "is-string@npm:1.0.5" - checksum: c64c791eb75935db9055291bc598edc22f03d3879b8a050b2955ba8087642d006338a1dedf7ac414c95f985c77c2d6fce655498d33c0df248fa92228a9945720 +"is-string@npm:^1.0.5, is-string@npm:^1.0.6": + version: 1.0.6 + resolution: "is-string@npm:1.0.6" + checksum: 5eb4860eafb9bfd4d9adf56bd530ca0e0cabade776df1e9394e5ca9376bdd6fa0a99879c2b0c3a517076fa31ac739821c2956be6d30ee1458f50ca24a4962478 languageName: node linkType: hard "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.3 - resolution: "is-symbol@npm:1.0.3" + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 2794e0b9c3d6ca760b2f46c0132917746ce95fe034556e0e4da341e59f6171c9b733d2f0942475ecdee2e5b6d80a6e021eba200076fefcc79348ac48d56ad4b5 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.3": + version: 1.1.5 + resolution: "is-typed-array@npm:1.1.5" dependencies: + available-typed-arrays: ^1.0.2 + call-bind: ^1.0.2 + es-abstract: ^1.18.0-next.2 + foreach: ^2.0.5 has-symbols: ^1.0.1 - checksum: 753aa0cf95069387521b110c6646df4e0b5cce76cf604521c26b4f5d30a997a95036ed5930c0cca9e850ac6fccb04de551cc95aab71df471ee88e04ed1a96f21 + checksum: 35b216dba19e3005bf14d3b46b2a20de244818e2bd726c344a011f89673d9b50ba35b0ace81f8dfd870d96f82763389bb5cc00cd7718ac317076b6f06479c03d languageName: node linkType: hard @@ -8176,6 +8357,29 @@ fsevents@~2.3.1: languageName: node linkType: hard +"make-fetch-happen@npm:^8.0.14": + version: 8.0.14 + resolution: "make-fetch-happen@npm:8.0.14" + dependencies: + agentkeepalive: ^4.1.3 + cacache: ^15.0.5 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^4.0.1 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^6.0.0 + minipass: ^3.1.3 + minipass-collect: ^1.0.2 + minipass-fetch: ^1.3.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + promise-retry: ^2.0.1 + socks-proxy-agent: ^5.0.0 + ssri: ^8.0.0 + checksum: 0847aca9a33544ffe153346343756edfb8065ee6497675c50e99a8b8252bbce4a574b5a2d008e8004de5f1c235205e9c7f2889adc68a8d2019691b4b66f223f4 + languageName: node + linkType: hard + "map-age-cleaner@npm:^0.1.1": version: 0.1.3 resolution: "map-age-cleaner@npm:0.1.3" @@ -8352,13 +8556,13 @@ fsevents@~2.3.1: languageName: node linkType: hard -"micromatch@npm:^4.0.2": - version: 4.0.2 - resolution: "micromatch@npm:4.0.2" +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": + version: 4.0.4 + resolution: "micromatch@npm:4.0.4" dependencies: braces: ^3.0.1 - picomatch: ^2.0.5 - checksum: 0cb0e11d647cbb65e398a0a8a1340a7fb751ae2722346219c435704cfac8b3275a94a6464236fe867f52ad46a24046d3bc4ac11b3d21ddb73bc44e27cf1e4904 + picomatch: ^2.2.3 + checksum: bc522ad93c086aa176f50fea2dc8060a8f7d7a621c811cf9ba02a1912577cc100190508166d721231465f10a575a40ec8a1bffc23bbc2c0108fcbf02e4be04ed languageName: node linkType: hard @@ -8374,26 +8578,19 @@ fsevents@~2.3.1: languageName: node linkType: hard -"mime-db@npm:1.46.0": - version: 1.46.0 - resolution: "mime-db@npm:1.46.0" - checksum: 4e137ac502ca5ba6c583e552c5fa6abd0c2157592f647824ba7246b771eb42c65c2a1816fc52b27afdbb88a026127f1d5fba354f9dcde591b3b464be07c3d27e - languageName: node - linkType: hard - -"mime-db@npm:^1.28.0": - version: 1.47.0 - resolution: "mime-db@npm:1.47.0" - checksum: f5f9220dd53c240c9234323571f632486c663e36676ebfdca9963fb9a92d1dd28b16124bceff60868fb70743764ade8466dd5e6a1a833decde89ae6d15211503 +"mime-db@npm:1.48.0, mime-db@npm:^1.28.0": + version: 1.48.0 + resolution: "mime-db@npm:1.48.0" + checksum: 346d5df2ff2f501bdeff07e88a28d205f9cd27bccd3b8604847d3aee6ce73d4ecf88e943bbbce46c167d404487f46cdf09d57354c51b6f08a4d5833bcaafa59f languageName: node linkType: hard "mime-types@npm:^2.1.12, mime-types@npm:^2.1.16, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24": - version: 2.1.29 - resolution: "mime-types@npm:2.1.29" + version: 2.1.31 + resolution: "mime-types@npm:2.1.31" dependencies: - mime-db: 1.46.0 - checksum: 744d72b2a24c64d2aacc1ead86bfc827c2c4f1bb6f3b4bf6d8684b82f5ddd0b75a5c0eff128a888c09080f9ad7979400b64a697889690fca3c42de80c8f5e187 + mime-db: 1.48.0 + checksum: 0373e58e3826802e462cf0c180ca5556fd0990acaf123d421d5f8643f0ca61d2126ea57eb6f4ba96f9ef07d3e627c06261825418a6549b0671261cc1bb4219b4 languageName: node linkType: hard @@ -8466,6 +8663,57 @@ fsevents@~2.3.1: languageName: node linkType: hard +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 529ef6212333e6b9afc6aa4487a246df6fd28a28e42060533491ebf58fddb349f9b044f017725bddf3e13cae3986c58c24ee2531832f62e6d97379846e04e0a8 + languageName: node + linkType: hard + +"minipass-fetch@npm:^1.3.2": + version: 1.3.3 + resolution: "minipass-fetch@npm:1.3.3" + dependencies: + encoding: ^0.1.12 + minipass: ^3.1.0 + minipass-sized: ^1.0.3 + minizlib: ^2.0.0 + dependenciesMeta: + encoding: + optional: true + checksum: cc93f86391795279b5681a2bbd5bb55cceabdae959c4ff0cb85e767427edb0d7e8bde49b6897afd386c2e47965ecc304b96bb7c2af0dbb9da7dfa67da140757e + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: d354ca0da834e3e79a1f0372d1cb86ba043a96b495624ed6360f7cd1f549e5685d9b292d4193a963497efcf4a4db8563e188cda565b119b8acc00852259e286c + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: 001d5a4a0c14816230984e684e8458d972b92dae52255f17fbc2dae74965f544c3c64f93146c218413004e72acec7f57d0f6ee10a49377ad715cf7d389af710c + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 747cb22e8a65dc84b819f8cdea4398ac30a3105d47f1db654ecd0b4c8124afddc58cbbd1166905d5279d89708692c0326689538b9795468e28bd330113e0d3c0 + languageName: node + linkType: hard + "minipass@npm:^2.6.0, minipass@npm:^2.8.6, minipass@npm:^2.9.0": version: 2.9.0 resolution: "minipass@npm:2.9.0" @@ -8476,7 +8724,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"minipass@npm:^3.0.0": +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": version: 3.1.3 resolution: "minipass@npm:3.1.3" dependencies: @@ -8494,7 +8742,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"minizlib@npm:^2.1.1": +"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -8523,7 +8771,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"mkdirp@npm:*, mkdirp@npm:^1.0.3": +"mkdirp@npm:*, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -8588,9 +8836,9 @@ fsevents@~2.3.1: linkType: hard "mock-fs@npm:^4.1.0": - version: 4.13.0 - resolution: "mock-fs@npm:4.13.0" - checksum: cfb2134de7dfa53ebbbbacdd1b4fc834cce99ee9c231e8e129d9d32b669d15936217a7cdef8325946dd4e398ecfc401aa14c79030b8421cdf6ebd904786d8578 + version: 4.14.0 + resolution: "mock-fs@npm:4.14.0" + checksum: d1f8176f0da03c64d1ea12c586491f7ddc402bb6497c643e10b85899d638d15914c92ad06d0eab8bc54cb000ef3b2b236f2a8f9faf60af687f8858e77d7e5e0a languageName: node linkType: hard @@ -8615,7 +8863,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 6e721e648a544154d5de4c114b32f573d8027ca8ec505cf6c1105e505986d6ac46934a1256735aa0eece8eb2f5b2a1230503b2dddd3b100f9f016fd8a4f15f33 @@ -8795,7 +9043,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"node-fetch@npm:^2.6.0": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1": version: 2.6.1 resolution: "node-fetch@npm:2.6.1" checksum: cbb171635e538162b977eac5dfe7a1e07a9a02e991924377a6435502291e2f823d306b95aabc455caebf4a118ccf836868462bc70ccc3095af02bb9da61fda37 @@ -8824,22 +9072,22 @@ fsevents@~2.3.1: linkType: hard "node-gyp@npm:latest": - version: 7.1.2 - resolution: "node-gyp@npm:7.1.2" + version: 8.1.0 + resolution: "node-gyp@npm:8.1.0" dependencies: env-paths: ^2.2.0 glob: ^7.1.4 - graceful-fs: ^4.2.3 + graceful-fs: ^4.2.6 + make-fetch-happen: ^8.0.14 nopt: ^5.0.0 npmlog: ^4.1.2 - request: ^2.88.2 rimraf: ^3.0.2 - semver: ^7.3.2 - tar: ^6.0.2 + semver: ^7.3.5 + tar: ^6.1.0 which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: fca9ecb1be01f707b76c2aec01f0f2ef4ff45c4e24df378c01a4a2c93b4a8172b47ad59f07af91c54a797a8a77fc72e087e29a97a52c892df507245530c46bfa + checksum: 6e014ff491cc4fdd25c41e38f9f92ab665d3b2e1ef7cd18e292aff9b293ef485c6bb93194461a5538d3bfa4b678258df974800660dd7d40865866ef3188c5481 languageName: node linkType: hard @@ -8912,9 +9160,9 @@ fsevents@~2.3.1: linkType: hard "normalize-url@npm:^4.1.0": - version: 4.5.0 - resolution: "normalize-url@npm:4.5.0" - checksum: 09794941dbe5c7b91caf6f3cd1ae167c27f6d09793e4a03601a68b62de7e8ee9e5de21a246130cdbab98b01481de292f9556d492444a527648f9cf1220e4b0df + version: 4.5.1 + resolution: "normalize-url@npm:4.5.1" + checksum: 31dd05ad33cc649d5c1cd390f1e494d36bdcd3c0a440fd873290ffc5d4f838e2d0c1f4e9c29c9395d4907318cd8c0aaa759af336ac04ec0bd6fecb62ef1f4556 languageName: node linkType: hard @@ -8991,10 +9239,10 @@ fsevents@~2.3.1: languageName: node linkType: hard -"object-inspect@npm:^1.9.0": - version: 1.9.0 - resolution: "object-inspect@npm:1.9.0" - checksum: 63b412167d716e332b3233090a9e8cc7951479a6971629fb8a3d00135a2329136c697fbd2f56e48bb132928f01bd0f8c5fe2d7386222f217228ca697b8c3932a +"object-inspect@npm:^1.10.3, object-inspect@npm:^1.9.0": + version: 1.10.3 + resolution: "object-inspect@npm:1.10.3" + checksum: f5d21d86dbedf7224f5e2bee8235beb1e94a419443102ae0d6c17603ace26b930de584ece5695ae6c338ec996656477d5ca425b1f8770b4aa3340aa3d188aa9a languageName: node linkType: hard @@ -9098,6 +9346,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"oboe@npm:2.1.5": + version: 2.1.5 + resolution: "oboe@npm:2.1.5" + dependencies: + http-https: ^1.0.0 + checksum: db5a1897577f5ebfab8af1fdc412300140e5c6db189be4b710eeeefee6cb9eff1c8d76827353edca223c4ea198ca4e9a74b108700a79ab15f3ba48150427cb3a + languageName: node + linkType: hard + "on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" @@ -9277,6 +9534,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: d51e630d72b7c38bc9e396710e7a068f0b813fe4db6f4a2d1ce2972e7fa11142c763c3aa39bcfd77c0133688c1ebfdd9b38fa3ac4c6ada20b62df26239c5c0e4 + languageName: node + linkType: hard + "p-timeout@npm:^1.1.1": version: 1.2.1 resolution: "p-timeout@npm:1.2.1" @@ -9468,9 +9734,9 @@ fsevents@~2.3.1: linkType: hard "path-parse@npm:^1.0.6": - version: 1.0.6 - resolution: "path-parse@npm:1.0.6" - checksum: 2eee4b93fb3ae13600e3fca18390d9933bbbcf725a624f6b8df020d87515a74872ff6c58072190d6dc75a5584a683dc6ae5c385ad4e4f4efb6e66af040d56c67 + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 6de0bfa37b4f09af465ff3900fb4104ca9cb1e1fa5cbe869c40cedd10d5d625d04c284afc34967830eee780bf83fd69c017d72a23ffd35718ec861192ec91dd9 languageName: node linkType: hard @@ -9507,15 +9773,15 @@ fsevents@~2.3.1: linkType: hard "pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.0.9": - version: 3.1.1 - resolution: "pbkdf2@npm:3.1.1" + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 780dd6d50e750d302651638ff1edfe899d3a345e702f6c36fbdbdef3cfefd12d3d76698565022f4cd97d3f8ced5098f4ae2fdd067d3e1fca2849a70eb60e7620 + checksum: 12ac46c71db0613f5e45824d65598a31b4fb09bb860cde8024919778be7971468f2c6b010250d5bc9907a247f85580b560fd5b78b09263d207e8bdf3963c83c7 languageName: node linkType: hard @@ -9533,10 +9799,10 @@ fsevents@~2.3.1: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1": - version: 2.2.2 - resolution: "picomatch@npm:2.2.2" - checksum: 20fa75e0a58b39d83425b3db68744d5f6f361fd4fd66ec7745d884036d502abba0d553a637703af79939b844164b13e60eea339ccb043d7fbd74c3da2592b864 +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3": + version: 2.3.0 + resolution: "picomatch@npm:2.3.0" + checksum: 80113a0fb70cfa62730d5aa3fd3d45b76bf3985f8494080ab2de1cc1fa3ba96d77990c7553a81401e16c51c0eb19c27cf5bc94f2196155090f26c8a167968001 languageName: node linkType: hard @@ -9619,7 +9885,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"prettier@npm:2.2.1, prettier@npm:^2.1.2": +"prettier@npm:2.2.1": version: 2.2.1 resolution: "prettier@npm:2.2.1" bin: @@ -9637,6 +9903,15 @@ fsevents@~2.3.1: languageName: node linkType: hard +"prettier@npm:^2.1.2": + version: 2.3.2 + resolution: "prettier@npm:2.3.2" + bin: + prettier: bin-prettier.js + checksum: 4fd89a7f6a12b13456d359fba2b1dd0fc0a17cf33f8f15953ab9f43b21ea9b09b5a2861d63b558ca0577274ce606d390e70628cf93e26d19d6cb7f19c9eebc31 + languageName: node + linkType: hard + "private@npm:^0.1.6, private@npm:^0.1.8": version: 0.1.8 resolution: "private@npm:0.1.8" @@ -9665,6 +9940,23 @@ fsevents@~2.3.1: languageName: node linkType: hard +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: c06bce0fc60b1c7979f291e489b9017db9c15f872d5cef0dfbb2b56694e9db574bc5c28f332a7033cdbd3a1d6417c5a1ee03889743638f0241e82e5a6b9c277f + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: 325e99d059fc624129c020507047a9aeadb988d03fd2165829af7c43af9c6d0510f2ccddb68efa0bac607d4c43591b3af8b1207db132986bfa458f78549ea4f1 + languageName: node + linkType: hard + "promise-to-callback@npm:^1.0.0": version: 1.0.0 resolution: "promise-to-callback@npm:1.0.0" @@ -9703,12 +9995,12 @@ fsevents@~2.3.1: linkType: hard "proxy-addr@npm:~2.0.5": - version: 2.0.6 - resolution: "proxy-addr@npm:2.0.6" + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" dependencies: - forwarded: ~0.1.2 + forwarded: 0.2.0 ipaddr.js: 1.9.1 - checksum: a7dcfd70258cdc3b73c5dc4a35c73db9857f3bf4cf5e6404380e8ea558f8c5569147e721a01195d00b450e36b4dde727fc9d22fdea14310ba38faa595530cd58 + checksum: ad78682246dc20ed6ca4080539349828bc2708cf0b69c55d6a3c41532780a8d05f563dcbac6ec4b74dce367421bff6fc4bc6b700b14319ecf57c93bd62727fc6 languageName: node linkType: hard @@ -10018,12 +10310,12 @@ fsevents@~2.3.1: languageName: node linkType: hard -"readdirp@npm:~3.5.0": - version: 3.5.0 - resolution: "readdirp@npm:3.5.0" +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" dependencies: picomatch: ^2.2.1 - checksum: a64fe5606937d9655252230003362d95da05dbfd3baecedb4bb8c1bc0df497d051a192f9b75345c944e58a0b362c68349be602d6dbf05d03770e510b35a9f80f + checksum: 7da2fe8d5abf17ae0bf97a052718e16d29fa185f3e461153035728d93642326ae8e44c17b9a9b3a5fa616dff160e96be3184e0323efaac7211f80c0aab5f622b languageName: node linkType: hard @@ -10127,9 +10419,9 @@ fsevents@~2.3.1: linkType: hard "repeat-element@npm:^1.1.2": - version: 1.1.3 - resolution: "repeat-element@npm:1.1.3" - checksum: 6a59b879efdd3512a786be5de1bc05c110822fec6820bb5a38dfdfdd4488e7ba0cf6d15b28da21544e6f072ae60762ee9efa784f2988128e656c97a8b0be46cb + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 44db9550826d4101f1db2deccd1afe226e77a137c94b899b98505409703513894ef5195fcd0fccb9f0979f3ab7d582cac7c19ff4cf8b606c2f0754488e164c70 languageName: node linkType: hard @@ -10191,7 +10483,7 @@ fsevents@~2.3.1: languageName: node linkType: hard -"request@npm:^2.79.0, request@npm:^2.85.0, request@npm:^2.88.0, request@npm:^2.88.2": +"request@npm:^2.79.0, request@npm:^2.85.0, request@npm:^2.88.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -10454,11 +10746,11 @@ resolve@1.1.x: linkType: hard "rxjs@npm:^6.4.0": - version: 6.6.6 - resolution: "rxjs@npm:6.6.6" + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" dependencies: tslib: ^1.9.0 - checksum: c97b410e791b3259439be48cd37119b63eedc3809a5895d884a7ac27a6934ae4ec246be3d76f1b2f3b47c72a96500ad30977545dc8b0f4a0f98c52f5f773a8ea + checksum: 1146975cbd5388ee5e61450235dc5670931e43cce71813f567977d334acc4d75c6e8d9d293df67e1fb31510b99fc8957943d4a9b550d109e4dc69967a8471543 languageName: node linkType: hard @@ -10621,7 +10913,7 @@ resolve@1.1.x: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.4": +"semver@npm:^7.3.4, semver@npm:^7.3.5": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -10853,6 +11145,13 @@ resolve@1.1.x: languageName: node linkType: hard +"smart-buffer@npm:^4.1.0": + version: 4.1.0 + resolution: "smart-buffer@npm:4.1.0" + checksum: 00a23d82a20eced9622cbba18ba781f9f8968ccfa70af7a33336ae55f54651c073aa072084c521f7e78199767e5b3584a0bbf3a47bb60e3e5b79ea4fc1ca61a1 + languageName: node + linkType: hard + "snapdragon-node@npm:^2.0.1": version: 2.1.1 resolution: "snapdragon-node@npm:2.1.1" @@ -10889,6 +11188,27 @@ resolve@1.1.x: languageName: node linkType: hard +"socks-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "socks-proxy-agent@npm:5.0.1" + dependencies: + agent-base: ^6.0.2 + debug: 4 + socks: ^2.3.3 + checksum: 0f3a80ce09b9bca2ac091f9cd5c1f02ca4ebc70cc8eeaaf4e515ec97b224f04b9a4645377c2bf65a6c48df7d0c95684250d4e30184b39975fa556d7fcc913388 + languageName: node + linkType: hard + +"socks@npm:^2.3.3": + version: 2.6.1 + resolution: "socks@npm:2.6.1" + dependencies: + ip: ^1.1.5 + smart-buffer: ^4.1.0 + checksum: 9a5735cf9be6f756006b4c5ed23f17c15ffbfc0afb04b5d1b49516b7a27818c807a6a5b5419a65a140a1964149ec9ebb6cd8f0e06d7c60282912204d781371db + languageName: node + linkType: hard + "solc@npm:0.6.4": version: 0.6.4 resolution: "solc@npm:0.6.4" @@ -11006,9 +11326,9 @@ resolve@1.1.x: linkType: hard "solidity-ast@npm:^0.4.15": - version: 0.4.19 - resolution: "solidity-ast@npm:0.4.19" - checksum: 4656ed4b97d60513a9f0fdbb1a18b0e7692b528309af1fc0f2a5f3e94d2c93207e941dcdf8c61206ebbda2591cb004304d8f8b248f54cfca2373b9e1cee93b76 + version: 0.4.26 + resolution: "solidity-ast@npm:0.4.26" + checksum: bf7bf293dfd57799a1d08362f4501ab760dbb1596ac6767ec7f047439d4f2cf8cdedc493507e735afac2cd5125535ef772f35aa78f7b5d160f92092ae9c4827a languageName: node linkType: hard @@ -11188,9 +11508,9 @@ resolve@1.1.x: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.7 - resolution: "spdx-license-ids@npm:3.0.7" - checksum: 21e38ec5dd970643f78d37700b6c6ebd42d68c0e4618db914a56cabd2fe4cc1608404ce6abc7535d5165c6555560e821553d06edf6af6ae439617883cf932c0e + version: 3.0.9 + resolution: "spdx-license-ids@npm:3.0.9" + checksum: a4d970d859bc5eeef3a95d7597fa39b36b2c046153d3d2c9876293d84457b0456a56aef7f45e1d3c3129cf7557c35305dffaddbcff630f7df72cb359aed78ce1 languageName: node linkType: hard @@ -11231,6 +11551,15 @@ resolve@1.1.x: languageName: node linkType: hard +"ssri@npm:^8.0.0, ssri@npm:^8.0.1": + version: 8.0.1 + resolution: "ssri@npm:8.0.1" + dependencies: + minipass: ^3.1.1 + checksum: d45f9a1d5676f8ebd888a3ae469772d75858e4095087217c2361a6b07a6eefd5a85350bb0fed63128b0025fdf242e81813be0979e6cb956a38dbf26295dca09c + languageName: node + linkType: hard + "stacktrace-parser@npm:^0.1.10": version: 0.1.10 resolution: "stacktrace-parser@npm:0.1.10" @@ -11595,7 +11924,7 @@ resolve@1.1.x: languageName: node linkType: hard -"tar@npm:^6.0.2": +"tar@npm:^6.0.2, tar@npm:^6.1.0": version: 6.1.0 resolution: "tar@npm:6.1.0" dependencies: @@ -11819,11 +12148,11 @@ resolve@1.1.x: linkType: hard "ts-essentials@npm:^7.0.1": - version: 7.0.1 - resolution: "ts-essentials@npm:7.0.1" + version: 7.0.2 + resolution: "ts-essentials@npm:7.0.2" peerDependencies: typescript: ">=3.7.0" - checksum: f3b7beedce99ac7a1af1f150ede1a8e5f1195fc7de4c01c308df33a2acfed8fa86ac3d898bdfc3a9132ac897799bf326c74187a088d297724fa7ab8ffd323329 + checksum: 308dd65528c52e14044f007e38a8ae3e07721feebcfb287ca54f2b659a55bd5d6ba6a16fde656e7f15b8af5da62ddd17cea795287eca3c3cace3ab55df94a409 languageName: node linkType: hard @@ -11940,7 +12269,7 @@ resolve@1.1.x: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: e01dc6ac9098192a7859fb86c7b4073709a4e13a5cc02c54d54412378bb099563fda7a7a85640f33e3a7c2e8189182eb1511f263e67f402b2d63fe81afdde785 @@ -11985,20 +12314,23 @@ resolve@1.1.x: languageName: node linkType: hard -"typechain@npm:4.0.3": - version: 4.0.3 - resolution: "typechain@npm:4.0.3" +"typechain@npm:5.1.1": + version: 5.1.1 + resolution: "typechain@npm:5.1.1" dependencies: + "@types/prettier": ^2.1.1 command-line-args: ^4.0.7 debug: ^4.1.1 fs-extra: ^7.0.0 + glob: ^7.1.6 js-sha3: ^0.8.0 lodash: ^4.17.15 + mkdirp: ^1.0.4 + prettier: ^2.1.2 ts-essentials: ^7.0.1 - ts-generator: ^0.1.1 bin: typechain: dist/cli/cli.js - checksum: efbdfcf289bec67b3b46f462c9d0f7e7d2a2e4fa8861fc71ce1abb9d3a14cb22cd1f8c00022c8e8ddabebb4f794ef33ce20ddfd2a1af860c9b48451730c0b9b3 + checksum: 04ee65cc70fdedc82ed27a3e1b6e13b9ad507d06ea31bdf593d7d192da08da082bf81b27d40ba435e95beab01926beca0cbcc2e761eb6b73a08d8ba8e76bad76 languageName: node linkType: hard @@ -12046,12 +12378,12 @@ typescript@4.2.3: linkType: hard typescript@^3.8.3: - version: 3.9.9 - resolution: "typescript@npm:3.9.9" + version: 3.9.10 + resolution: "typescript@npm:3.9.10" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 22bbe953faa34903587f3bd8fb6c343d754745d4177e49da523a2a3b814fe5eaf60d9b23c2d401d038a08a5ac2d8094b268ba75adee840cc2358fb5a866624ab + checksum: 544f3810ac3d3fcd141907e7f52f0b8c70af178adc83af47e2b8a48351e5a119919a4d3bfbe2f62d5165b5aa203e896fe0432024cfbda670dbd03a4f53ce7748 languageName: node linkType: hard @@ -12066,12 +12398,12 @@ typescript@^3.8.3: linkType: hard "typescript@patch:typescript@^3.8.3#builtin": - version: 3.9.9 - resolution: "typescript@patch:typescript@npm%3A3.9.9#builtin::version=3.9.9&hash=a45b0e" + version: 3.9.10 + resolution: "typescript@patch:typescript@npm%3A3.9.10#builtin::version=3.9.10&hash=a45b0e" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 05a113f2ec0d0fc3263335c230d2eb7b94d851e51b5766f63b88b611127d08782ce41132eb32b9d3d434de8340f698f7ec2f72ebb4d33c3b2976b27de1f47ace + checksum: 744dab471ae59659b1618be636ab56b9c0afbca801e0640c3cdfad0a894315c87d30a290b7063c6a3f1860bf47fe44d9188cb85e46b2bdadda7f207d67e6b4e1 languageName: node linkType: hard @@ -12106,11 +12438,11 @@ typescript@^3.8.3: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.13.2 - resolution: "uglify-js@npm:3.13.2" + version: 3.13.10 + resolution: "uglify-js@npm:3.13.10" bin: uglifyjs: bin/uglifyjs - checksum: 792068049181fab39e61791230f0116888a80f09f9e3b70e01172c238b23a580e23155f18b73a39e26ee04a51ad5d43883b33d4d0b01311470da4c65322a3729 + checksum: 2c8467faf68a0ba4da7a9539026dc996804f0e89f184ce0a6ceaa9a9c7e4e2ab78399caee8ebbebcd3df64a45b049585c4125e144f1c5992f9b61e81864d9535 languageName: node linkType: hard @@ -12121,7 +12453,7 @@ typescript@^3.8.3: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.0": +"unbox-primitive@npm:^1.0.1": version: 1.0.1 resolution: "unbox-primitive@npm:1.0.1" dependencies: @@ -12143,6 +12475,13 @@ typescript@^3.8.3: languageName: node linkType: hard +"underscore@npm:1.12.1": + version: 1.12.1 + resolution: "underscore@npm:1.12.1" + checksum: b53ae924fe3608ac7875a0eec20988611a02dc174bad40680dbb9fe994c40fc457b6d4f618f8b9af930c31549809c27f70dddccd83957a32bab27b1eea858c1b + languageName: node + linkType: hard + "underscore@npm:1.9.1": version: 1.9.1 resolution: "underscore@npm:1.9.1" @@ -12162,6 +12501,24 @@ typescript@^3.8.3: languageName: node linkType: hard +"unique-filename@npm:^1.1.1": + version: 1.1.1 + resolution: "unique-filename@npm:1.1.1" + dependencies: + unique-slug: ^2.0.0 + checksum: 0e674206bdda0c949b4ef86b073ba614f11de6141310834a236860888e592826da988837a7277f91a943752a691c5ab7ab939a19e7c0a5d7fcf1b7265720bf86 + languageName: node + linkType: hard + +"unique-slug@npm:^2.0.0": + version: 2.0.2 + resolution: "unique-slug@npm:2.0.2" + dependencies: + imurmurhash: ^0.1.4 + checksum: 3b17dabc13b3cc41897715e106d4403b88c225739e70bbb6d1142e0fb680261b20574cae133b0ac0eedcf514fc19766d6fa37411f9e9ee038daaa4ae83e7cd70 + languageName: node + linkType: hard + "universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" @@ -12266,12 +12623,12 @@ typescript@^3.8.3: linkType: hard "utf-8-validate@npm:^5.0.2": - version: 5.0.4 - resolution: "utf-8-validate@npm:5.0.4" + version: 5.0.5 + resolution: "utf-8-validate@npm:5.0.5" dependencies: node-gyp: latest node-gyp-build: ^4.2.0 - checksum: 14dc9e6af0471436a419505205d2d46a9e89109fe88b0920abe58323029ef260a454b9e27ce5a6700b40c15f182bb139f0bd3eb7c58e318b92eaf4d522be04af + checksum: 020dacd9ac655ea114810f6025347bfbf48656ec4b363da6029779274d7f2b0f829717acb7f35dd4bf59ec12c62ace18fa213997ecbd5f43388684331fc862b0 languageName: node linkType: hard @@ -12302,6 +12659,20 @@ typescript@^3.8.3: languageName: node linkType: hard +"util@npm:^0.12.0": + version: 0.12.4 + resolution: "util@npm:0.12.4" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + safe-buffer: ^5.1.2 + which-typed-array: ^1.1.2 + checksum: 6e3cbc15468436de8aa7bbc50ea1354b738ece2330ef4da417d08893d1105985ac1cc0dd1ea86ef855494e01dd000d7f866c802537afe8751f0c319d16ceccd0 + languageName: node + linkType: hard + "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -12381,15 +12752,15 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-bzz@npm:1.2.9": - version: 1.2.9 - resolution: "web3-bzz@npm:1.2.9" +"web3-bzz@npm:1.3.6": + version: 1.3.6 + resolution: "web3-bzz@npm:1.3.6" dependencies: - "@types/node": ^10.12.18 + "@types/node": ^12.12.6 got: 9.6.0 swarm-js: ^0.1.40 - underscore: 1.9.1 - checksum: c87020f62b1a32e5af833b2efe575e2fa3c227277bcff12ec4aea2de87ff72192f510cd5dd56090c2dac0910f2ad8012aceec90340d1ca646f8f0f53bafb66da + underscore: 1.12.1 + checksum: 9f7028fba02d41b4e8edf27a3fcadc9418e3c3c2467b9cd2bc567b0ae7f626388b63ee8a86ac3e03540c955d9de47751a111139910128de9b953acd5510e176a languageName: node linkType: hard @@ -12404,14 +12775,14 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core-helpers@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core-helpers@npm:1.2.9" +"web3-core-helpers@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core-helpers@npm:1.3.6" dependencies: - underscore: 1.9.1 - web3-eth-iban: 1.2.9 - web3-utils: 1.2.9 - checksum: f9e2c1e6bc54718b1c77a85317d8c47cdbabba13d50ef9fe9d7b14f75155d02b7940d7ea56a86e6b2801e0ad53e0a20565469d2ca5ca9bc3b7e85b87dda51e43 + underscore: 1.12.1 + web3-eth-iban: 1.3.6 + web3-utils: 1.3.6 + checksum: 2c1d30ed8ad885fc203e14db782d7e798f31f5556cfd4df62a956fce9f13b5dd77b7f96870de18fac8afca2ef157b8fc596e1cc4d4fa8e4a8938bc4cbeef73a9 languageName: node linkType: hard @@ -12429,17 +12800,17 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core-method@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core-method@npm:1.2.9" +"web3-core-method@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core-method@npm:1.3.6" 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 - checksum: a6cb2d41198dc5353d2eb612c3b0801a80ec3c0df0966ed63149156264e4e0a65136f696fa4b9823569fee2a0a40fa4832e5c2da6be2924300578b55821b8516 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-utils: 1.3.6 + checksum: 7747b1ccbe91dda43cad2e45ba6d48214a0fbda86cc2a88d2c5ef7391986a6cfe6a1cdbadab381a3c6e208b3e849606959e58555ba7cb3ab0f31c1eb1f2a4a7e languageName: node linkType: hard @@ -12452,12 +12823,12 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core-promievent@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core-promievent@npm:1.2.9" +"web3-core-promievent@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core-promievent@npm:1.3.6" dependencies: - eventemitter3: 3.1.2 - checksum: 3c31d080cf036e20ec385f8de3ac445ade9ac8ad2f540f5e8875308572bd2aeef663edc7e1ea510aa579155e9fb515724e46aac4c7965e5ff7c09092c27e461c + eventemitter3: 4.0.4 + checksum: 1f9132f1ffc2619ba704176d41b982c4f8235dfa580a7f6446d517b0c346b7bcc8941e84e5fd3daab624bf854bb9963e5661edd3c9c0dcfa7d548497830a6648 languageName: node linkType: hard @@ -12474,16 +12845,17 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core-requestmanager@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core-requestmanager@npm:1.2.9" +"web3-core-requestmanager@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core-requestmanager@npm:1.3.6" 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 - checksum: d724e9a3411b662668d55bab21a08352803b5445959f8748ff52d23ce3869741b15d2eff53f230680d504157f81fed49dadfd6f4fe00bb4c506abc47ae49d6e2 + underscore: 1.12.1 + util: ^0.12.0 + web3-core-helpers: 1.3.6 + web3-providers-http: 1.3.6 + web3-providers-ipc: 1.3.6 + web3-providers-ws: 1.3.6 + checksum: ad78b02b553922f189a0d9d81c404133f9a631f3191eed2c4fa7d049539da805940ef18c2ced36596bdcac5f36461dd5a98866a8b054b8e236dcd9158b945092 languageName: node linkType: hard @@ -12498,14 +12870,14 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core-subscriptions@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core-subscriptions@npm:1.2.9" +"web3-core-subscriptions@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core-subscriptions@npm:1.3.6" dependencies: - eventemitter3: 3.1.2 - underscore: 1.9.1 - web3-core-helpers: 1.2.9 - checksum: ab4f743d9c9c5c59c9795a079d1addeca748edde825ac57cb0a78f9061457e9425845f65db5e0d24d4cad9d038756dc498e44b83738d94884a343ddce12de993 + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + checksum: cb1dfe056d75ad674f4d205bbf692c6ac2988d7d380db5147d5b2b8ae6493a28fb9d5e5e973f1df75df3387e124c5deeb9c65d3f0ae5d8ec75684b39f4e84bf2 languageName: node linkType: hard @@ -12524,18 +12896,18 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-core@npm:1.2.9": - version: 1.2.9 - resolution: "web3-core@npm:1.2.9" +"web3-core@npm:1.3.6": + version: 1.3.6 + resolution: "web3-core@npm:1.3.6" dependencies: - "@types/bn.js": ^4.11.4 - "@types/node": ^12.6.1 + "@types/bn.js": ^4.11.5 + "@types/node": ^12.12.6 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 - checksum: 44341f6d2f4c173d0453dd93784cd6d903195213b65989932c9cc468326c8e39d06db2ee10c41460b8cd1894946682a1fb7df9a5385acece4aabc13ddaff6a66 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-requestmanager: 1.3.6 + web3-utils: 1.3.6 + checksum: 1118f88abf17046fecf943d83ad0987806c39d11c41d2edc549208e8fc3e396573769b976d816d0d1a7282978f87bce9ebbfed5811a11f542b736bc6355c1fec languageName: node linkType: hard @@ -12550,14 +12922,14 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-abi@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-abi@npm:1.2.9" +"web3-eth-abi@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-abi@npm:1.3.6" dependencies: - "@ethersproject/abi": 5.0.0-beta.153 - underscore: 1.9.1 - web3-utils: 1.2.9 - checksum: a1e35989950f79150e8d4501a23cc84d5b2d7024d674d7537390da42bf68744950b4123da294333cc7fe561367fba2b612bfcebd233750d2edf016bff319cd7e + "@ethersproject/abi": 5.0.7 + underscore: 1.12.1 + web3-utils: 1.3.6 + checksum: 4d10b417d3826d4d4801fd2924ba42bb8b68f851c1afefac5e840e2f1243b8144dfca8e4178b13ff536a5a48b6f0a3e874021f3eb9656fa7d103b3865f18b481 languageName: node linkType: hard @@ -12580,22 +12952,22 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-accounts@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-accounts@npm:1.2.9" +"web3-eth-accounts@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-accounts@npm:1.3.6" dependencies: crypto-browserify: 3.12.0 - eth-lib: ^0.2.8 + eth-lib: 0.2.8 ethereumjs-common: ^1.3.2 ethereumjs-tx: ^2.1.1 scrypt-js: ^3.0.1 - underscore: 1.9.1 + underscore: 1.12.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 - checksum: 47843dc1b378aed5389f0c0d053018344698ab8f0a0f93742882fd77d5f8b69bbb8dd6c16bab761963fc86e1c6d606737a95dc627f2ccfc6ceeb2986d9807059 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + checksum: 78ae7ada2ba37e0d86e805ee1306a09573f898f700900bfae58889b44e6fc8c76ba34824a54cdf33ca9bec09bfd55778d8a2d7eb68253ee1ed91568abb8079c1 languageName: node linkType: hard @@ -12616,20 +12988,20 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-contract@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-contract@npm:1.2.9" +"web3-eth-contract@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-contract@npm:1.3.6" 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 - checksum: be4b66f2cb2d3590f2d4dd945664175a25e96d3b0b0ff64d1af5758b2f01ba3d1930decdbbb81cb341783b4f5e6ce2155abfa39169cea421db00bf31dcde2074 + "@types/bn.js": ^4.11.5 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-utils: 1.3.6 + checksum: 686d3f5f810105bb5a90c5d97432a7169c861eaaa0e7f4e4cae931a0517ee3ca75d302b60af8b281875dfaadb3ada40fca0a8baa0ec5fbd3162f47d4a26c87e9 languageName: node linkType: hard @@ -12650,20 +13022,20 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-ens@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-ens@npm:1.2.9" +"web3-eth-ens@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-ens@npm:1.3.6" 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 - checksum: 091c144fea43925ddfc5a27c81c6f890bb8137c1406b476e087f914ade08c6cb55e5a1a1ebcca466d2a90d7a7736b268244e3e8f3ad2319eb09e915e8675b4e6 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-contract: 1.3.6 + web3-utils: 1.3.6 + checksum: 63696551cd380bb2dabbb32b0821226de9d620e26a76752f14d77287240076fb1ea843fb364bb504d000840a684c197e21f3f9c00dab323745e1f888b1dd322e languageName: node linkType: hard @@ -12677,13 +13049,13 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-iban@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-iban@npm:1.2.9" +"web3-eth-iban@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-iban@npm:1.3.6" dependencies: - bn.js: 4.11.8 - web3-utils: 1.2.9 - checksum: 1c5f981f7b1f79ce88ebe4fc61d9eb5ebd0f19d8714f6da17d2a31cc9f192f899e044f968454a4d30080f938310fe4cc12c92058d48f50f968352af14c86ca64 + bn.js: ^4.11.9 + web3-utils: 1.3.6 + checksum: 2bcc4c5b7269445fdc111deac37aa21dbbde976b7e04223719eabc875e6dfe30d2b50b41d61fd05f7f8875c1c40b35d3ecf8db0cd93778da59ff028dbee24189 languageName: node linkType: hard @@ -12701,17 +13073,17 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth-personal@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth-personal@npm:1.2.9" +"web3-eth-personal@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth-personal@npm:1.3.6" 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 - checksum: b5949a4fae4e90f47a14d338e5205fbcf4b1602ab0730e6558599ea9087c74400e8654a78323d6ede1d34a0eaba0bf160ce95486afd66b9bd61adbfcfb9c3c56 + "@types/node": ^12.12.6 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + checksum: d8cb9b5524c2e6abe0df869e45e8cfb33645ad54feec7d169c32fe015241c6314ec0150e1e41fa4673b5058716a7790fa14b832922b867cefff085c672d875cc languageName: node linkType: hard @@ -12736,24 +13108,24 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-eth@npm:1.2.9": - version: 1.2.9 - resolution: "web3-eth@npm:1.2.9" +"web3-eth@npm:1.3.6": + version: 1.3.6 + resolution: "web3-eth@npm:1.3.6" 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 - checksum: 50e7e5bdfe92d3145d11c6e337bc8f72ea6aabd7c6dd096d3cf2b9ba0a3cc9e73df8e8c74c4632eb8fc5c03159680c0af58fc864c610f98fddad4d8efd21a512 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-accounts: 1.3.6 + web3-eth-contract: 1.3.6 + web3-eth-ens: 1.3.6 + web3-eth-iban: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + checksum: 5813bb5fa3f0cfd02cbd8c361b59280c91083dd7d8aab7348d51360d16e7bc605f3b599e018b2f6aab427fa92061926482b3ba1c4ec8eb0be92dcf5a39dd6314 languageName: node linkType: hard @@ -12768,14 +13140,14 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-net@npm:1.2.9": - version: 1.2.9 - resolution: "web3-net@npm:1.2.9" +"web3-net@npm:1.3.6": + version: 1.3.6 + resolution: "web3-net@npm:1.3.6" dependencies: - web3-core: 1.2.9 - web3-core-method: 1.2.9 - web3-utils: 1.2.9 - checksum: 7aa7b2a18d07d6043118aee3093fe877d161753805fd8e531826551abe7890c6a45ccd025b179012296949682410299087fb336dd96da36755f02b69d8380663 + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + checksum: 03ffd9c68dea6865a60a071d17e893efad5ca83f068cea97271483025e56069b1f4d02f4abdcdf1aed09514f7c264d99a23dd4e4854c1d58ff0d33f9de19483b languageName: node linkType: hard @@ -12817,13 +13189,13 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-providers-http@npm:1.2.9": - version: 1.2.9 - resolution: "web3-providers-http@npm:1.2.9" +"web3-providers-http@npm:1.3.6": + version: 1.3.6 + resolution: "web3-providers-http@npm:1.3.6" dependencies: - web3-core-helpers: 1.2.9 + web3-core-helpers: 1.3.6 xhr2-cookies: 1.1.0 - checksum: 7f1a251807204cd0dce97a0085b95d1adaa6ea20b8f5cec9b985e62016e2d6c2de9a24c94ce61329df827cdaaeeb5ac513abdb16cef8f50d54ffd2272931845c + checksum: 0babe50ab635e46f87b64235f6233104621edc01c42c4b32d47cc26106dfa5490f8c141d1a17166b962f622b06dc664127e966400574d2a0e98c20c98d2d961d languageName: node linkType: hard @@ -12838,14 +13210,14 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-providers-ipc@npm:1.2.9": - version: 1.2.9 - resolution: "web3-providers-ipc@npm:1.2.9" +"web3-providers-ipc@npm:1.3.6": + version: 1.3.6 + resolution: "web3-providers-ipc@npm:1.3.6" dependencies: - oboe: 2.1.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.9 - checksum: 340274b9253976dda5063c871b44ce75aa4f7eb18d05be5d7aad0342cd8593305866271823623b1708626f614e7d6ec814989a6f19e261f679118d2e4c64be16 + oboe: 2.1.5 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + checksum: a76d6f16c930a96e4b34603c6c29f732afe2c32ecda914ffa5de352f0067eaec84f84f619ded87fd737b9284bc4cd27eec87551365fb167664928eb44de77e40 languageName: node linkType: hard @@ -12861,15 +13233,15 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-providers-ws@npm:1.2.9": - version: 1.2.9 - resolution: "web3-providers-ws@npm:1.2.9" +"web3-providers-ws@npm:1.3.6": + version: 1.3.6 + resolution: "web3-providers-ws@npm:1.3.6" dependencies: - eventemitter3: ^4.0.0 - underscore: 1.9.1 - web3-core-helpers: 1.2.9 - websocket: ^1.0.31 - checksum: ddd2f795656320d7c812ea3cc5c2cae75d9f8b6cba239358f30842219d61e595aff006963ec4a7d2338c2487cf6666776f3ccbdf7d993f51b8504adad2808b5e + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + websocket: ^1.0.32 + checksum: 0d75424a5a3aa6239cd9a80ff8d38f8bb83551251744f00f42bcb0d10434387599f3bc5d9a6374732c24fbe64dd7eb5f3958c1af24d8b59921e8c4d5b87e0abb languageName: node linkType: hard @@ -12885,15 +13257,15 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-shh@npm:1.2.9": - version: 1.2.9 - resolution: "web3-shh@npm:1.2.9" +"web3-shh@npm:1.3.6": + version: 1.3.6 + resolution: "web3-shh@npm:1.3.6" dependencies: - web3-core: 1.2.9 - web3-core-method: 1.2.9 - web3-core-subscriptions: 1.2.9 - web3-net: 1.2.9 - checksum: 55df3ac55327edde8ff8aa751d067a3ec1c7d3601754d0db0b72b0c5dfbb1ab3ad2ba0ec6ff7ddfacaec3740eb3ddbb5118cb93a89a49c575f98aded5e8ee374 + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-net: 1.3.6 + checksum: 897084dc4e2282bdf8559f38d9d9fbbe2fa46911e00a92a117f7d9ba9204251826e1b6e31ae04b1881067acfc40d5ffddbcd9b46d15a2df5b6ae7c704a9221b4 languageName: node linkType: hard @@ -12913,25 +13285,25 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3-utils@npm:1.2.9": - version: 1.2.9 - resolution: "web3-utils@npm:1.2.9" +"web3-utils@npm:1.3.6": + version: 1.3.6 + resolution: "web3-utils@npm:1.3.6" 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 randombytes: ^2.1.0 - underscore: 1.9.1 + underscore: 1.12.1 utf8: 3.0.0 - checksum: a688a6029c8038b5c58e139ea788360f3649a8fb497b1e5d0d1305a11ef24606dcc79f6d4a41fc38051584083d46f87a3200ab3f485cb96c507bd236a357864a + checksum: ceef74cfc9f014d9f88aa6f76fbf5a6775e3aceefd6c105509ec87705fa57d74d2714c82cd1d66d4b95b9cee7cbe1f6f069be80f6460eb3782629f8bf6f00ede languageName: node linkType: hard "web3-utils@npm:^1.0.0-beta.31, web3-utils@npm:^1.3.0": - version: 1.3.4 - resolution: "web3-utils@npm:1.3.4" + version: 1.4.0 + resolution: "web3-utils@npm:1.4.0" dependencies: bn.js: ^4.11.9 eth-lib: 0.2.8 @@ -12939,9 +13311,9 @@ typescript@^3.8.3: ethjs-unit: 0.1.6 number-to-bn: 1.7.0 randombytes: ^2.1.0 - underscore: 1.9.1 + underscore: 1.12.1 utf8: 3.0.0 - checksum: 9a581c55dd8e64079d4eb2e8461074f69bcdea0be62ffd87b9f602695e3d535f840b9ebbcff49d50dc52d1920e72953dc4b5c5455f4bda8858da83ae74fbbaa7 + checksum: 352906d912b1d4f9c746419002487f2042b7bbd9ecd0d2c17f22cd56e84f8423a690764ba8aa20cbd4a37853f4d712bbfde74803f5e9b0e3ae12004eaf48b872 languageName: node linkType: hard @@ -12960,18 +13332,18 @@ typescript@^3.8.3: languageName: node linkType: hard -"web3@npm:1.2.9": - version: 1.2.9 - resolution: "web3@npm:1.2.9" +"web3@npm:1.3.6": + version: 1.3.6 + resolution: "web3@npm:1.3.6" 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 - checksum: f59e13ef9f50ce9f5c7d9a6d200734061e47361d0922f3f394d39310713264d6747530c05729b1d488ca45e454576f2909ba77aae9385e7a4c97bf6080573a3c + web3-bzz: 1.3.6 + web3-core: 1.3.6 + web3-eth: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-shh: 1.3.6 + web3-utils: 1.3.6 + checksum: 2c011e5928ff4cc46a1cc3b0b0689a3ed16394054141ee1a53796ea90bbd267153d0a4919caefb07f402b639e22eb8946f6d8f9e91c4d58a54328502d7197af8 languageName: node linkType: hard @@ -12989,9 +13361,9 @@ typescript@^3.8.3: languageName: node linkType: hard -"websocket@npm:^1.0.31": - version: 1.0.33 - resolution: "websocket@npm:1.0.33" +"websocket@npm:^1.0.31, websocket@npm:^1.0.32": + version: 1.0.34 + resolution: "websocket@npm:1.0.34" dependencies: bufferutil: ^4.0.1 debug: ^2.2.0 @@ -12999,7 +13371,7 @@ typescript@^3.8.3: typedarray-to-buffer: ^3.1.5 utf-8-validate: ^5.0.2 yaeti: ^0.0.6 - checksum: 1a68893178fb1436837a231ff6f6f382c4d971096d14426ed03e7933c7a6d15c3bb3ceb360d59cfd4f63e1cd6d204592e5a35dbe01d4a8ff247d60b6545ad25d + checksum: b19fd8908423085ff042232de4c5b2a1951755e4fb2f7bebb4db2f1b1bd1ec3525ea80b320e9556392b72860b0d19d6c88b5a307bc871a69880968952d00cc2d languageName: node linkType: hard @@ -13037,6 +13409,21 @@ typescript@^3.8.3: languageName: node linkType: hard +"which-typed-array@npm:^1.1.2": + version: 1.1.4 + resolution: "which-typed-array@npm:1.1.4" + dependencies: + available-typed-arrays: ^1.0.2 + call-bind: ^1.0.0 + es-abstract: ^1.18.0-next.1 + foreach: ^2.0.5 + function-bind: ^1.1.1 + has-symbols: ^1.0.1 + is-typed-array: ^1.1.3 + checksum: aa89770be09f62f8836f2334080513f8de82ec6e9a503eb9b8867775ac47db72c0a75ac8ac7e5f71825a7b8e5eb6ef0b65dd66cea54709cf73f2ae81b722d5ec + languageName: node + linkType: hard + "which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -13128,9 +13515,9 @@ typescript@^3.8.3: languageName: node linkType: hard -"ws@npm:7.2.3": - version: 7.2.3 - resolution: "ws@npm:7.2.3" +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -13139,7 +13526,7 @@ typescript@^3.8.3: optional: true utf-8-validate: optional: true - checksum: fedf178c29b5f7c4589c88bd1064dea03ba0d761bfcc0562abf4ddd64421fb1767095e140cb3ef8b57c3315d7e1fa1f3cf872e365a399c69fb3566ecdfbfacee + checksum: ffeb626d92f14aa3a67aa3784824c1d290131e25d225f4ca6b1b6b6d7ea754fca67694d89a5b99b144382365e1bccf1f7ec2f92df56f0d25f44939b070452f06 languageName: node linkType: hard @@ -13155,17 +13542,17 @@ typescript@^3.8.3: linkType: hard "ws@npm:^5.1.1": - version: 5.2.2 - resolution: "ws@npm:5.2.2" + version: 5.2.3 + resolution: "ws@npm:5.2.3" dependencies: async-limiter: ~1.0.0 - checksum: c8217b54821ac9109bd395029487fd2a577867d6227624079dfa04c927728be13fdbe43070b2d349e9360d7dd17416c33362ba1062bff3bd9ddab6e9a9272915 + checksum: 03941abe8d073b0bbb9cecb4c02b5e6d06efa6ef7d2ac7a8ba2769ec4fc280fc04ecf06b4479fa04ae255c45b66e9e962ac229964b427ee2484a40a1bd84bc2d languageName: node linkType: hard "ws@npm:^7.2.1": - version: 7.4.4 - resolution: "ws@npm:7.4.4" + version: 7.5.1 + resolution: "ws@npm:7.5.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -13174,7 +13561,7 @@ typescript@^3.8.3: optional: true utf-8-validate: optional: true - checksum: ad08761ed753cdd3f7172e9a9efc7d74e7e196623cace2380e5f74ff0abd16196e03223bd4148a34278dcbc653ee3841994635419281cbf303b3f22c589e2ec4 + checksum: e56541a73cac1d5b4b5e81ddd7e9925e84e45abaab6f3ee5e088e0089b5518f862d8429897243e12482b118971ad8a9a75b1d4900769bce3877878a0a7470043 languageName: node linkType: hard @@ -13254,9 +13641,9 @@ typescript@^3.8.3: linkType: hard "y18n@npm:^4.0.0": - version: 4.0.1 - resolution: "y18n@npm:4.0.1" - checksum: e589620d8d668d696e74730a83731a36a8d782c50379386b142e5b8287388a6ebaf28528e84201c68c206629faed71362c79b201b398eb0c69aa1737635678dd + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: e6d08e9d148e71d620acbca1c10f4db86a3a960527a47e8fbe732ea8246076d0a54e1f6adf0f8f8fdeacb87c23dea52382f4243bf736d36c83bb7f2ee0ea7fcd languageName: node linkType: hard From 7b2462f2fcfbd04fced8293b176ff94ef668dcce Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Thu, 1 Jul 2021 16:24:42 +0200 Subject: [PATCH 09/15] fix(contract): check vault address --- contracts/yield-source/YearnV2YieldSource.sol | 7 +++-- test/YearnV2YieldSource.test.ts | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 31cd368..4ac7dd9 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -9,6 +9,7 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/SafeERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; @@ -18,6 +19,7 @@ import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol /// @dev are not compatible, as they had dips in shareValue due to a small miscalculation /// @notice Yield Source Prize Pools subclasses need to implement this interface so that yield can be generated. contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable { + using AddressUpgradeable for address; using SafeERC20Upgradeable for IERC20Upgradeable; using SafeMathUpgradeable for uint; @@ -71,6 +73,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl } /// @notice Initializes the yield source with + /// @dev `isContract()` will return false if an attacker is calling from a constructor https://ethereum.stackexchange.com/a/64340 /// @param _vault Yearn V2 Vault in which the Yield Source will deposit `token` to generate Yield /// @param _decimals Number of decimals the shares (inherited ERC20) will have. Same as underlying asset to ensure same ExchangeRates. /// @param _symbol Token symbol for the underlying ERC20 shares (eg: yvysDAI). @@ -87,7 +90,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl initializer returns (bool) { - require(address(vault) == address(0), "YearnV2YieldSource/already-initialized"); + require(address(_vault).isContract(), "YearnV2YieldSource/vault-not-contract-address"); require(_vault.activation() != uint256(0), "YearnV2YieldSource/vault-not-initialized"); // NOTE: Vaults from 0.3.2 to 0.3.4 have dips in shareValue @@ -104,7 +107,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl __ReentrancyGuard_init(); __ERC20_init(_name, _symbol); - require(_decimals > 0, "YearnV2YieldSource/decimals-gt-zero"); + require(_decimals > 0, "YearnV2YieldSource/decimals-not-greater-than-zero"); _setupDecimals(_decimals); token.safeApprove(address(_vault), type(uint256).max); diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index 5d38838..b2e0900 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -128,6 +128,35 @@ describe('yearnV2YieldSource', () => { ).to.be.revertedWith('YearnV2YieldSource/vault-not-compatible'); }); } + + it('should fail if vault is not a contract', async () => { + await expect( + initializeYearnV2YieldSource( + randomWalletAddress, + yearnV2YieldSourceTokenDecimals + ), + ).to.be.revertedWith('YearnV2YieldSource/vault-not-contract-address'); + }); + + it('should fail if vault is address zero', async () => { + await expect( + initializeYearnV2YieldSource( + ethers.constants.AddressZero, + yearnV2YieldSourceTokenDecimals + ), + ).to.be.revertedWith('YearnV2YieldSource/vault-not-contract-address'); + }); + + it('should fail if token decimal is not greater than 0', async () => { + await vault.mock.apiVersion.returns(compatibleVersions[0]); + + await expect( + initializeYearnV2YieldSource( + vault.address, + 0 + ), + ).to.be.revertedWith('YearnV2YieldSource/decimals-not-greater-than-zero'); + }); }); describe('create()', () => { From c864041e8d8de366fd1dcfef1a1f2d1a3432ff74 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Thu, 1 Jul 2021 16:42:21 +0200 Subject: [PATCH 10/15] fix(contract): store vault api version in variable --- contracts/yield-source/YearnV2YieldSource.sol | 12 +++++++----- test/YearnV2YieldSource.test.ts | 17 +---------------- yarn.lock | 9 +++++++++ 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 4ac7dd9..7e0acf8 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -90,13 +90,15 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl initializer returns (bool) { - require(address(_vault).isContract(), "YearnV2YieldSource/vault-not-contract-address"); + require(address(_vault) != address(0), "YearnV2YieldSource/vault-not-zero-address"); require(_vault.activation() != uint256(0), "YearnV2YieldSource/vault-not-initialized"); // NOTE: Vaults from 0.3.2 to 0.3.4 have dips in shareValue - require(!areEqualStrings(_vault.apiVersion(), "0.3.2"), "YearnV2YieldSource/vault-not-compatible"); - require(!areEqualStrings(_vault.apiVersion(), "0.3.3"), "YearnV2YieldSource/vault-not-compatible"); - require(!areEqualStrings(_vault.apiVersion(), "0.3.4"), "YearnV2YieldSource/vault-not-compatible"); + string memory _vaultAPIVersion = _vault.apiVersion(); + + require(!_areEqualStrings(_vaultAPIVersion, "0.3.2"), "YearnV2YieldSource/vault-not-compatible"); + require(!_areEqualStrings(_vaultAPIVersion, "0.3.3"), "YearnV2YieldSource/vault-not-compatible"); + require(!_areEqualStrings(_vaultAPIVersion, "0.3.4"), "YearnV2YieldSource/vault-not-compatible"); vault = _vault; token = IERC20Upgradeable(_vault.token()); @@ -313,7 +315,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @param a One string /// @param b Another string /// @return Whether or not the strings are the same or not - function areEqualStrings(string memory a, string memory b) internal pure returns (bool) { + function _areEqualStrings(string memory a, string memory b) internal pure returns (bool) { return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); } } diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index b2e0900..3ba4cc1 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -89,16 +89,10 @@ describe('yearnV2YieldSource', () => { const compatibleVersions = ['0.3.0', '0.3.1', '0.3.5']; const incompatibleVersions = ['0.3.2', '0.3.3', '0.3.4']; - let randomWalletAddress: string; - before(() => { isInitializeTest = true; }); - beforeEach(() => { - randomWalletAddress = ethers.Wallet.createRandom().address; - }); - after(() => { isInitializeTest = false; }); @@ -129,22 +123,13 @@ describe('yearnV2YieldSource', () => { }); } - it('should fail if vault is not a contract', async () => { - await expect( - initializeYearnV2YieldSource( - randomWalletAddress, - yearnV2YieldSourceTokenDecimals - ), - ).to.be.revertedWith('YearnV2YieldSource/vault-not-contract-address'); - }); - it('should fail if vault is address zero', async () => { await expect( initializeYearnV2YieldSource( ethers.constants.AddressZero, yearnV2YieldSourceTokenDecimals ), - ).to.be.revertedWith('YearnV2YieldSource/vault-not-contract-address'); + ).to.be.revertedWith('YearnV2YieldSource/vault-not-zero-address'); }); it('should fail if token decimal is not greater than 0', async () => { diff --git a/yarn.lock b/yarn.lock index 3da1a89..58954b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1730,6 +1730,15 @@ __metadata: languageName: node linkType: hard +"antlr4ts@npm:^0.5.0-alpha.4": + version: 0.5.0-dev + resolution: "antlr4ts@npm:0.5.0-dev" + dependencies: + source-map-support: ^0.5.16 + checksum: 0f206ef5ef5793456de66545a1bf6d8d52343bc6c6689d941cc16ea3f0b6b18a7710b4cc3946a61d021fda51f93b89adcd7c5d7fe249ea1739b0459e7a85b42c + languageName: node + linkType: hard + "anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" From 31783e0e4cf5da435d21cd07bfd3b0136595ba20 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Tue, 13 Jul 2021 18:15:12 -0500 Subject: [PATCH 11/15] fix(contract): add natspec doc to setMaxLosses --- contracts/yield-source/YearnV2YieldSource.sol | 8 ++++++-- test/YearnV2YieldSource.test.ts | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 7e0acf8..d2f9546 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -73,7 +73,6 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl } /// @notice Initializes the yield source with - /// @dev `isContract()` will return false if an attacker is calling from a constructor https://ethereum.stackexchange.com/a/64340 /// @param _vault Yearn V2 Vault in which the Yield Source will deposit `token` to generate Yield /// @param _decimals Number of decimals the shares (inherited ERC20) will have. Same as underlying asset to ensure same ExchangeRates. /// @param _symbol Token symbol for the underlying ERC20 shares (eg: yvysDAI). @@ -125,12 +124,17 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl return true; } - function setMaxLosses(uint256 _maxLosses) external onlyOwner { + /// @notice Sets the maximum acceptable loss to sustain on withdrawal. + /// @dev This function is only callable by the owner of the yield source. + /// @param _maxLosses Max Losses in double decimal precision. + /// @return True if maxLosses was set successfully. + function setMaxLosses(uint256 _maxLosses) external onlyOwner returns(bool) { require(_maxLosses <= 10_000, "YearnV2YieldSource/losses-set-too-high"); maxLosses = _maxLosses; emit MaxLossesChanged(_maxLosses); + return true; } /// @notice Returns the ERC20 asset token used for deposits diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index 3ba4cc1..4e467e6 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -304,6 +304,8 @@ describe('yearnV2YieldSource', () => { .to.emit(yearnV2YieldSource, 'MaxLossesChanged') .withArgs(10_000); expect(await yearnV2YieldSource.maxLosses()).to.eq(10_000); + + expect(await yearnV2YieldSource.connect(yieldSourceOwner).callStatic.setMaxLosses(10_000)).to.equal(true); }); it('should not allow to set losses over 100%', async () => { From 4d9c9978a15f5b51548872781e23a10e9081a605 Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Tue, 13 Jul 2021 18:27:34 -0500 Subject: [PATCH 12/15] feat(contract): add approveMaxAmount function --- contracts/yield-source/YearnV2YieldSource.sol | 12 ++++++++++++ test/YearnV2YieldSource.test.ts | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index d2f9546..ca3f969 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -124,6 +124,18 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl return true; } + /// @notice Approve vault contract to spend max uint256 amount + /// @dev Emergency function to re-approve max amount if approval amount dropped too low + /// @return true if operation is successful + function approveMaxAmount() external onlyOwner returns (bool) { + address _vault = address(vault); + IERC20Upgradeable _token = token; + uint256 allowance = _token.allowance(address(this), _vault); + + _token.safeIncreaseAllowance(_vault, type(uint256).max.sub(allowance)); + return true; + } + /// @notice Sets the maximum acceptable loss to sustain on withdrawal. /// @dev This function is only callable by the owner of the yield source. /// @param _maxLosses Max Losses in double decimal precision. diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index 4e467e6..a7cc47a 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -156,6 +156,19 @@ describe('yearnV2YieldSource', () => { }); }); + describe('approveMaxAmount()', () => { + it('should approve vault to spend max uint256 amount', async () => { + await underlyingToken.mock.allowance.withArgs(yearnV2YieldSource.address, vault.address).returns(ethers.constants.MaxUint256); + + expect(await yearnV2YieldSource.connect(yieldSourceOwner).callStatic.approveMaxAmount()).to.equal(true); + expect(await underlyingToken.allowance(yearnV2YieldSource.address, vault.address)).to.equal(ethers.constants.MaxUint256); + }); + + it('should fail if not owner', async () => { + await expect(yearnV2YieldSource.connect(wallet2).callStatic.approveMaxAmount()).to.be.revertedWith('Ownable: caller is not the owner'); + }); + }); + describe('balanceOfToken()', () => { it('should return user balance', async () => { await yearnV2YieldSource.mint(yieldSourceOwner.address, toWei('100')); From f448d99a67769443c6a224e329a3bf25d235951e Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Tue, 13 Jul 2021 19:05:55 -0500 Subject: [PATCH 13/15] fix(contract): remove transferOwnership from initialize --- contracts/yield-source/YearnV2YieldSource.sol | 12 +++--------- deploy/deploy.ts | 5 ++--- test/YearnV2YieldSource.test.ts | 3 +-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index ca3f969..76cc293 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -43,8 +43,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl IYVaultV2 vault, uint8 decimals, string symbol, - string name, - address indexed owner + string name ); /// @notice Emitted when the Max Losses accepted when withdrawing from yVault are changed @@ -77,13 +76,11 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @param _decimals Number of decimals the shares (inherited ERC20) will have. Same as underlying asset to ensure same ExchangeRates. /// @param _symbol Token symbol for the underlying ERC20 shares (eg: yvysDAI). /// @param _name Token name for the underlying ERC20 shares (eg: PoolTogether Yearn V2 Vault DAI Yield Source). - /// @param _owner Yearn V2 Vault Yield Source owner. function initialize( IYVaultV2 _vault, uint8 _decimals, string calldata _symbol, - string calldata _name, - address _owner + string calldata _name ) public initializer @@ -103,8 +100,6 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl token = IERC20Upgradeable(_vault.token()); __Ownable_init(); - transferOwnership(_owner); - __ReentrancyGuard_init(); __ERC20_init(_name, _symbol); @@ -117,8 +112,7 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl _vault, _decimals, _symbol, - _name, - _owner + _name ); return true; diff --git a/deploy/deploy.ts b/deploy/deploy.ts index 8a13773..e055d76 100644 --- a/deploy/deploy.ts +++ b/deploy/deploy.ts @@ -110,7 +110,6 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro 18, 'yvysDAI', 'PoolTogether Yearn V2 Vault DAI Yield Source', - multisig, ], ); @@ -142,7 +141,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro bytecode: `${await provider.getCode(yearnV2DAIYieldSourceAddress)}`, }; - const outputFile = `${outputDirectory}/AaveDAISwappableYieldSource.json`; + const outputFile = `${outputDirectory}/YearnV2DAIYieldSource.json`; action(`Writing to ${outputFile}...`); writeFileSync(outputFile, JSON.stringify(deploymentSubmission, null, 2), { @@ -150,7 +149,7 @@ const deployFunction: DeployFunction = async function (hre: HardhatRuntimeEnviro flag: 'w', }); - await deployments.save('AaveDAISwappableYieldSource', deploymentSubmission); + await deployments.save('YearnV2DAIYieldSource', deploymentSubmission); }; export default deployFunction; diff --git a/test/YearnV2YieldSource.test.ts b/test/YearnV2YieldSource.test.ts index a7cc47a..f3c57df 100644 --- a/test/YearnV2YieldSource.test.ts +++ b/test/YearnV2YieldSource.test.ts @@ -44,7 +44,6 @@ describe('yearnV2YieldSource', () => { decimals, yearnV2YieldSourceTokenSymbol, yearnV2YieldSourceTokenName, - yieldSourceOwner.address, ); }; @@ -82,6 +81,7 @@ describe('yearnV2YieldSource', () => { if (!isInitializeTest) { await initializeYearnV2YieldSource(vault.address, 18); + await yearnV2YieldSource.transferOwnership(yieldSourceOwner.address); } }); @@ -108,7 +108,6 @@ describe('yearnV2YieldSource', () => { yearnV2YieldSourceTokenDecimals, yearnV2YieldSourceTokenSymbol, yearnV2YieldSourceTokenName, - yieldSourceOwner.address, ); }); } From 420a3d429b8cdc6c3a864eda5c194eb97418cb0c Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Wed, 14 Jul 2021 15:12:29 -0500 Subject: [PATCH 14/15] fix(README): update coveralls badges --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b4280c1..cdbf62d 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,9 @@ # PoolTogether YearnV2 Yield Source -[![Coverage Status](https://coveralls.io/repos/github/jmonteer/pooltogether-yearnv2-yield-source/badge.svg?branch=master)](https://coveralls.io/github/jmonteer/pooltogether-yearnv2-yield-source?branch=master) [![built-with openzeppelin](https://img.shields.io/badge/built%20with-OpenZeppelin-3677FF)](https://docs.openzeppelin.com/) [![Coveralls](https://github.com/jmonteer/pooltogether-yearnv2-yield-source/actions/workflows/main.yml/badge.svg)](https://github.com/jmonteer/pooltogether-yearnv2-yield-source/actions/workflows/main.yml) - +[![Coverage Status](https://coveralls.io/repos/github/pooltogether/pooltogether-yearnv2-yield-source/badge.svg?branch=master)](https://coveralls.io/github/pooltogether/pooltogether-yearnv2-yield-source?branch=master) +[![Coveralls](https://github.com/pooltogether/pooltogether-yearnv2-yield-source/actions/workflows/main.yml/badge.svg)](https://github.com/pooltogether/pooltogether-yearnv2-yield-source/actions/workflows/main.yml) +[![built-with openzeppelin](https://img.shields.io/badge/built%20with-OpenZeppelin-3677FF)](https://docs.openzeppelin.com/) PoolTogether Yield Source that uses [Yearn](https://yearn.finance/) V2 to generate yield by depositing the deposit token in any Yearn Vault that accepts that token. From 32b130dbbaf28b614075ce2d30b0ee7c9f47593c Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Wed, 14 Jul 2021 16:06:41 -0500 Subject: [PATCH 15/15] fix(contract): assign totalSupply to local var --- contracts/yield-source/YearnV2YieldSource.sol | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/contracts/yield-source/YearnV2YieldSource.sol b/contracts/yield-source/YearnV2YieldSource.sol index 76cc293..fcf72a6 100644 --- a/contracts/yield-source/YearnV2YieldSource.sol +++ b/contracts/yield-source/YearnV2YieldSource.sol @@ -300,11 +300,13 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @param tokens amount of tokens to be converted /// @return shares number of shares equivalent to the amount of tokens function _tokenToShares(uint256 tokens) internal view returns (uint256 shares) { - if (totalSupply() == 0) { + uint256 _totalSupply = totalSupply(); + + if (_totalSupply == 0) { shares = tokens; } else { uint256 _totalTokens = _totalAssetsInToken(); - shares = tokens.mul(totalSupply()).div(_totalTokens); + shares = tokens.mul(_totalSupply).div(_totalTokens); } } @@ -313,11 +315,13 @@ contract YearnV2YieldSource is IYieldSource, ERC20Upgradeable, OwnableUpgradeabl /// @dev used to calculate how many shares to mint / burn when depositing / withdrawing /// @return tokens number of tokens equivalent (in value) to the amount of Yield Source shares function _sharesToToken(uint256 shares) internal view returns (uint256 tokens) { - if (totalSupply() == 0) { + uint256 _totalSupply = totalSupply(); + + if (_totalSupply == 0) { tokens = shares; } else { uint256 _totalTokens = _totalAssetsInToken(); - tokens = shares.mul(_totalTokens).div(totalSupply()); + tokens = shares.mul(_totalTokens).div(_totalSupply); } }