diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index 8a63e176..0facdeac 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -12,6 +12,8 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 # todo: only fetch for the HEAD branch - uses: actions/setup-go@v3 with: go-version: "1.19" diff --git a/abi/HDT.json b/abi/HDT.json index a541ff9c..e3996558 100644 --- a/abi/HDT.json +++ b/abi/HDT.json @@ -44,6 +44,25 @@ "name": "Approval", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newToken", + "type": "address" + } + ], + "name": "AssetTokenChanged", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -372,6 +391,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "newTokenAddress", + "type": "address" + } + ], + "name": "setAssetToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/abi/LibFeeManager.json b/abi/LibFeeManager.json new file mode 100644 index 00000000..af6d24fe --- /dev/null +++ b/abi/LibFeeManager.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_feeManagerAddress", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/LibHDT.json b/abi/LibHDT.json new file mode 100644 index 00000000..ae62ffab --- /dev/null +++ b/abi/LibHDT.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_hdtAddress", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/LibPool.json b/abi/LibPool.json new file mode 100644 index 00000000..cee638ab --- /dev/null +++ b/abi/LibPool.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/LibPoolConfig.json b/abi/LibPoolConfig.json new file mode 100644 index 00000000..61ea58e4 --- /dev/null +++ b/abi/LibPoolConfig.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_poolConfigAddress", + "type": "address" + } + ], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/PoolFactory.json b/abi/PoolFactory.json new file mode 100644 index 00000000..058acc67 --- /dev/null +++ b/abi/PoolFactory.json @@ -0,0 +1,896 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_protocolOwner", + "type": "address" + }, + { + "internalType": "address", + "name": "_humaConfigAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_hdtImplAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_baseCreditPoolImplAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_receivableFactoringPoolImplAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "BaseCredtiPoolImplChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "deployerAddress", + "type": "address" + } + ], + "name": "DeployerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "deployerAddress", + "type": "address" + } + ], + "name": "DeployerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "HDTImplChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "poolName", + "type": "string" + } + ], + "name": "PoolAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "poolName", + "type": "string" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "name": "PoolDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum PoolFactory.PoolStatus", + "name": "oldStatus", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "enum PoolFactory.PoolStatus", + "name": "newStatus", + "type": "uint8" + } + ], + "name": "PoolStatusUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "ReceivableFactoringPoolImplChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEPLOYER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "HUMA_CONFIG_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OWNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addDeployer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_poolName", + "type": "string" + }, + { + "internalType": "address", + "name": "_poolTimeLock", + "type": "address" + }, + { + "internalType": "address", + "name": "_hdt", + "type": "address" + }, + { + "internalType": "address", + "name": "_feeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_poolConfig", + "type": "address" + } + ], + "name": "addExistingPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "baseCreditPoolImplAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "checkPool", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "poolName", + "type": "string" + }, + { + "internalType": "enum PoolFactory.PoolStatus", + "name": "poolStatus", + "type": "uint8" + }, + { + "internalType": "address", + "name": "poolTimeLock", + "type": "address" + }, + { + "internalType": "address", + "name": "hdt", + "type": "address" + }, + { + "internalType": "address", + "name": "feeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolConfig", + "type": "address" + } + ], + "internalType": "struct PoolFactory.PoolRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_poolName", + "type": "string" + }, + { + "internalType": "address[]", + "name": "_poolOwner", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_poolExecutors", + "type": "address[]" + } + ], + "name": "createBaseCreditPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_poolName", + "type": "string" + }, + { + "internalType": "address[]", + "name": "_poolOwner", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "_poolExecutors", + "type": "address[]" + } + ], + "name": "createReceivableFactoringPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "deletePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hdtImplAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + } + ], + "name": "initializeHDT", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "initializePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_poolOwnerTreasury", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_poolPayPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "withdrawalLockoutPeriod", + "type": "uint256" + } + ], + "name": "initializePoolConfigOne", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "liquidityCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolOwnerRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolOwnerLiquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "EARewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "EALiquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCreditLine", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_apr", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivableRequiredInBps", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_defaultPoolOperator", + "type": "address" + } + ], + "name": "initializePoolConfigTwo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_frontLoadingFeeFlat", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_frontLoadingFeeBps", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lateFeeFlat", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lateFeeBps", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_membershipFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_minPrincipalRateInBps", + "type": "uint256" + } + ], + "name": "initializePoolFeeManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "receivableFactoringPoolImplAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeDeployer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "setBaseCredtiPoolImplAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "setHDTImplAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "setReceivableFactoringPoolImplAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolAddress", + "type": "address" + } + ], + "name": "updatePoolStatus", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/audit/Huma Finance Certik Audit Final.pdf b/audit/Huma Finance Certik Audit Final.pdf new file mode 100644 index 00000000..2137e238 Binary files /dev/null and b/audit/Huma Finance Certik Audit Final.pdf differ diff --git a/contracts/BaseCreditPool.sol b/contracts/BaseCreditPool.sol index a397c843..a1e61887 100644 --- a/contracts/BaseCreditPool.sol +++ b/contracts/BaseCreditPool.sol @@ -7,7 +7,7 @@ import "./BasePool.sol"; import "./BaseCreditPoolStorage.sol"; import "./Errors.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; /** * @notice BaseCreditPool is the basic form of a complete pool in Huma Protocol. diff --git a/contracts/BaseFeeManager.sol b/contracts/BaseFeeManager.sol index 5472a6ff..2a58273b 100644 --- a/contracts/BaseFeeManager.sol +++ b/contracts/BaseFeeManager.sol @@ -7,7 +7,7 @@ import "./interfaces/IFeeManager.sol"; import "./HumaConfig.sol"; import "./Errors.sol"; import {BaseStructs as BS} from "./libraries/BaseStructs.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; /** * diff --git a/contracts/BasePool.sol b/contracts/BasePool.sol index 5c7d7ca9..7bc1a73e 100644 --- a/contracts/BasePool.sol +++ b/contracts/BasePool.sol @@ -15,7 +15,7 @@ import "./EvaluationAgentNFT.sol"; import "./HDT/HDT.sol"; import "./HumaConfig.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; abstract contract BasePool is Initializable, BasePoolStorage, ILiquidityProvider, IPool { using SafeERC20 for IERC20; diff --git a/contracts/BasePoolConfig.sol b/contracts/BasePoolConfig.sol index 2cd0108e..7cfc9de0 100644 --- a/contracts/BasePoolConfig.sol +++ b/contracts/BasePoolConfig.sol @@ -12,7 +12,7 @@ import "./HumaConfig.sol"; import "./BasePool.sol"; import "./Errors.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; contract BasePoolConfig is Ownable, Initializable { using SafeERC20 for IERC20; diff --git a/contracts/HDT/HDT.sol b/contracts/HDT/HDT.sol index d123598c..f8ecf3cc 100644 --- a/contracts/HDT/HDT.sol +++ b/contracts/HDT/HDT.sol @@ -14,6 +14,7 @@ import "../Errors.sol"; */ contract HDT is ERC20Upgradeable, OwnableUpgradeable, HDTStorage, IHDT { event PoolChanged(address pool); + event AssetTokenChanged(address oldToken, address newToken); constructor() { _disableInitializers(); @@ -48,6 +49,12 @@ contract HDT is ERC20Upgradeable, OwnableUpgradeable, HDTStorage, IHDT { emit PoolChanged(poolAddress); } + function setAssetToken(address newTokenAddress) external onlyOwner { + address oldTokenAddress = _assetToken; + _assetToken = newTokenAddress; + emit AssetTokenChanged(oldTokenAddress, newTokenAddress); + } + function decimals() public view override returns (uint8) { return _decimals; } diff --git a/contracts/HumaConfig.sol b/contracts/HumaConfig.sol index 61dc3f8c..a0bc30d8 100644 --- a/contracts/HumaConfig.sol +++ b/contracts/HumaConfig.sol @@ -6,7 +6,7 @@ import "@openzeppelin/contracts/security/Pausable.sol"; import "./Errors.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; /** @notice HumaConfig maintains all the global configurations supported by Huma protocol. */ diff --git a/contracts/factory/LibFeeManager.sol b/contracts/factory/LibFeeManager.sol new file mode 100644 index 00000000..a234a51b --- /dev/null +++ b/contracts/factory/LibFeeManager.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +pragma solidity ^0.8.0; + +import "../BaseFeeManager.sol"; + +library LibFeeManager { + function addFeeManager() public returns (address) { + BaseFeeManager feeManager = new BaseFeeManager(); + return address(feeManager); + } + + function initializeFeeManager( + address _feeManagerAddress, + uint256 _frontLoadingFeeFlat, + uint256 _frontLoadingFeeBps, + uint256 _lateFeeFlat, + uint256 _lateFeeBps, + uint256 _membershipFee, + uint256 _minPrincipalRateInBps + ) public { + BaseFeeManager feeManager = BaseFeeManager(_feeManagerAddress); + feeManager.setFees( + _frontLoadingFeeFlat, + _frontLoadingFeeBps, + _lateFeeFlat, + _lateFeeBps, + _membershipFee + ); + feeManager.setMinPrincipalRateInBps(_minPrincipalRateInBps); + } + + function transferOwnership(address _feeManagerAddress, address newOwner) public { + BaseFeeManager feeManager = BaseFeeManager(_feeManagerAddress); + feeManager.transferOwnership(newOwner); + } + + function owner(address _feeManagerAddress) public view returns (address) { + BaseFeeManager feeManager = BaseFeeManager(_feeManagerAddress); + return feeManager.owner(); + } +} diff --git a/contracts/factory/LibHDT.sol b/contracts/factory/LibHDT.sol new file mode 100644 index 00000000..c9a390c2 --- /dev/null +++ b/contracts/factory/LibHDT.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +pragma solidity ^0.8.0; + +import "../HDT/HDT.sol"; +import "../openzeppelin/TransparentUpgradeableProxy.sol"; + +library LibHDT { + function addHDT(address _hdtImplAddress) public returns (address) { + TransparentUpgradeableProxy hdt = new TransparentUpgradeableProxy( + _hdtImplAddress, + msg.sender, //Todo: make this to be the real proxy admin + "" + ); + return address(hdt); + } + + function initializeHDT( + address _hdtAddress, + string memory name, + string memory symbol, + address underlyingToken, + address _poolAddress + ) public { + HDT hdt = HDT(_hdtAddress); + hdt.initialize(name, symbol, underlyingToken); + hdt.setPool(_poolAddress); + } + + function transferOwnership(address _hdtAddress, address newOwner) public { + HDT hdt = HDT(_hdtAddress); + hdt.transferOwnership(newOwner); + } + + function owner(address _hdtAddress) public view returns (address) { + HDT hdt = HDT(_hdtAddress); + return hdt.owner(); + } +} diff --git a/contracts/factory/LibPool.sol b/contracts/factory/LibPool.sol new file mode 100644 index 00000000..94fef69c --- /dev/null +++ b/contracts/factory/LibPool.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +pragma solidity ^0.8.0; + +import "../BasePool.sol"; +import "../openzeppelin/TransparentUpgradeableProxy.sol"; + +library LibPool { + function addPool(address _poolImplAddress) public returns (address) { + TransparentUpgradeableProxy pool = new TransparentUpgradeableProxy( + _poolImplAddress, + msg.sender, //Todo: make this to be the real proxy admin + "" + ); + return address(pool); + } + + function initializePool(address _poolAddress, address _poolConfigAddress) public { + BasePool pool = BasePool(_poolAddress); + pool.initialize(_poolConfigAddress); + } + + function initialized(address _poolAddress) public view returns (bool) { + BasePool pool = BasePool(_poolAddress); + return pool.poolConfig() != address(0); + } +} diff --git a/contracts/factory/LibPoolConfig.sol b/contracts/factory/LibPoolConfig.sol new file mode 100644 index 00000000..1b7b0790 --- /dev/null +++ b/contracts/factory/LibPoolConfig.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +pragma solidity ^0.8.0; + +import "../BasePoolConfig.sol"; +// import "hardhat/console.sol"; + +library LibPoolConfig { + function addPoolConfig() public returns (address) { + BasePoolConfig poolConfig = new BasePoolConfig(); + return address(poolConfig); + } + + function initializePoolBasicConfig( + address _poolConfigAddress, + string memory _poolName, + address _poolAddress, + address _hdtAddress, + address _humaConfigAddress, + address _feeManagerAddress, + address _poolOwnerTreasury, + uint256 _poolPayPeriod, + uint256 withdrawalLockoutPeriod + ) public { + BasePoolConfig poolConfig = BasePoolConfig(_poolConfigAddress); + poolConfig.initialize(_poolName, _hdtAddress, _humaConfigAddress, _feeManagerAddress); + poolConfig.setPool(_poolAddress); + poolConfig.setPoolToken(_hdtAddress); + poolConfig.setPoolOwnerTreasury(_poolOwnerTreasury); + poolConfig.setPoolPayPeriod(_poolPayPeriod); + poolConfig.setWithdrawalLockoutPeriod(withdrawalLockoutPeriod); + } + + function initializePoolLiquidityConfig( + address _poolConfigAddress, + uint256 liquidityCap, + uint256 poolOwnerRewards, + uint256 poolOwnerLiquidity, + uint256 EARewards, + uint256 EALiquidity, + uint256 maxCreditLine, + uint256 _apr, + uint256 receivableRequiredInBps, + address _defaultPoolOperator + ) public { + BasePoolConfig poolConfig = BasePoolConfig(_poolConfigAddress); + + poolConfig.setPoolLiquidityCap(liquidityCap); + poolConfig.setPoolOwnerRewardsAndLiquidity(poolOwnerRewards, poolOwnerLiquidity); + poolConfig.setEARewardsAndLiquidity(EARewards, EALiquidity); + poolConfig.setMaxCreditLine(maxCreditLine); + poolConfig.setAPR(_apr); + poolConfig.setReceivableRequiredInBps(receivableRequiredInBps); + poolConfig.addPoolOperator(_defaultPoolOperator); + } + + function transferOwnership(address _poolConfigAddress, address newOwner) public { + BasePoolConfig poolConfig = BasePoolConfig(_poolConfigAddress); + poolConfig.transferOwnership(newOwner); + } + + function owner(address _poolConfigAddress) public view returns (address) { + BasePoolConfig poolConfig = BasePoolConfig(_poolConfigAddress); + return poolConfig.owner(); + } +} diff --git a/contracts/factory/PoolFactory.sol b/contracts/factory/PoolFactory.sol new file mode 100644 index 00000000..a01ab9ff --- /dev/null +++ b/contracts/factory/PoolFactory.sol @@ -0,0 +1,318 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/governance/TimelockController.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import "./LibPoolConfig.sol"; +import "./LibFeeManager.sol"; +import "./LibHDT.sol"; +import "./LibPool.sol"; + +contract PoolFactory is AccessControl { + bytes32 public constant DEPLOYER_ROLE = keccak256("DEPLOYER_ROLE"); + bytes32 public constant OWNER_ROLE = keccak256("OWNER_ROLE"); + + address public immutable HUMA_CONFIG_ADDRESS; + address public hdtImplAddress; + address public baseCreditPoolImplAddress; + address public receivableFactoringPoolImplAddress; + + mapping(address => PoolRecord) private pools; + + enum PoolStatus { + Created, + Initialized, + Deleted + } + + struct PoolRecord { + string poolName; + PoolStatus poolStatus; + address poolTimeLock; + address hdt; + address feeManager; + address poolConfig; + } + + event HDTImplChanged(address oldAddress, address newAddress); + event BaseCredtiPoolImplChanged(address oldAddress, address newAddress); + event ReceivableFactoringPoolImplChanged(address oldAddress, address newAddress); + + event PoolDeleted(address poolAddress); + event DeployerAdded(address deployerAddress); + event DeployerRemoved(address deployerAddress); + + event PoolCreated(address poolAddress, string poolName); + event PoolAdded(address poolAddress, string poolName); + event OwnershipChanged(address oldOwner, address newOwner); + + event PoolStatusUpdated(PoolStatus oldStatus, PoolStatus newStatus); + + constructor( + address _protocolOwner, + address _humaConfigAddress, + address _hdtImplAddress, + address _baseCreditPoolImplAddress, + address _receivableFactoringPoolImplAddress + ) { + _grantRole(OWNER_ROLE, _protocolOwner); + HUMA_CONFIG_ADDRESS = _humaConfigAddress; + hdtImplAddress = _hdtImplAddress; + baseCreditPoolImplAddress = _baseCreditPoolImplAddress; + receivableFactoringPoolImplAddress = _receivableFactoringPoolImplAddress; + } + + function addDeployer(address account) external onlyRole(OWNER_ROLE) { + _grantRole(DEPLOYER_ROLE, account); + emit DeployerAdded(account); + } + + function removeDeployer(address account) external onlyRole(OWNER_ROLE) { + _revokeRole(DEPLOYER_ROLE, account); + emit DeployerRemoved(account); + } + + function createBaseCreditPool( + string memory _poolName, + address[] memory _poolOwner, + address[] memory _poolExecutors + ) external onlyRole(DEPLOYER_ROLE) { + address feeManagerAddress = LibFeeManager.addFeeManager(); + address hdt = LibHDT.addHDT(hdtImplAddress); + address poolConfigAddress = LibPoolConfig.addPoolConfig(); + address timeLockAddress = addTimeLock(_poolOwner, _poolExecutors); + address pool = LibPool.addPool(baseCreditPoolImplAddress); + emit PoolCreated(pool, _poolName); + _addExistingPool( + pool, + _poolName, + timeLockAddress, + hdt, + feeManagerAddress, + poolConfigAddress + ); + // pools[pool] = PoolRecord( + // _poolName, + // PoolStatus.Created, + // timeLockAddress, + // address(hdt), + // feeManagerAddress, + // poolConfigAddress + // ); + } + + function initializePoolFeeManager( + address _poolAddress, + uint256 _frontLoadingFeeFlat, + uint256 _frontLoadingFeeBps, + uint256 _lateFeeFlat, + uint256 _lateFeeBps, + uint256 _membershipFee, + uint256 _minPrincipalRateInBps + ) external onlyRole(DEPLOYER_ROLE) { + LibFeeManager.initializeFeeManager( + pools[_poolAddress].feeManager, + _frontLoadingFeeFlat, + _frontLoadingFeeBps, + _lateFeeFlat, + _lateFeeBps, + _membershipFee, + _minPrincipalRateInBps + ); + LibFeeManager.transferOwnership( + pools[_poolAddress].feeManager, + pools[_poolAddress].poolTimeLock + ); + } + + function initializeHDT( + address _poolAddress, + string memory name, + string memory symbol, + address underlyingToken + ) external onlyRole(DEPLOYER_ROLE) { + LibHDT.initializeHDT(pools[_poolAddress].hdt, name, symbol, underlyingToken, _poolAddress); + LibHDT.transferOwnership(pools[_poolAddress].hdt, pools[_poolAddress].poolTimeLock); + } + + function initializePoolConfigTwo( + address _poolAddress, + uint256 liquidityCap, + uint256 poolOwnerRewards, + uint256 poolOwnerLiquidity, + uint256 EARewards, + uint256 EALiquidity, + uint256 maxCreditLine, + uint256 _apr, + uint256 receivableRequiredInBps, + address _defaultPoolOperator + ) external onlyRole(DEPLOYER_ROLE) { + LibPoolConfig.initializePoolLiquidityConfig( + pools[_poolAddress].poolConfig, + liquidityCap, + poolOwnerRewards, + poolOwnerLiquidity, + EARewards, + EALiquidity, + maxCreditLine, + _apr, + receivableRequiredInBps, + _defaultPoolOperator + ); + LibPoolConfig.transferOwnership( + pools[_poolAddress].poolConfig, + pools[_poolAddress].poolTimeLock + ); + } + + function initializePoolConfigOne( + address _poolAddress, + address _poolOwnerTreasury, + uint256 _poolPayPeriod, + uint256 withdrawalLockoutPeriod + ) external onlyRole(DEPLOYER_ROLE) { + LibPoolConfig.initializePoolBasicConfig( + pools[_poolAddress].poolConfig, + pools[_poolAddress].poolName, + _poolAddress, + pools[_poolAddress].hdt, + HUMA_CONFIG_ADDRESS, + pools[_poolAddress].feeManager, + _poolOwnerTreasury, + _poolPayPeriod, + withdrawalLockoutPeriod + ); + } + + function initializePool(address _poolAddress) external onlyRole(DEPLOYER_ROLE) { + LibPool.initializePool(_poolAddress, pools[_poolAddress].poolConfig); + } + + function createReceivableFactoringPool( + string memory _poolName, + address[] memory _poolOwner, + address[] memory _poolExecutors + ) external onlyRole(DEPLOYER_ROLE) { + address feeManagerAddress = LibFeeManager.addFeeManager(); + address hdt = LibHDT.addHDT(hdtImplAddress); + address poolConfigAddress = LibPoolConfig.addPoolConfig(); + address timeLockAddress = addTimeLock(_poolOwner, _poolExecutors); + address pool = LibPool.addPool(receivableFactoringPoolImplAddress); + pools[pool] = PoolRecord( + _poolName, + PoolStatus.Created, + timeLockAddress, + address(hdt), + feeManagerAddress, + poolConfigAddress + ); + emit PoolCreated(pool, _poolName); + } + + function setHDTImplAddress(address newAddress) external onlyRole(OWNER_ROLE) { + address oldAddress = hdtImplAddress; + hdtImplAddress = newAddress; + emit HDTImplChanged(oldAddress, newAddress); + } + + function setBaseCredtiPoolImplAddress(address newAddress) external onlyRole(OWNER_ROLE) { + address oldAddress = hdtImplAddress; + baseCreditPoolImplAddress = newAddress; + emit BaseCredtiPoolImplChanged(oldAddress, newAddress); + } + + function setReceivableFactoringPoolImplAddress(address newAddress) + external + onlyRole(OWNER_ROLE) + { + address oldAddress = hdtImplAddress; + receivableFactoringPoolImplAddress = newAddress; + emit ReceivableFactoringPoolImplChanged(oldAddress, newAddress); + } + + function checkPool(address _poolAddress) external view returns (PoolRecord memory) { + if (_poolAddress == address(0)) { + revert("ZERO_ADDRESS"); + } + return pools[_poolAddress]; + } + + function _addExistingPool( + address _poolAddress, + string memory _poolName, + address _poolTimeLock, + address _hdt, + address _feeManager, + address _poolConfig + ) private { + pools[_poolAddress] = PoolRecord( + _poolName, + PoolStatus.Created, + _poolTimeLock, + _hdt, + _feeManager, + _poolConfig + ); + emit PoolAdded(_poolAddress, _poolName); + } + + function addExistingPool( + address _poolAddress, + string memory _poolName, + address _poolTimeLock, + address _hdt, + address _feeManager, + address _poolConfig + ) external onlyRole(OWNER_ROLE) { + _addExistingPool(_poolAddress, _poolName, _poolTimeLock, _hdt, _feeManager, _poolConfig); + } + + function deletePool(address _poolAddress) external onlyRole(OWNER_ROLE) { + if ( + pools[_poolAddress].poolStatus != PoolStatus.Created || + pools[_poolAddress].poolStatus != PoolStatus.Initialized + ) { + revert("NOT_VALID_POOL"); + } + pools[_poolAddress].poolStatus = PoolStatus.Deleted; + + emit PoolDeleted(_poolAddress); + } + + function updatePoolStatus(address _poolAddress) external onlyRole(DEPLOYER_ROLE) { + address poolTimeLock = pools[_poolAddress].poolTimeLock; + if (LibFeeManager.owner(pools[_poolAddress].feeManager) != poolTimeLock) { + revert("FEE_MANAGER_NOT_INITIALIZED"); + } + if (LibHDT.owner(pools[_poolAddress].hdt) != poolTimeLock) { + revert("HDT_NOT_INITIALIZED"); + } + if (LibPoolConfig.owner(pools[_poolAddress].poolConfig) != poolTimeLock) { + revert("POOL_CONFIG_NOT_INITIALIZED"); + } + if (!LibPool.initialized(_poolAddress)) { + revert("POOL_NOT_INITIALIZED"); + } + PoolStatus oldStatus = pools[_poolAddress].poolStatus; + pools[_poolAddress].poolStatus = PoolStatus.Initialized; + emit PoolStatusUpdated(oldStatus, PoolStatus.Initialized); + } + + function addTimeLock(address[] memory poolAdmins, address[] memory poolExecutors) + internal + // only one account can be pool admin + onlyRole(DEPLOYER_ROLE) + returns (address) + { + TimelockController timeLock = new TimelockController(0, poolAdmins, poolExecutors); + return address(timeLock); + } + + function transferOwnership(address newOwner) external onlyRole(OWNER_ROLE) { + _grantRole(OWNER_ROLE, newOwner); + _revokeRole(OWNER_ROLE, msg.sender); + emit OwnershipChanged(msg.sender, newOwner); + } +} diff --git a/contracts/libraries/BaseStructs.sol b/contracts/libraries/BaseStructs.sol index 2f90474f..0321e62b 100644 --- a/contracts/libraries/BaseStructs.sol +++ b/contracts/libraries/BaseStructs.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import "../interfaces/IFeeManager.sol"; -import "hardhat/console.sol"; +// import "hardhat/console.sol"; library BaseStructs { /** diff --git a/contracts/receivables/RealWorldReceivable.sol b/contracts/receivables/RealWorldReceivable.sol index e0cdc46e..0193faa5 100644 --- a/contracts/receivables/RealWorldReceivable.sol +++ b/contracts/receivables/RealWorldReceivable.sol @@ -198,7 +198,7 @@ contract RealWorldReceivable is function supportsInterface(bytes4 interfaceId) public view - override(ERC721Upgradeable, ERC721EnumerableUpgradeable, AccessControlUpgradeable) + override(AccessControlUpgradeable, ERC721EnumerableUpgradeable, ERC721Upgradeable) returns (bool) { return super.supportsInterface(interfaceId); diff --git a/deployment/alfajores-deployed-contracts.json b/deployment/alfajores-deployed-contracts.json new file mode 100644 index 00000000..4bb9acdf --- /dev/null +++ b/deployment/alfajores-deployed-contracts.json @@ -0,0 +1,23 @@ +{ + "USDC": "0x50dc34a634F3E29CfBad79E9cECD2759a6bA8Eae", + "EANFT": "0xd5c09d8E9C45FD0B99bd9032a8985e3c5F16eF6e", + "HumaConfig": "0xb94879541CAF746bFe1b066421E7D64C94fC9738", + "HumaConfigTimelock": "0xa0A16038D714F687679732dCb34e1d4051218Dc5", + "HumaProxyAdminTimelock": "0x503EA0E2d1180b74F3A6105F43C481d18C2e426d", + "RWReceivableImpl": "0x41c82e7bA2Cea9b14B4CCd88d96739a1f1890384", + "RWReceivable": "0xEDa33b3b92Af44D5D1Be70Fb77527e74CbE933f7", + "ArfNewPoolTimelock": "0xCc0a468E93e8D2eEA311c7e9135BB78207DB7EF9", + "ArfNewPoolProxyAdminTimelock": "0xDDf423278bBe8A5Fc0E608d68A577f05024a8Ed4", + "ArfNewPoolFeeManager": "0xF1982c34E7256e02852e7dE664247aE04B0c71f2", + "ArfNewHDTImpl": "0xBB867612c4428798F0Be599671530ED96B104D8a", + "ArfNewHDT": "0x458594604Fbc36DE8016843D50e54688A639655B", + "ArfNewPoolConfig": "0x03e84C522b834Bb8cF84A5B64b4d0824e492Fc68", + "ArfNewPoolImpl": "0x3DA2A11433eABBB1E661478BdBd03510F9D4b83b", + "ArfNewPool": "0xbaFF4a403AA31819B1bD23A254EaEd3d8cC87a41", + "ReceivableFactoringPoolImpl": "0x009016ed5c661d4E93B3f62B153300170B518C1B", + "LibFeeManager": "0x7261a30f2d79e16e3621744e20AA238F119D1B09", + "LibPoolConfig": "0x1Ab8e0B8e63f876c1650e77ae38351E4E796e224", + "LibHDT": "0x7BD8faa4B68c94687a763ad14fe8755295a609F6", + "LibPool": "0x3F6360E54540544c80426DFf0FC6E8d0E5cD0740", + "HumaPoolFactory": "0xd4DC13b2C5eC84243486A953C9223C941BD15Bc5" +} \ No newline at end of file diff --git a/deployment/alfajores-initialized-contracts.json b/deployment/alfajores-initialized-contracts.json new file mode 100644 index 00000000..24a20642 --- /dev/null +++ b/deployment/alfajores-initialized-contracts.json @@ -0,0 +1,6 @@ +{"HumaConfig":"Done", +"ArfNewPoolFeeManager":"Done", +"ArfNewHDT":"Done", +"ArfNewPoolConfig":"Done", +"ArfNewPool":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/alfajores-verified-contracts.json b/deployment/alfajores-verified-contracts.json new file mode 100644 index 00000000..83d3cead --- /dev/null +++ b/deployment/alfajores-verified-contracts.json @@ -0,0 +1,19 @@ +{"USDC":"Done", +"EANFT":"Done", +"HumaConfig":"Done", +"HumaConfigTimelock":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"ArfNewPoolTimelock":"Done", +"ArfNewPoolProxyAdminTimelock":"Done", +"ArfNewPoolFeeManager":"Done", +"ArfNewHDTImpl":"Done", +"ArfNewHDT":"Done", +"ArfNewPoolConfig":"Done", +"ArfNewPoolImpl":"Done", +"ArfNewPool":"Done", +"LibFeeManager":"Done", +"LibPoolConfig":"Done", +"LibHDT":"Done", +"LibPool":"Done", +"HumaPoolFactory":"Done"} \ No newline at end of file diff --git a/deployment/alfajores/deploy-jia-pool.js b/deployment/alfajores/deploy-jia-pool.js new file mode 100644 index 00000000..7f84862c --- /dev/null +++ b/deployment/alfajores/deploy-jia-pool.js @@ -0,0 +1,76 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_EOA='0x18A00C3cdb71491eF7c3b890f9df37CB5Ec11D2A'; +const POOL_OWNER_EOA='0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_EOA], + [deployer.address], + ]); + + const HumaProxyAdminTL = await deploy("TimelockController", "HumaProxyAdminTimelock", [ + 0, + [HUMA_OWNER_EOA], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + HumaProxyAdminTL.address, + [], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "ArfNewPoolTimelock", [ + 0, + [POOL_OWNER_EOA], + [deployer.address], + ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "ArfNewPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_EOA], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "ArfNewPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "ArfNewHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "ArfNewHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "ArfNewPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "ArfNewPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "ArfNewPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/alfajores/init-jia-pool-defender.js b/deployment/alfajores/init-jia-pool-defender.js new file mode 100644 index 00000000..5d606d5b --- /dev/null +++ b/deployment/alfajores/init-jia-pool-defender.js @@ -0,0 +1,384 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0xD8F15c96825e1724B18dd477583E0DcCE3DfF0b1" +const treasuryAccount = "0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615" +const USDC_ADDRESS = "0x50dc34a634F3E29CfBad79E9cECD2759a6bA8Eae"; +const poolTreasury = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [USDC_ADDRESS, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + // await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfNewPoolFeeManager"); + if (initilized) { + console.log("ArfNewPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction( + "ArfNewPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 0, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "ArfNewPoolFeeManager", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfNewHDT"); + if (initilized) { + console.log("ArfNewHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf new HDT", + "AHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfNewPool"]]); + + // await transferOwnershipToTL("HDT", "ArfNewHDT", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfNewPoolConfig"); + if (initilized) { + console.log("ArfNewPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfNewPoolConfig"] + ); + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "initialize", [ + "ArfNewPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfNewPool"], + ]); + + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [0, 0] + ); + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // // 1, + // // deployer.address, + // // ]); + + const maxCL = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setAPR", [1300]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfNewHDT"], + ]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [10]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setCreditApprovalExpiration", [10]); + + // await transferOwnershipToTL("BasePoolConfig", "ArfNewPoolConfig", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfNewPool"); + if (initilized) { + console.log("ArfNewPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfNewPool"]); + + await sendTransaction("ArfNewPool", pool, "initialize", [ + deployedContracts["ArfNewPoolConfig"], + ]); + + await updateInitilizedContract("ArfNewPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfNewPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [poolTreasury]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + // const decimals = await usdc.decimals(); + + // Owner + // const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + // const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + // const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + // console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService //, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + // console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + // await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + await initRWR(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/alfajores/verify-jia-pool.js b/deployment/alfajores/verify-jia-pool.js new file mode 100644 index 00000000..ed6cf756 --- /dev/null +++ b/deployment/alfajores/verify-jia-pool.js @@ -0,0 +1,204 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/alfajores/verify_args/" + +const HUMA_OWNER_EOA = "0x18A00C3cdb71491eF7c3b890f9df37CB5Ec11D2A"; +const POOL_OWNER_EOA = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a"; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + // network = (await hre.ethers.provider.getNetwork()).name; + network = "alfajores"; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + const verifyUsdc = await verifyContract('USDC'); + console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + const verifyRWR = await verifyContract('RWReceivable', + [ + `'${deployedContracts['RWReceivableImpl']}'`, + `'${deployedContracts['HumaProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify RWR result: ${verifyRWR}`); + + + const verifyBaseCreditPoolTL = await verifyContract('ArfNewPoolTimelock', + [ + 0, + `['${POOL_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify Pool result: ${verifyBaseCreditPoolTL}`); + + const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfNewPoolProxyAdminTimelock', + [ + 0, + `['${POOL_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify BaseCreditPoolProxyAdminTL result: ${verifyBaseCreditPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('ArfNewPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('ArfNewHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('ArfNewHDT', + [ + `'${deployedContracts['ArfNewHDTImpl']}'`, + `'${deployedContracts['ArfNewPoolProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('ArfNewPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('ArfNewPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + const verifyPool = await verifyContract('ArfNewPool', + [ + `'${deployedContracts['ArfNewPoolImpl']}'`, + `'${deployedContracts['ArfNewPoolProxyAdminTimelock']}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); + + const verifyLibFeeManager = await verifyContract('LibFeeManager'); + console.log(`Verify LibFeeManager result: ${verifyLibFeeManager}`); + + const verifyLibPoolConfig = await verifyContract('LibPoolConfig'); + console.log(`Verify LibPoolConfig result: ${verifyLibPoolConfig}`); + + const verifyLibHDT = await verifyContract('LibHDT'); + console.log(`Verify LibHDT result: ${verifyLibHDT}`); + + const verifyLibPool = await verifyContract('LibPool'); + console.log(`Verify LibPool result: ${verifyLibPool}`); + + const verifyPoolFactory = await verifyContract('HumaPoolFactory', + [ + `'${HUMA_OWNER_EOA}'`, + `'${deployedContracts['HumaConfig']}'`, + `'${deployedContracts['ArfNewHDTImpl']}'`, + `'${deployedContracts['ArfNewPoolImpl']}'`, + `'${deployedContracts['ReceivableFactoringPoolImpl']}'`, + ]); + console.log(`Verify Pool result: ${verifyPoolFactory}`); + +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/amoy-deployed-contracts.json b/deployment/amoy-deployed-contracts.json new file mode 100644 index 00000000..2626089e --- /dev/null +++ b/deployment/amoy-deployed-contracts.json @@ -0,0 +1,14 @@ +{"EANFT":"0x7e60Ca7FC0F203637C277975815C1Ec7886b6481", +"HumaConfig":"0xF99058210343c60884D14b6CF519328743939Ad5", +"HumaConfigTimelock":"0x3B4C69d6611bAEe3132035d45582316Fa58D18F1", +"RWReceivableImpl":"0x21dAB5182fc889Eb21bbDCc47043CFB99Fb0087f", +"RWReceivable":"0x82c43924ab54CA8bCa466Ad6c929A3af31bd9044", +"HDTImplNew":"0xDF9B5F03c6c948e25850361510AF6BE7Af86e2AE", +"BaseCreditPoolImpl":"0x12D1b56B7a0572e10F6E619802334fBbE3a4eb38", +"ReceivableFactoringPoolImpl":"0x653481D70799b9cD3Bc5602FDa4a66ccb6E54E79", +"LibFeeManager":"0x4a557d3B35D64BC661550f7aA69D78dC9e970a19", +"LibPoolConfig":"0x1Ab8e0B8e63f876c1650e77ae38351E4E796e224", +"LibHDT":"0x7BD8faa4B68c94687a763ad14fe8755295a609F6", +"LibPool":"0x3F6360E54540544c80426DFf0FC6E8d0E5cD0740", +"HumaPoolFactory":"0xd4DC13b2C5eC84243486A953C9223C941BD15Bc5", +"HumaProxyAdminTimelock":"0x6ccF487FB903e5E6DD4B78771d46bfB56E78DE14"} \ No newline at end of file diff --git a/deployment/amoy/deploy-protocol-factory.js b/deployment/amoy/deploy-protocol-factory.js new file mode 100644 index 00000000..6c30f755 --- /dev/null +++ b/deployment/amoy/deploy-protocol-factory.js @@ -0,0 +1,71 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_ADDRESS='0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + // const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_ADDRESS], + [deployer.address], + ]); + + const HumaProxyAdminTL = await deploy("TimelockController", "HumaProxyAdminTimelock", [ + 0, + [HUMA_OWNER_ADDRESS], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + HumaProxyAdminTL.address, + [], + ]); + + const hdtImpl = await deploy("HDT", "HDTImplNew"); + + const bc_poolImpl = await deploy("BaseCreditPool", "BaseCreditPoolImpl"); + const rf_poolImpl = await deploy("BaseCreditPool", "ReceivableFactoringPoolImpl"); + + const libFeeManager = await deploy("LibFeeManager", "LibFeeManager"); + const libPoolConfig = await deploy("LibPoolConfig", "LibPoolConfig"); + const libHDT = await deploy("LibHDT", "LibHDT"); + const libPool = await deploy("LibPool", "LibPool"); + const poolFactory = await deploy("PoolFactory", "HumaPoolFactory", + [ + HUMA_OWNER_ADDRESS, + humaConfig.address, + hdtImpl.address, + bc_poolImpl.address, + rf_poolImpl.address, + ], + {libraries: { + LibFeeManager: libFeeManager.address, + LibPoolConfig: libPoolConfig.address, + LibHDT: libHDT.address, + LibPool: libPool.address, + },}) + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/amoy/init-protocol-factory.js b/deployment/amoy/init-protocol-factory.js new file mode 100644 index 00000000..ec2a8d86 --- /dev/null +++ b/deployment/amoy/init-protocol-factory.js @@ -0,0 +1,384 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0x4C7f05dD80B3De583ad0d01AeA24B2a102885871" +const treasuryAccount = "0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615" +const USDC_ADDRESS = "0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582"; +// const poolTreasury = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [USDC_ADDRESS, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + // await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfNewPoolFeeManager"); + if (initilized) { + console.log("ArfNewPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction( + "ArfNewPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 0, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "ArfNewPoolFeeManager", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfNewHDT"); + if (initilized) { + console.log("ArfNewHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf new HDT", + "AHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfNewPool"]]); + + // await transferOwnershipToTL("HDT", "ArfNewHDT", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfNewPoolConfig"); + if (initilized) { + console.log("ArfNewPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfNewPoolConfig"] + ); + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "initialize", [ + "ArfNewPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfNewPool"], + ]); + + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [0, 0] + ); + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // // 1, + // // deployer.address, + // // ]); + + const maxCL = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setAPR", [1300]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfNewHDT"], + ]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [10]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setCreditApprovalExpiration", [10]); + + // await transferOwnershipToTL("BasePoolConfig", "ArfNewPoolConfig", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfNewPool"); + if (initilized) { + console.log("ArfNewPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfNewPool"]); + + await sendTransaction("ArfNewPool", pool, "initialize", [ + deployedContracts["ArfNewPoolConfig"], + ]); + + await updateInitilizedContract("ArfNewPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfNewPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [poolTreasury]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + // const decimals = await usdc.decimals(); + + // Owner + // const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + // const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + // const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + // console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService //, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + // console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + // await initEA(); + // await initBaseCreditPoolFeeManager(); + // await initBaseCreditPoolHDT(); + // await initBaseCreditPoolConfig(); + // await initBaseCreditPool(); + await initRWR(); + + // await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/amoy/verify-protocol-factory.js b/deployment/amoy/verify-protocol-factory.js new file mode 100644 index 00000000..fa96929d --- /dev/null +++ b/deployment/amoy/verify-protocol-factory.js @@ -0,0 +1,206 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/amoy/verify_args/" + +const HUMA_OWNER_ADDRESS = "0x4062A9Eab6a49B2Be6aE4F7240D420f6fbE2e615"; +// const POOL_OWNER_EOA = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a"; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + network = "amoy"; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + // const verifyUsdc = await verifyContract('USDC'); + // console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_ADDRESS}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + const verifyRWR = await verifyContract('RWReceivable', + [ + `'${deployedContracts['RWReceivableImpl']}'`, + `'${deployedContracts['HumaProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify RWR result: ${verifyRWR}`); + + + // const verifyBaseCreditPoolTL = await verifyContract('ArfNewPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify Pool result: ${verifyBaseCreditPoolTL}`); + + // const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfNewPoolProxyAdminTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify BaseCreditPoolProxyAdminTL result: ${verifyBaseCreditPoolProxyAdminTL}`); + + // const verifyFeeManager = await verifyContract('ArfNewPoolFeeManager'); + // console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('HDTImplNew'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + // const verifyHDT = await verifyContract('ArfNewHDT', + // [ + // `'${deployedContracts['ArfNewHDTImpl']}'`, + // `'${deployedContracts['ArfNewPoolProxyAdminTimelock']}'`, + // '[]' + // ]); + // console.log(`Verify HDT result: ${verifyHDT}`); + + // const verifyPoolConfig = await verifyContract('ArfNewPoolConfig'); + // console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('BaseCreditPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + const verifyRFPoolImpl = await verifyContract('ReceivableFactoringPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyRFPoolImpl}`); + // const verifyPool = await verifyContract('ArfNewPool', + // [ + // `'${deployedContracts['ArfNewPoolImpl']}'`, + // `'${deployedContracts['ArfNewPoolProxyAdminTimelock']}'`, + // '[]', + // ]); + // console.log(`Verify Pool result: ${verifyPool}`); + + const verifyLibFeeManager = await verifyContract('LibFeeManager'); + console.log(`Verify LibFeeManager result: ${verifyLibFeeManager}`); + + const verifyLibPoolConfig = await verifyContract('LibPoolConfig'); + console.log(`Verify LibPoolConfig result: ${verifyLibPoolConfig}`); + + const verifyLibHDT = await verifyContract('LibHDT'); + console.log(`Verify LibHDT result: ${verifyLibHDT}`); + + const verifyLibPool = await verifyContract('LibPool'); + console.log(`Verify LibPool result: ${verifyLibPool}`); + + const verifyPoolFactory = await verifyContract('HumaPoolFactory', + [ + `'${HUMA_OWNER_ADDRESS}'`, + `'${deployedContracts['HumaConfig']}'`, + `'${deployedContracts['HDTImplNew']}'`, + `'${deployedContracts['BaseCreditPoolImpl']}'`, + `'${deployedContracts['ReceivableFactoringPoolImpl']}'`, + ]); + console.log(`Verify Pool result: ${verifyPoolFactory}`); + +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/celo-deployed-contracts.json b/deployment/celo-deployed-contracts.json new file mode 100644 index 00000000..435a207c --- /dev/null +++ b/deployment/celo-deployed-contracts.json @@ -0,0 +1,19 @@ +{ + "EANFT": "0xe5DE2a822A61cd7E084Fea2410A00f4EcE47401B", + "HumaConfig": "0x4730Ba92780b6783Ce97bD5f7AaD75337d6D180A", + "HumaConfigTimelock": "0x0562e6287dd69E76771E046f7E24ADC608c837b6", + "HumaProxyAdminTimelock": "0x1691090fb0cFd3bd9b59128b57490eA882A09573", + "RWReceivableImpl": "0x5B7841b94a3C7246662ef514745b034A6ceaAB15", + "RWReceivable": "0xfc256098C6c63836ac71F7057c68b74165fF9cbb", + "HDTImpl": "0xf5F9297c74e464933e42F4a989e81D931fb20f83", + "BaseCreditPoolImpl": "0x98f41d57C06b302AFf999f3F58f4ae7a3F884590", + "ReceivableFactoringPoolImpl": "0x87FD98F3eB172B5183F7527060DDbe8a8D17B924", + "LibFeeManager": "0x58AAF1f9cB10F335111A2129273056bbED251B61", + "LibPoolConfig": "0x941687792107eaC859B820d1636936382F3189aa", + "LibHDT": "0x34eA029c5195F8fb4fe59b492be1738a9Dd959AC", + "LibPool": "0x5Cf4467F129e87274196a95a47BdE57f2C3F6C56", + "HumaPoolFactory": "0x8e945C9ca71637D5582FA2cA6347bD4634261410", + "HumaPoolFactoryCreditCollective": "0x48065723605D1367bC4256B747293e281F5aD37b", + "newHDTImpl": "0x0140ABA3E70eba261E31eDaef77a5898DDe84bC1", + "HDT": "0xFf518eb9B4328d37e28C61AAe74079cD4cC7058A" +} \ No newline at end of file diff --git a/deployment/celo-initialized-contracts.json b/deployment/celo-initialized-contracts.json new file mode 100644 index 00000000..557e17fc --- /dev/null +++ b/deployment/celo-initialized-contracts.json @@ -0,0 +1,2 @@ +{"HumaConfig":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/celo-verified-contracts.json b/deployment/celo-verified-contracts.json new file mode 100644 index 00000000..104b39d8 --- /dev/null +++ b/deployment/celo-verified-contracts.json @@ -0,0 +1,13 @@ +{"EANFT":"Done", +"HumaConfig":"Done", +"HumaConfigTimelock":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"HDTImpl":"Done", +"BaseCreditPoolImpl":"Done", +"ReceivableFactoringPoolImpl":"Done", +"LibFeeManager":"Done", +"LibPoolConfig":"Done", +"LibHDT":"Done", +"LibPool":"Done", +"HumaPoolFactory":"Done"} \ No newline at end of file diff --git a/deployment/celo/deploy-protocol-factory.js b/deployment/celo/deploy-protocol-factory.js new file mode 100644 index 00000000..96568091 --- /dev/null +++ b/deployment/celo/deploy-protocol-factory.js @@ -0,0 +1,72 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_ADDRESS='0xABd48A580F66ad5Ad0Fe983968De686F408c88EE'; +// const POOL_OWNER_EOA='0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + // const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_ADDRESS], + [deployer.address], + ]); + + const HumaProxyAdminTL = await deploy("TimelockController", "HumaProxyAdminTimelock", [ + 0, + [HUMA_OWNER_ADDRESS], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + HumaProxyAdminTL.address, + [], + ]); + + const hdtImpl = await deploy("HDT", "newHDTImpl"); + + const bc_poolImpl = await deploy("BaseCreditPool", "BaseCreditPoolImpl"); + const rf_poolImpl = await deploy("BaseCreditPool", "ReceivableFactoringPoolImpl"); + + const libFeeManager = await deploy("LibFeeManager", "LibFeeManager"); + const libPoolConfig = await deploy("LibPoolConfig", "LibPoolConfig"); + const libHDT = await deploy("LibHDT", "LibHDT"); + const libPool = await deploy("LibPool", "LibPool"); + const poolFactory = await deploy("PoolFactory", "HumaPoolFactoryCreditCollective", + [ + HUMA_OWNER_ADDRESS, + humaConfig.address, + hdtImpl.address, + bc_poolImpl.address, + rf_poolImpl.address, + ], + {libraries: { + LibFeeManager: libFeeManager.address, + LibPoolConfig: libPoolConfig.address, + LibHDT: libHDT.address, + LibPool: libPool.address, + },}) + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/celo/init-protocol-factory.js b/deployment/celo/init-protocol-factory.js new file mode 100644 index 00000000..8e058e1b --- /dev/null +++ b/deployment/celo/init-protocol-factory.js @@ -0,0 +1,384 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0x4388fDAF0Ae0F3B843882fF299E87e127c49A74c" +const treasuryAccount = "0xABd48A580F66ad5Ad0Fe983968De686F408c88EE" +const cUSD_ADDRESS = "0x765DE816845861e75A25fCA122bb6898B8B1282a"; +// const poolTreasury = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [cUSD_ADDRESS, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + // await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfNewPoolFeeManager"); + if (initilized) { + console.log("ArfNewPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction( + "ArfNewPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 0, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "ArfNewPoolFeeManager", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfNewHDT"); + if (initilized) { + console.log("ArfNewHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf new HDT", + "AHDT", + cUSD_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfNewPool"]]); + + // await transferOwnershipToTL("HDT", "ArfNewHDT", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfNewPoolConfig"); + if (initilized) { + console.log("ArfNewPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfNewPoolConfig"] + ); + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewHDT"]) { + throw new Error("ArfNewHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolFeeManager"]) { + throw new Error("ArfNewPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfNewHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfNewPoolFeeManager"]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "initialize", [ + "ArfNewPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfNewPool"], + ]); + + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [0, 0] + ); + await sendTransaction( + "ArfNewPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // // 1, + // // deployer.address, + // // ]); + + const maxCL = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setAPR", [1300]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfNewHDT"], + ]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [30]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [10]); + await sendTransaction("ArfNewPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury]); + + await sendTransaction("ArfNewPoolConfig", poolConfig, "setCreditApprovalExpiration", [10]); + + // await transferOwnershipToTL("BasePoolConfig", "ArfNewPoolConfig", "ArfNewPoolTimelock"); + + await updateInitilizedContract("ArfNewPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfNewPool"); + if (initilized) { + console.log("ArfNewPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + + if (!deployedContracts["ArfNewPoolConfig"]) { + throw new Error("ArfNewPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfNewPool"]); + + await sendTransaction("ArfNewPool", pool, "initialize", [ + deployedContracts["ArfNewPoolConfig"], + ]); + + await updateInitilizedContract("ArfNewPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfNewPool"]) { + throw new Error("ArfNewPool not deployed yet!"); + } + // if (!deployedContracts["USDC"]) { + // throw new Error("USDC not deployed yet!"); + // } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfNewPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfNewPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + // await sendTransaction("ArfNewPool", pool, "addApprovedLender", [poolTreasury]); + + // const USDC = await hre.ethers.getContractFactory("TestToken"); + // const usdc = USDC.attach(deployedContracts["USDC"]); + // const decimals = await usdc.decimals(); + + // Owner + // const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + // const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + // const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + // console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService //, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + // console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + // await initEA(); + // await initBaseCreditPoolFeeManager(); + // await initBaseCreditPoolHDT(); + // await initBaseCreditPoolConfig(); + // await initBaseCreditPool(); + await initRWR(); + + // await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/celo/verify-protocol-factory.js b/deployment/celo/verify-protocol-factory.js new file mode 100644 index 00000000..20c72972 --- /dev/null +++ b/deployment/celo/verify-protocol-factory.js @@ -0,0 +1,206 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/celo/verify_args/" + +const HUMA_OWNER_ADDRESS = "0xABd48A580F66ad5Ad0Fe983968De686F408c88EE"; +const POOL_OWNER_EOA = "0xf9f1f8b93Be684847D8DaF82b1643b2D5BB4419a"; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + // network = (await hre.ethers.provider.getNetwork()).name; + network = "celo"; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + // const verifyUsdc = await verifyContract('USDC'); + // console.log(`Verify USDC result: ${verifyUsdc}`); + + // const verifyEANFT = await verifyContract('EANFT'); + // console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + // const verifyHumaConfig = await verifyContract('HumaConfig'); + // console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + // const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + // [ + // 0, + // `['${HUMA_OWNER_ADDRESS}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + // const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + // console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + // const verifyRWR = await verifyContract('RWReceivable', + // [ + // `'${deployedContracts['RWReceivableImpl']}'`, + // `'${deployedContracts['HumaProxyAdminTimelock']}'`, + // '[]' + // ]); + // console.log(`Verify RWR result: ${verifyRWR}`); + + + // const verifyBaseCreditPoolTL = await verifyContract('ArfNewPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify Pool result: ${verifyBaseCreditPoolTL}`); + + // const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfNewPoolProxyAdminTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify BaseCreditPoolProxyAdminTL result: ${verifyBaseCreditPoolProxyAdminTL}`); + + // const verifyFeeManager = await verifyContract('ArfNewPoolFeeManager'); + // console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('newHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('HDT', + [ + `'${deployedContracts['HDTImpl']}'`, + deployer.address, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + // const verifyPoolConfig = await verifyContract('ArfNewPoolConfig'); + // console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + // const verifyPoolImpl = await verifyContract('BaseCreditPoolImpl'); + // console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + // const verifyRFPoolImpl = await verifyContract('ReceivableFactoringPoolImpl'); + // console.log(`Verify PoolImpl result: ${verifyRFPoolImpl}`); + // // const verifyPool = await verifyContract('ArfNewPool', + // // [ + // // `'${deployedContracts['ArfNewPoolImpl']}'`, + // // `'${deployedContracts['ArfNewPoolProxyAdminTimelock']}'`, + // // '[]', + // // ]); + // // console.log(`Verify Pool result: ${verifyPool}`); + + // const verifyLibFeeManager = await verifyContract('LibFeeManager'); + // console.log(`Verify LibFeeManager result: ${verifyLibFeeManager}`); + + // const verifyLibPoolConfig = await verifyContract('LibPoolConfig'); + // console.log(`Verify LibPoolConfig result: ${verifyLibPoolConfig}`); + + // const verifyLibHDT = await verifyContract('LibHDT'); + // console.log(`Verify LibHDT result: ${verifyLibHDT}`); + + // const verifyLibPool = await verifyContract('LibPool'); + // console.log(`Verify LibPool result: ${verifyLibPool}`); + + // const verifyPoolFactory = await verifyContract('HumaPoolFactoryCreditCollective', + // [ + // `'${HUMA_OWNER_ADDRESS}'`, + // `'${deployedContracts['HumaConfig']}'`, + // `'${deployedContracts['HDTImpl']}'`, + // `'${deployedContracts['BaseCreditPoolImpl']}'`, + // `'${deployedContracts['ReceivableFactoringPoolImpl']}'`, + // ]); + // console.log(`Verify Pool result: ${verifyPoolFactory}`); + +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/goerli-deployed-contracts.json b/deployment/goerli-deployed-contracts.json index a5b99a45..08aa87ab 100644 --- a/deployment/goerli-deployed-contracts.json +++ b/deployment/goerli-deployed-contracts.json @@ -18,4 +18,22 @@ "HDT":"0x27Fa332a5cA06492C2007FF4b143C921Cf779C3b", "ReceivableFactoringPoolConfig":"0xBa779F41ae414dEc63265D79a02DED47fbe007a5", "ReceivableFactoringPoolImpl":"0x470f71B48B42BE5B4B47D9f9A407bDA98DbDEb8D", -"ReceivableFactoringPool":"0x11672c0bBFF498c72BC2200f42461c0414855042"} \ No newline at end of file +"ReceivableFactoringPool":"0x11672c0bBFF498c72BC2200f42461c0414855042", +"JiaPoolTimelock":"0x8DF7BBae57F1215eE8294D084E08B6a02076eAA5", +"JiaPoolProxyAdminTimelock":"0x87Da18395dc7CE21e0E72e1B01dca0826635FCf0", +"JiaPoolFeeManager":"0x4630ceAedb030b6ad1DCa0E58c3576aa33042b4C", +"JiaHDTImpl":"0x3f95c365aa092E3dF020Bf7E6582E371998Ada4A", +"JiaHDT":"0xAD5e1F01618A2A158097C21866B4e8DCEEA2aC25", +"JiaPoolConfig":"0x9b8513bF9A56E609e66F360B550b7c8724129a05", +"JiaPoolImpl":"0xEb204D979c7aBcA473a0BC780dDf6Ca45E84422f", +"JiaPool":"0x07fd5720FE4d7993550d147c8753A9e60b45940D", +"RWReceivableImpl":"0xf48170cc418c432874d32B03EAc3AC820deEF05E", +"RWReceivable":"0xA1EB18643dd6b75e97D55583BFFfF2311124076f", +"ArfPoolTimelock":"", +"ArfPoolProxyAdminTimelock":"0x74F1bcfb40A1d7A5A986712382ee2e03b1d472Fb", +"ArfPoolFeeManager":"0x35EC0c62F2185492284ecD1b6ed5aDc5b778B592", +"ArfHDTImpl":"0x67663D157Ea0Cd7075cC149EF64fd5701243Aa2b", +"ArfHDT":"0x8947482a523157A82563720e770E0BE8dfD67Cd7", +"ArfPoolConfig":"0xDE5b0A97017B28A4a55F46B27Ae9B3e89B699672", +"ArfPoolImpl":"0x8a6eb5c93b6ec5Bb213CD9E4a894CE8e08ebFFBf", +"ArfPool":"0x7A0F30f9449aC40eADed6994F1579Fd977506d8a"} \ No newline at end of file diff --git a/deployment/goerli-initialized-contracts.json b/deployment/goerli-initialized-contracts.json index f716231b..1e6b56c2 100644 --- a/deployment/goerli-initialized-contracts.json +++ b/deployment/goerli-initialized-contracts.json @@ -1,12 +1,19 @@ -{ - "EANFT": "Done", - "HumaConfig": "Done", - "BaseCreditPoolFeeManager": "Done", - "BaseCreditHDT": "Done", - "BaseCreditPoolConfig": "Done", - "BaseCreditPool": "Done", - "ReceivableFactoringPoolFeeManager": "Done", - "HDT": "Done", - "ReceivableFactoringPoolConfig": "Done", - "ReceivableFactoringPool": "Done" -} \ No newline at end of file +{"EANFT":"Done", +"HumaConfig":"Done", +"BaseCreditPoolFeeManager":"Done", +"BaseCreditHDT":"Done", +"BaseCreditPoolConfig":"Done", +"BaseCreditPool":"Done", +"ReceivableFactoringPoolFeeManager":"Done", +"HDT":"Done", +"ReceivableFactoringPoolConfig":"Done", +"ReceivableFactoringPool":"Done", +"JiaPoolFeeManager":"Done", +"JiaHDT":"Done", +"JiaPoolConfig":"Done", +"JiaPool":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"RWReceivable":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done"} \ No newline at end of file diff --git a/deployment/goerli-verified-contracts.json b/deployment/goerli-verified-contracts.json index be219128..fb389728 100644 --- a/deployment/goerli-verified-contracts.json +++ b/deployment/goerli-verified-contracts.json @@ -18,4 +18,22 @@ "HDT":"Done", "ReceivableFactoringPoolConfig":"Done", "ReceivableFactoringPoolImpl":"Done", -"ReceivableFactoringPool":"Done"} \ No newline at end of file +"ReceivableFactoringPool":"Done", +"JiaPoolTimelock":"Done", +"JiaPoolProxyAdminTimelock":"Done", +"JiaPoolFeeManager":"Done", +"JiaHDTImpl":"Done", +"JiaHDT":"Done", +"JiaPoolConfig":"Done", +"JiaPoolImpl":"Done", +"JiaPool":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"ArfPoolTimelock":"", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done"} \ No newline at end of file diff --git a/deployment/goerli/deploy-goerli-jia-pool.js b/deployment/goerli/deploy-goerli-jia-pool.js new file mode 100644 index 00000000..78ac9aa1 --- /dev/null +++ b/deployment/goerli/deploy-goerli-jia-pool.js @@ -0,0 +1,66 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + const eaService = await accounts[4]; + console.log("ea service address: " + eaService.address); + + const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + const invoiceNFT = await deploy("InvoiceNFT", "RNNFT", [usdc.address]); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "JiaPoolTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "JiaPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "JiaPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "JiaHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "JiaHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "JiaPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "JiaPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "JiaPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/goerli/init-goerli-jia-pool-defender.js b/deployment/goerli/init-goerli-jia-pool-defender.js new file mode 100644 index 00000000..c91e0b17 --- /dev/null +++ b/deployment/goerli/init-goerli-jia-pool-defender.js @@ -0,0 +1,366 @@ +const {BigNumber: BN} = require("ethers"); +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, deployedContracts, lender, ea, eaService; +let pdsService, treasury, ea_bcp, bcpOperator, rfpOperator; +let bcpOwnerTreasury, rfpOwnerTreasury; + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [pdsService.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasury.address]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [ea.address]); + const eaNFTFromEA_bcp = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("JiaPoolFeeManager"); + if (initilized) { + console.log("JiaPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["JiaPoolFeeManager"]) { + throw new Error("JiaPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPoolFeeManager"]); + + await sendTransaction( + "JiaPoolFeeManager", + feeManager, + "setFees", + [10_000_000, 0, 20_000_000, 0, 5_000_000] + ); + // await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "JiaPoolFeeManager", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("JiaHDT"); + if (initilized) { + console.log("JiaHDT is already initialized!"); + return; + } + + if (!deployedContracts["JiaHDT"]) { + throw new Error("JiaHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaHDT"]); + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Jia HDT", + "JHDT", + deployedContracts["USDC"], + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["JiaPool"]]); + + await transferOwnershipToTL("HDT", "JiaHDT", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("JiaPoolConfig"); + if (initilized) { + console.log("JiaPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["JiaPoolConfig"]) { + throw new Error("JiaPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["JiaPoolConfig"] + ); + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + if (!deployedContracts["JiaHDT"]) { + throw new Error("JiaHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["JiaPoolFeeManager"]) { + throw new Error("JiaPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPoolFeeManager"]); + + await sendTransaction("JiaPoolConfig", poolConfig, "initialize", [ + "JiaPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + const cap = BN.from(1_000_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("cap: " + cap); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("JiaPoolConfig", poolConfig, "setPool", [ + deployedContracts["JiaPool"], + ]); + + await sendTransaction( + "JiaPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 200] + ); + await sendTransaction( + "JiaPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [1000, 100] + ); + + await sendTransaction("JiaPoolConfig", poolConfig, "setEvaluationAgent", [ + 2, + ea_bcp.address, + ]); + + const maxCL = BN.from(10_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("JiaPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("JiaPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("JiaPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolPayPeriod", [15]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["JiaHDT"], + ]); + await sendTransaction("JiaPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [0]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + await sendTransaction("JiaPoolConfig", poolConfig, "addPoolOperator", [bcpOperator.address]); + await sendTransaction("JiaPoolConfig", poolConfig, "setPoolOwnerTreasury", [bcpOwnerTreasury.address]); + + await sendTransaction("JiaPoolConfig", poolConfig, "setCreditApprovalExpiration", [5]); + + await transferOwnershipToTL("BasePoolConfig", "JiaPoolConfig", "JiaPoolTimelock"); + + await updateInitilizedContract("JiaPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("JiaPool"); + if (initilized) { + console.log("JiaPool is already initialized!"); + return; + } + + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + + if (!deployedContracts["JiaPoolConfig"]) { + throw new Error("JiaPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["JiaPool"]); + + await sendTransaction("JiaPool", pool, "initialize", [ + deployedContracts["JiaPoolConfig"], + ]); + + await updateInitilizedContract("JiaPool"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["JiaPool"]) { + throw new Error("JiaPool not deployed yet!"); + } + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const JiaPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = JiaPool.attach(deployedContracts["JiaPool"]) + const poolFrombcpOperator = pool.connect(bcpOperator); + + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [deployer.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + await sendTransaction("JiaPool", poolFrombcpOperator, "addApprovedLender", [bcpOwnerTreasury.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + const decimals = await usdc.decimals(); + + // Owner + const usdcFromPoolOwnerTreasury = await usdc.connect(bcpOwnerTreasury); + const poolFromPoolOwnerTreasury = await pool.connect(bcpOwnerTreasury); + const amountOwner = BN.from(20_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("owner to deposit: " + amountOwner); + await sendTransaction("TestToken", usdc, "mint", [bcpOwnerTreasury.address, amountOwner]); + await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + await sendTransaction("JiaPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + const usdcFromEA = await usdc.connect(ea_bcp); + const poolFromEA = await pool.connect(ea_bcp); + const amountEA = BN.from(10_000).mul(BN.from(10).pow(BN.from(decimals))); + await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + await sendTransaction("JiaPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("JiaPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, proxyOwner, lender, ea, + eaService, pdsService, treasury, ea_bcp, + invoicePayer, bcpOperator, rfpOperator, + bcpOwnerTreasury, rfpOwnerTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("lender address: " + lender.address); + console.log("ea address: " + ea.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/goerli/verify-goerli-jia-pool.js b/deployment/goerli/verify-goerli-jia-pool.js new file mode 100644 index 00000000..dbb9b2db --- /dev/null +++ b/deployment/goerli/verify-goerli-jia-pool.js @@ -0,0 +1,169 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/goerli/verify_args/" + +const HUMA_OWNER_MULTI_SIG='0x1931bD73055335Ba06efB22DB96169dbD4C5B4DB'; +const POOL_OWNER_MULTI_SIG='0x7dC4018464e724fB2B04d9aC0df6D40B34786318'; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + proxyOwner = await accounts[1]; + console.log("proxyOwner address: " + proxyOwner.address); + + const verifyUsdc = await verifyContract('USDC'); + console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + const verifyRNNFT = await verifyContract('RNNFT', [ + `'${deployedContracts['USDC']}'` + ]); + console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyJiaPoolTL = await verifyContract('JiaPoolTimelock', + [ + 0, + `['${POOL_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyJiaPoolTL}`); + + const verifyJiaPoolProxyAdminTL = await verifyContract('JiaPoolProxyAdminTimelock', + [ + 0, + `['${POOL_OWNER_MULTI_SIG}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyJiaPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('JiaPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('JiaHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('JiaHDT', + [ + `'${deployedContracts['JiaHDTImpl']}'`, + `'${deployedContracts['JiaPoolProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('JiaPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('JiaPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + const verifyPool = await verifyContract('JiaPool', + [ + `'${deployedContracts['JiaPoolImpl']}'`, + `'${deployedContracts['JiaPoolProxyAdminTimelock']}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/matic-deployed-contracts.json b/deployment/matic-deployed-contracts.json index 24b8ce94..97c5cec3 100644 --- a/deployment/matic-deployed-contracts.json +++ b/deployment/matic-deployed-contracts.json @@ -1,22 +1,45 @@ -{ - "HumaConfig": "0x03D80E259E34354B552fE5d152D7484192535393", - "HumaConfigTimelock": "0x4730Ba92780b6783Ce97bD5f7AaD75337d6D180A", - "ReceivableFactoringPoolTimelock": "0x0562e6287dd69E76771E046f7E24ADC608c837b6", - "ReceivableFactoringPoolProxyAdminTimelock": "0x1691090fb0cFd3bd9b59128b57490eA882A09573", - "ReceivableFactoringPoolFeeManager": "0x5B7841b94a3C7246662ef514745b034A6ceaAB15", - "HDTImpl": "0xfc256098C6c63836ac71F7057c68b74165fF9cbb", - "HDT": "0xf5F9297c74e464933e42F4a989e81D931fb20f83", - "ReceivableFactoringPoolConfig": "0x98f41d57C06b302AFf999f3F58f4ae7a3F884590", - "ReceivableFactoringPoolImpl": "0x87FD98F3eB172B5183F7527060DDbe8a8D17B924", - "ReceivableFactoringPool": "0x58AAF1f9cB10F335111A2129273056bbED251B61", - "EANFT": "0x941687792107eaC859B820d1636936382F3189aa", - "RNNFT": "0x34eA029c5195F8fb4fe59b492be1738a9Dd959AC", - "BaseCreditPoolTimelock": "0x48065723605D1367bC4256B747293e281F5aD37b", - "BaseCreditPoolProxyAdminTimelock": "0x6fE57952F3Ce61f6B6d348e1BB52943C8531e99B", - "BaseCreditPoolFeeManager": "0x65C5535735581039c5711A9d7c223cff9384334F", - "BaseCreditHDTImpl": "0xf26A071833032Ce57769fdf530E81A28f15671df", - "BaseCreditHDT": "0x73c16Db24951135BC8A628185BdbfA79115793E5", - "BaseCreditPoolConfig": "0x39f7D6040EC30B62c508723e2EDb822413837527", - "BaseCreditPoolImpl": "0xb9Cb48e53bf4728C316f9b876281927BE792A02D", - "BaseCreditPool": "0xAb3dc5221F373Dd879BEc070058c775A0f6Af759" -} \ No newline at end of file +{"HumaConfig":"0x03D80E259E34354B552fE5d152D7484192535393", +"HumaConfigTimelock":"0x4730Ba92780b6783Ce97bD5f7AaD75337d6D180A", +"ReceivableFactoringPoolTimelock":"0x0562e6287dd69E76771E046f7E24ADC608c837b6", +"ReceivableFactoringPoolProxyAdminTimelock":"0x1691090fb0cFd3bd9b59128b57490eA882A09573", +"ReceivableFactoringPoolFeeManager":"0x5B7841b94a3C7246662ef514745b034A6ceaAB15", +"HDTImpl":"0xfc256098C6c63836ac71F7057c68b74165fF9cbb", +"HDT":"0xf5F9297c74e464933e42F4a989e81D931fb20f83", +"ReceivableFactoringPoolConfig":"0x98f41d57C06b302AFf999f3F58f4ae7a3F884590", +"ReceivableFactoringPoolImpl":"0x87FD98F3eB172B5183F7527060DDbe8a8D17B924", +"ReceivableFactoringPool":"0x58AAF1f9cB10F335111A2129273056bbED251B61", +"EANFT":"0x941687792107eaC859B820d1636936382F3189aa", +"RNNFT":"0x34eA029c5195F8fb4fe59b492be1738a9Dd959AC", +"BaseCreditPoolTimelock":"0x48065723605D1367bC4256B747293e281F5aD37b", +"BaseCreditPoolProxyAdminTimelock":"0x6fE57952F3Ce61f6B6d348e1BB52943C8531e99B", +"BaseCreditPoolFeeManager":"0x65C5535735581039c5711A9d7c223cff9384334F", +"BaseCreditHDTImpl":"0xf26A071833032Ce57769fdf530E81A28f15671df", +"BaseCreditHDT":"0x73c16Db24951135BC8A628185BdbfA79115793E5", +"BaseCreditPoolConfig":"0x39f7D6040EC30B62c508723e2EDb822413837527", +"BaseCreditPoolImpl":"0xb9Cb48e53bf4728C316f9b876281927BE792A02D", +"BaseCreditPool":"0xAb3dc5221F373Dd879BEc070058c775A0f6Af759", +"JiaPioneerPoolTimelock":"0xA00d231e40ED5a27543B2D1e1dc7bEf01cd9A370", +"JiaPioneerPoolProxyAdminTimelock":"0x9B28b841eE3a80fe91d45fb7C9e52cEA54B8d9AE", +"JiaPioneerPoolFeeManager":"0x7Ed46Ea23CD1559a77a80F651C2115CDEe55FCD1", +"JiaPioneerHDTImpl":"0x203990430bbd5bb67FcD76C431fAb5bd127A8E61", +"JiaPioneerHDT":"0xc6CF8FF8a4B7f1530AC2f0531614C824285009f8", +"JiaPioneerPoolConfig":"0x901427A8328139E59EA2401cBD6bB5b1F5e72E37", +"JiaPioneerPoolImpl":"0x2cffAAf7885530E1C5a9684eBbe397d6f1De48d8", +"JiaPioneerPool":"0xe8926aDbFADb5DA91CD56A7d5aCC31AA3FDF47E5", +"ArfPoolTimelock":"0x0735F775530D09d9419966FEa09f6f128620eb3d", +"ArfPoolProxyAdminTimelock":"0xF1F6D006ab76706C2538aF47D5091Decd61b28CB", +"ArfPoolFeeManager":"0xa42b10EcBA1fd953aeCc6Ce991D8dD26F8055C8a", +"ArfHDTImpl":"0x91E68909Ab9fB3D362ddE5949B77f369e98EdeaD", +"ArfHDT":"0xF68173AC6817961833C7FF303C0453e18fF6aBd2", +"ArfPoolConfig":"0x9570CdEe2abb43eF0DbE502d3eBB11AaebbCb77F", +"ArfPoolImpl":"0xAd19f43eC0903005C297EE555e34500C61dA5913", +"ArfPool":"0x91EaCEC15839Cc9Ec7083288E205C7f1EBfcdf62", +"HumaProxyAdminTimelock":"0x10B6AeF9Efd79E07c9426f26479ef9cb842BC3b3", +"RWReceivableImpl":"0x50B106ba1A278A04f071F0ae0D45d097D5A15AfF", +"RWReceivable":"0x202dbC700C4DA1322f27bBFe1F49F50e262e4fB0", +"LibFeeManager":"0x836F3A6fF1fAa6129D911946153E122beD4A45f8", +"LibPoolConfig":"0x5E03dB5B41013F5031607aB311f32919EF256A6B", +"LibHDT":"0x2658a477e15cA9b6AbC64C665Db7d9b5C6b275C2", +"LibPool":"0x8BdacbdAbaa1307E4A0cFb05cbfAd24BfA417302", +"HumaPoolFactory":"0x3A719adcEE26b8252E2A9fD3b60397fE329A2200", +"HumaPoolFactoryCreditCollective":"0xfe6A1c4811bE86c4189a0435a8976d6b4b0eA6FD"} \ No newline at end of file diff --git a/deployment/matic-initialized-contracts.json b/deployment/matic-initialized-contracts.json index a43d5b38..1f386db7 100644 --- a/deployment/matic-initialized-contracts.json +++ b/deployment/matic-initialized-contracts.json @@ -6,4 +6,14 @@ "BaseCreditPoolFeeManager":"Done", "BaseCreditHDT":"Done", "BaseCreditPoolConfig":"Done", -"BaseCreditPool":"Done"} \ No newline at end of file +"BaseCreditPool":"Done", +"JiaPioneerPoolFeeManager":"Done", +"JiaPioneerHDT":"Done", +"JiaPioneerPoolConfig":"Done", +"JiaPioneerPool":"Done", +"EANFT":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/matic-verified-contracts.json b/deployment/matic-verified-contracts.json index 4da69f79..437b50b8 100644 --- a/deployment/matic-verified-contracts.json +++ b/deployment/matic-verified-contracts.json @@ -13,4 +13,21 @@ "BaseCreditPoolImpl":"Done", "BaseCreditPool":"Done", "BaseCreditHDTImpl":"Done", -"BaseCreditHDT":"Done"} \ No newline at end of file +"BaseCreditHDT":"Done", +"JiaPioneerPoolConfig":"Done", +"ArfPoolTimelock":"Done", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"LibFeeManager":"Done", +"LibPoolConfig":"Done", +"LibHDT":"Done", +"LibPool":"Done", +"HumaPoolFactory":"Done", +"HumaPoolFactoryCreditCollective":"Done"} \ No newline at end of file diff --git a/deployment/maticmum-deployed-contracts.json b/deployment/maticmum-deployed-contracts.json new file mode 100644 index 00000000..557d54e9 --- /dev/null +++ b/deployment/maticmum-deployed-contracts.json @@ -0,0 +1,15 @@ +{"EANFT":"0xE9B46CA6dB1D3A80114b7f49431a4c0746c6f0f7", +"HumaConfig":"0x3D5AF0e4413d29de290D7d4fc8375ECd9E72B837", +"HumaConfigTimelock":"0xbb3D272477220eA119087d2Aa1e91bDF8Ec2D5C3", +"HumaProxyAdminTimelock":"0xF7b05012827E7768af629a5E5271EB1BE1e6ed90", +"RWReceivableImpl":"0x6317b90aBF0D070Eb6A357C5bF444A98da98cb95", +"RWReceivable":"0xC15Fe2908Dcf2C81070b3a09a0888814C302b94d", +"HDTImpl":"0x5C0260CfbAF4A852f70aAD904Fb8234c18691540", +"BaseCreditPoolImpl":"0xaaAdE6a8a8aA86F06E0e5CDc9Bc9a020D369a509", +"ReceivableFactoringPoolImpl":"0xc4d87bE1D08b59aED116Abd968139e7f95c9ed50", +"LibFeeManager":"0x96c9cfDC42392004D2df8C2d3384ED32A3A8aEf7", +"LibPoolConfig":"0x3CBeb5843925C2e3Ca85C8210464215E10c1F739", +"LibHDT":"0x4842F1d47c2a0B8B5af56d2D2734caEcee890540", +"LibPool":"0xe6F12f2CAbC401492ECbe7988F2aE71F5f3Bc093", +"HumaPoolFactory":"0xc32eE02433F77753B410d80fC37AeD25556189F3", +"USDC":"0xb961c37ABDDA55929327fa9d20eBDE6BB8B1348E"} \ No newline at end of file diff --git a/deployment/maticmum-initialized-contracts.json b/deployment/maticmum-initialized-contracts.json new file mode 100644 index 00000000..557e17fc --- /dev/null +++ b/deployment/maticmum-initialized-contracts.json @@ -0,0 +1,2 @@ +{"HumaConfig":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/maticmum-verified-contracts.json b/deployment/maticmum-verified-contracts.json new file mode 100644 index 00000000..104b39d8 --- /dev/null +++ b/deployment/maticmum-verified-contracts.json @@ -0,0 +1,13 @@ +{"EANFT":"Done", +"HumaConfig":"Done", +"HumaConfigTimelock":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done", +"HDTImpl":"Done", +"BaseCreditPoolImpl":"Done", +"ReceivableFactoringPoolImpl":"Done", +"LibFeeManager":"Done", +"LibPoolConfig":"Done", +"LibHDT":"Done", +"LibPool":"Done", +"HumaPoolFactory":"Done"} \ No newline at end of file diff --git a/deployment/polygon/deploy-jia-pioneer-pool.js b/deployment/polygon/deploy-jia-pioneer-pool.js new file mode 100644 index 00000000..077d53d6 --- /dev/null +++ b/deployment/polygon/deploy-jia-pioneer-pool.js @@ -0,0 +1,66 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + const eaService = await accounts[1]; + console.log("ea service address: " + eaService.address); + + // const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + // const invoiceNFT = await deploy("InvoiceNFT", "RNNFT", [usdc.address]); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const baseCreditPoolTL = await deploy("TimelockController", "JiaPioneerPoolTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const JiaPioneerPoolProxyAdminTL = await deploy("TimelockController", "JiaPioneerPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_MULTI_SIG], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "JiaPioneerPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "JiaPioneerHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "JiaPioneerHDT", [ + bc_hdtImpl.address, + JiaPioneerPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "JiaPioneerPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "JiaPioneerPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "JiaPioneerPool", [ + bc_poolImpl.address, + JiaPioneerPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/init-jia-pioneer-pool-defender.js b/deployment/polygon/init-jia-pioneer-pool-defender.js new file mode 100644 index 00000000..0c6f6850 --- /dev/null +++ b/deployment/polygon/init-jia-pioneer-pool-defender.js @@ -0,0 +1,345 @@ +const {BigNumber: BN} = require("ethers"); +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, + deploy, +} = require("../utils.js"); + +let deployer, deployedContracts, lender, ea, eaService; +let pdsService, treasury, ea_bcp, bcpOperator, rfpOperator; +let bcpOwnerTreasury, rfpOwnerTreasury; + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; +const USDC_ADDRESS = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; +const EA_ADDRESS = '0xdB59787549cA50faF9Bd2679856B668eDDBf0A44'; + +async function renounceTLAdminRole(timeLockKey, account) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction("TimelockController", timeLockController, "renounceRole", [ + adminRole, + account, + ]); +} + + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + await renounceTLAdminRole(timeLockKey, deployer.address); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [pdsService.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasury.address]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [ea.address]); + const eaNFTFromEA_bcp = eaNFT.connect(ea); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("JiaPioneerPoolFeeManager"); + if (initilized) { + console.log("JiaPioneerPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPoolFeeManager"]) { + throw new Error("JiaPioneerPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPioneerPoolFeeManager"]); + + await sendTransaction( + "JiaPioneerPoolFeeManager", + feeManager, + "setFees", + [0, 0, 0, 10, 0] + ); + await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + await transferOwnershipToTL("BaseFeeManager", "JiaPioneerPoolFeeManager", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("JiaPioneerHDT"); + if (initilized) { + console.log("JiaPioneerHDT is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerHDT"]) { + throw new Error("JiaPioneerHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaPioneerHDT"]); + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Jia Pioneer HDT", + "JHDT", + USDC_ADDRESS, + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["JiaPioneerPool"]]); + + await transferOwnershipToTL("HDT", "JiaPioneerHDT", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("JiaPioneerPoolConfig"); + if (initilized) { + console.log("JiaPioneerPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPoolConfig"]) { + throw new Error("JiaPioneerPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["JiaPioneerPoolConfig"] + ); + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerHDT"]) { + throw new Error("JiaPioneerHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerPoolFeeManager"]) { + throw new Error("JiaPioneerPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["JiaPioneerHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["JiaPioneerPoolFeeManager"]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "initialize", [ + "JiaPioneerPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + const cap = BN.from(500_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("cap: " + cap); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPool", [ + deployedContracts["JiaPioneerPool"], + ]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setEvaluationAgent", [ + 2, + EA_ADDRESS, + ]); + + await sendTransaction( + "JiaPioneerPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [0, 0] + ); + await sendTransaction( + "JiaPioneerPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + const maxCL = BN.from(500_000).mul(BN.from(10).pow(BN.from(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolPayPeriod", [30]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["JiaPioneerHDT"], + ]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [365]); + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0x1d0C14ef74D4F76B218df9Cd752b3a831C20A909']); // Richard-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0xCCE6e1b4b83D4133C20C3Bd961c519325fac9e8F']); // Erbil-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", ['0xB40a6D4C73766F769Cb3393B62488Fd57db04AA4']); // Ji-pool + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + + await sendTransaction("JiaPioneerPoolConfig", poolConfig, "setPoolOwnerTreasury", ['0xd4F254006d486688cE7515199C55266C581B949A']); + + await transferOwnershipToTL("BasePoolConfig", "JiaPioneerPoolConfig", "JiaPioneerPoolTimelock"); + + await updateInitilizedContract("JiaPioneerPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("JiaPioneerPool"); + if (initilized) { + console.log("JiaPioneerPool is already initialized!"); + return; + } + + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + if (!deployedContracts["JiaPioneerPoolConfig"]) { + throw new Error("JiaPioneerPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["JiaPioneerPool"]); + + await sendTransaction("JiaPioneerPool", pool, "initialize", [ + deployedContracts["JiaPioneerPoolConfig"], + ]); + + if (!deployedContracts["JiaPioneerPoolTimelock"]) { + throw new Error("JiaPioneerPoolTimelock not deployed yet!"); + } + + await renounceTLAdminRole("JiaPioneerPoolTimelock", deployer.address); + + await updateInitilizedContract("JiaPioneerPool"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["JiaPioneerPool"]) { + throw new Error("JiaPioneerPool not deployed yet!"); + } + + const JiaPioneerPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = JiaPioneerPool.attach(deployedContracts["JiaPioneerPool"]) + + await sendTransaction("JiaPioneerPool", pool, "addApprovedLender", ["0x062E4fa7b23518B24B6D18F8FAf06dA455D768E2"]); + await sendTransaction("JiaPioneerPool", pool, "addApprovedLender", [EA_ADDRESS]); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService, pdsService, + ] = await accounts; + console.log("deployer address: " + deployer.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + // await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/upgrade-base-credit-pool.js b/deployment/polygon/upgrade-base-credit-pool.js new file mode 100644 index 00000000..6abe3283 --- /dev/null +++ b/deployment/polygon/upgrade-base-credit-pool.js @@ -0,0 +1,83 @@ +const { + getUpgradedContract, + updateUpgradedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, deployedContracts; + +async function upgradePool() { + const upgraded = await getUpgradedContract("BaseCreditPool"); + if (upgraded) { + console.log("BaseCreditPool is upgraded already!"); + return; + } + + if (!deployedContracts["BaseCreditPoolImpl"]) { + throw new Error("BaseCreditPoolImpl not deployed yet!"); + } + + if (!deployedContracts["BaseCreditPool"]) { + throw new Error("BaseCreditPool not deployed yet!"); + } + + const TransparentUpgradeableProxy = await hre.ethers.getContractFactory( + "TransparentUpgradeableProxy" + ); + let proxy = TransparentUpgradeableProxy.attach(deployedContracts["BaseCreditPool"]); + proxy = await proxy.connect(proxyOwner); + + await sendTransaction("BaseCreditPool", proxy, "upgradeTo", [ + deployedContracts["BaseCreditPoolImpl"], + ]); + + await updateUpgradedContract("BaseCreditPool"); +} + +async function upgradeHDT() { + const upgraded = await getUpgradedContract("BaseCreditHDT"); + if (upgraded) { + console.log("BaseCreditHDT is upgraded already!"); + return; + } + + if (!deployedContracts["BaseCreditHDTImpl"]) { + throw new Error("BaseCreditHDTImpl not deployed yet!"); + } + + if (!deployedContracts["BaseCreditHDT"]) { + throw new Error("BaseCreditHDT not deployed yet!"); + } + + const TransparentUpgradeableProxy = await hre.ethers.getContractFactory( + "TransparentUpgradeableProxy" + ); + let proxy = TransparentUpgradeableProxy.attach(deployedContracts["BaseCreditPool"]); + proxy = await proxy.connect(proxyOwner); + + await sendTransaction("BaseCreditPool", proxy, "upgradeTo", [ + deployedContracts["BaseCreditPoolImpl"], + ]); + + await updateUpgradedContract("BaseCreditPool"); +} + +async function upgradeContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + deployer = await accounts[0]; + console.log("deployer address: " + deployer.address); + + deployedContracts = await getDeployedContracts(); + + await upgradePool(); +} + +upgradeContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/polygon/verify-Jia-pioneer-pool.js b/deployment/polygon/verify-Jia-pioneer-pool.js new file mode 100644 index 00000000..8c361d65 --- /dev/null +++ b/deployment/polygon/verify-Jia-pioneer-pool.js @@ -0,0 +1,169 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/polygon/verify_args/" + +const HUMA_OWNER_MULTI_SIG = "0x7E13931931d59f2199fE0b499534412FCD28b7Ed"; +const POOL_OWNER_MULTI_SIG = "0x06AE4a3bc855c0046F18F4Bdf1Ac6617dc0001B5"; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + // const verifyUsdc = await verifyContract('USDC'); + // console.log(`Verify USDC result: ${verifyUsdc}`); + + // const verifyEANFT = await verifyContract('EANFT'); + // console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + // const verifyHumaConfig = await verifyContract('HumaConfig'); + // console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + // const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + // [ + // 0, + // `['${HUMA_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + // const verifyBaseCreditPoolTL = await verifyContract('BaseCreditPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyBaseCreditPoolTL}`); + + // const verifyBaseCreditPoolProxyAdminTL = await verifyContract('BaseCreditPoolProxyAdminTimelock', + // [ + // 0, + // `['${POOL_OWNER_MULTI_SIG}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify HumaConfigTimelock result: ${verifyBaseCreditPoolProxyAdminTL}`); + + // const verifyFeeManager = await verifyContract('BaseCreditPoolFeeManager'); + // console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + // const verifyHDTImpl = await verifyContract('BaseCreditHDTImpl'); + // console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + // const verifyHDT = await verifyContract('BaseCreditHDT', + // [ + // `'${deployedContracts['BaseCreditHDTImpl']}'`, + // `'${deployedContracts['BaseCreditPoolProxyAdminTimelock']}'`, + // '[]' + // ]); + // console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('JiaPioneerPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + // const verifyPoolImpl = await verifyContract('BaseCreditPoolImpl'); + // console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + // const verifyPool = await verifyContract('BaseCreditPool', + // [ + // `'${deployedContracts['BaseCreditPoolImpl']}'`, + // `'${deployedContracts['BaseCreditPoolProxyAdminTimelock']}'`, + // '[]', + // ]); + // console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/sepolia-deployed-contracts.json b/deployment/sepolia-deployed-contracts.json new file mode 100644 index 00000000..102155fe --- /dev/null +++ b/deployment/sepolia-deployed-contracts.json @@ -0,0 +1,14 @@ +{"USDC":"0xC1eE32b97226825f5646109D770944491D7a1B47", +"EANFT":"0x349f04e3800bDbbCAb473f6e84a42Bf9e62aab39", +"RWReceivableImpl":"0xe79492b21BB9625BB83Cf55041607b5978B838F3", +"HumaConfig":"0x7eDb3AD12f48F9B6Bb44a275caD3084255EEdE7E", +"HumaConfigTimelock":"0x6D16F401a2814FF3c5e4e591EA49e178E11AB942", +"ArfPoolTimelock":"0x6bd5c1e23A997F2607B76D672c17735DA7510eB8", +"ArfPoolProxyAdminTimelock":"0x1b54e9067d22A785fdD44f581959D13604d814ef", +"ArfPoolFeeManager":"0xAdbB0f7545e1d1870773848Afb8950fA615701D5", +"ArfHDTImpl":"0x5861434f38529206024c60e742b5d802a3645c3e", +"ArfHDT":"0x33Bf0695769fc5F801d6bc671F9bb9c800E76b53", +"ArfPoolConfig":"0x9eb5c6E54f69C20ecD182ab1024c5Be570c0684c", +"ArfPoolImpl":"0x746a334B358bc5B651D17bAEca9EB90F80062e3a", +"ArfPool":"0xA62778EbAC1a43B4390Fe3a8286575003Ae339cd", +"RWReceivable":"0x4d3b200ef2F4030F1f8118Ea3CE41024DEd6f586"} \ No newline at end of file diff --git a/deployment/sepolia-initialized-contracts.json b/deployment/sepolia-initialized-contracts.json new file mode 100644 index 00000000..ce110f5b --- /dev/null +++ b/deployment/sepolia-initialized-contracts.json @@ -0,0 +1,7 @@ +{"HumaConfig":"Done", +"EANFT":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPool":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/sepolia-verified-contracts.json b/deployment/sepolia-verified-contracts.json new file mode 100644 index 00000000..030983c8 --- /dev/null +++ b/deployment/sepolia-verified-contracts.json @@ -0,0 +1,14 @@ +{"USDC":"Done", +"EANFT":"Done", +"HumaConfig":"Done", +"HumaConfigTimelock":"Done", +"ArfPoolTimelock":"Done", +"ArfPoolProxyAdminTimelock":"Done", +"ArfPoolFeeManager":"Done", +"ArfHDTImpl":"Done", +"ArfHDT":"Done", +"ArfPoolConfig":"Done", +"ArfPoolImpl":"Done", +"ArfPool":"Done", +"RWReceivableImpl":"Done", +"RWReceivable":"Done"} \ No newline at end of file diff --git a/deployment/sepolia/deploy-arf-pool.js b/deployment/sepolia/deploy-arf-pool.js new file mode 100644 index 00000000..85c25555 --- /dev/null +++ b/deployment/sepolia/deploy-arf-pool.js @@ -0,0 +1,70 @@ +const {deploy} = require("../utils.js"); + +const HUMA_OWNER_EOA='0x1e7A60fdc43E70d67A3C81AFAE1e95efC48b681b'; +const POOL_OWNER_EOA='0x242c334d3bd2882515547fFCF2733F3BB3701ACA'; + +async function deployContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + const [deployer, eaService] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea service address: " + eaService.address); + + const usdc = await deploy("TestToken", "USDC"); + const evaluationAgentNFT = await deploy("EvaluationAgentNFT", "EANFT", [], eaService); + + const humaConfig = await deploy("HumaConfig", "HumaConfig"); + const humaConfigTL = await deploy("TimelockController", "HumaConfigTimelock", [ + 0, + [HUMA_OWNER_EOA], + [deployer.address], + ]); + + const rwrImpl = await deploy("RealWorldReceivable", "RWReceivableImpl"); + const rwr = await deploy("TransparentUpgradeableProxy", "RWReceivable", [ + rwrImpl.address, + humaConfigTL.address, + [], + ]); + + // const baseCreditPoolTL = await deploy("TimelockController", "ArfPoolTimelock", [ + // 0, + // [POOL_OWNER_EOA], + // [deployer.address], + // ]); + + const baseCreditPoolProxyAdminTL = await deploy("TimelockController", "ArfPoolProxyAdminTimelock", [ + 0, + [POOL_OWNER_EOA], + [deployer.address], + ]); + + const bc_feeManager = await deploy("BaseFeeManager", "ArfPoolFeeManager"); + const bc_hdtImpl = await deploy("HDT", "ArfHDTImpl"); + const bc_hdt = await deploy("TransparentUpgradeableProxy", "ArfHDT", [ + bc_hdtImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + const bc_poolConfig = await deploy("BasePoolConfig", "ArfPoolConfig"); + + const bc_poolImpl = await deploy("BaseCreditPool", "ArfPoolImpl"); + const bc_pool = await deploy("TransparentUpgradeableProxy", "ArfPool", [ + bc_poolImpl.address, + baseCreditPoolProxyAdminTL.address, + [], + ]); + // End of deploying base credit pool + +} + +deployContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/sepolia/init-arf-pool-defender.js b/deployment/sepolia/init-arf-pool-defender.js new file mode 100644 index 00000000..b0526a98 --- /dev/null +++ b/deployment/sepolia/init-arf-pool-defender.js @@ -0,0 +1,381 @@ +const { + getInitilizedContract, + updateInitilizedContract, + getDeployedContracts, + sendTransaction, +} = require("../utils.js"); + +let deployer, eaService; + +const PDSServiceAccount = "0x4b2ea800c9791ea68faa284a69ac0df226eafa2b" +const treasuryAccount = "0x37f3591F7Ee1D53Ea445b710e6310FF3F92D5446" +// const poolTreasury = "0x942836828c2fbb046CE8C944d61143a0cE3608A5" + +async function transferOwnershipToTL(contractName, contractKey, timeLockKey) { + if (!deployedContracts[timeLockKey]) { + throw new Error(`${timeLockKey} not deployed yet!`); + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + + const TimeLockController = await hre.ethers.getContractFactory("TimelockController"); + const timeLockController = TimeLockController.attach(deployedContracts[timeLockKey]); + + const Contract = await hre.ethers.getContractFactory(contractName); + const contract = Contract.attach(deployedContracts[contractKey]); + + await sendTransaction(contractKey, contract, "transferOwnership", [timeLockController.address]); + + const adminRole = await timeLockController.TIMELOCK_ADMIN_ROLE(); + await sendTransaction(contractKey, timeLockController, "renounceRole", [ + adminRole, + deployer.address, + ]); +} + +async function initHumaConfig() { + const initilized = await getInitilizedContract("HumaConfig"); + if (initilized) { + console.log("HumaConfig is already initialized!"); + return; + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + await sendTransaction("HumaConfig", humaConfig, "setProtocolDefaultGracePeriod", [ + 30 * 24 * 3600, + ]); + await sendTransaction("HumaConfig", humaConfig, "setTreasuryFee", [500]); + await sendTransaction("HumaConfig", humaConfig, "setEANFTContractAddress", [ + deployedContracts["EANFT"], + ]); + + await sendTransaction("HumaConfig", humaConfig, "setEAServiceAccount", [eaService.address]); + await sendTransaction("HumaConfig", humaConfig, "setPDSServiceAccount", [PDSServiceAccount]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + + // Add usdc as an asset supported by the protocol + await sendTransaction("HumaConfig", humaConfig, "setLiquidityAsset", [usdc.address, true]); + + // Set treasury for the protocol + await sendTransaction("HumaConfig", humaConfig, "setHumaTreasury", [treasuryAccount]); + + await transferOwnershipToTL("HumaConfig", "HumaConfig", "HumaConfigTimelock") + + await updateInitilizedContract("HumaConfig"); +} + +async function initEA() { + const initilized = await getInitilizedContract("EANFT"); + if (initilized) { + console.log("EANFT is already initialized!"); + return; + } + + if (!deployedContracts["EANFT"]) { + throw new Error("EANFT not deployed yet!"); + } + + const EANFT = await hre.ethers.getContractFactory("EvaluationAgentNFT"); + const eaNFT = EANFT.attach(deployedContracts["EANFT"]); + + const eaNFTFromEA = eaNFT.connect(deployer); + await sendTransaction("EvaluationAgentNFT", eaNFTFromEA, "mintNFT", [deployer.address]); + // const eaNFTFromEA_bcp = eaNFT.connect(ea); + // await sendTransaction("EvaluationAgentNFT", eaNFTFromEA_bcp, "mintNFT", [ea_bcp.address]); + await updateInitilizedContract("EANFT"); +} + +async function initBaseCreditPoolFeeManager() { + const initilized = await getInitilizedContract("ArfPoolFeeManager"); + if (initilized) { + console.log("ArfPoolFeeManager is already initialized!"); + return; + } + + if (!deployedContracts["ArfPoolFeeManager"]) { + throw new Error("ArfPoolFeeManager not deployed yet!"); + } + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfPoolFeeManager"]); + + await sendTransaction( + "ArfPoolFeeManager", + feeManager, + "setFees", + [10_000_000, 0, 20_000_000, 0, 0] + ); + // await sendTransaction("FeeManager", feeManager, "setMinPrincipalRateInBps", [0]); + + // await transferOwnershipToTL("BaseFeeManager", "ArfPoolFeeManager", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfPoolFeeManager"); +} + +async function initBaseCreditPoolHDT() { + const initilized = await getInitilizedContract("ArfHDT"); + if (initilized) { + console.log("ArfHDT is already initialized!"); + return; + } + + if (!deployedContracts["ArfHDT"]) { + throw new Error("ArfHDT not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfHDT"]); + + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + await sendTransaction("HDT", hdt, "initialize", [ + "Arf HDT", + "AHDT", + deployedContracts["USDC"], + ]); + + await sendTransaction("HDT", hdt, "setPool", [deployedContracts["ArfPool"]]); + + // await transferOwnershipToTL("HDT", "ArfHDT", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfHDT"); +} + +async function initBaseCreditPoolConfig() { + const initilized = await getInitilizedContract("ArfPoolConfig"); + if (initilized) { + console.log("ArfPoolConfig is already initialized!"); + return; + } + + if (!deployedContracts["ArfPoolConfig"]) { + throw new Error("ArfPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPoolConfig = await hre.ethers.getContractFactory("BasePoolConfig"); + const poolConfig = ReceivableFactoringPoolConfig.attach( + deployedContracts["ArfPoolConfig"] + ); + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + if (!deployedContracts["ArfHDT"]) { + throw new Error("ArfHDT not deployed yet!"); + } + + if (!deployedContracts["HumaConfig"]) { + throw new Error("HumaConfig not deployed yet!"); + } + + if (!deployedContracts["ArfPoolFeeManager"]) { + throw new Error("ArfPoolFeeManager not deployed yet!"); + } + + const HDT = await hre.ethers.getContractFactory("HDT"); + const hdt = HDT.attach(deployedContracts["ArfHDT"]); + + const HumaConfig = await hre.ethers.getContractFactory("HumaConfig"); + const humaConfig = HumaConfig.attach(deployedContracts["HumaConfig"]); + + const BaseFeeManager = await hre.ethers.getContractFactory("BaseFeeManager"); + const feeManager = BaseFeeManager.attach(deployedContracts["ArfPoolFeeManager"]); + + await sendTransaction("ArfPoolConfig", poolConfig, "initialize", [ + "ArfPool", + hdt.address, + humaConfig.address, + feeManager.address, + ]); + + const decimals = await hdt.decimals(); + console.log("decimals: " + BigInt(decimals)); + const cap = BigInt(1_000_000)*(BigInt(10)**(BigInt(decimals))); + console.log("cap: " + cap); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolLiquidityCap", [cap]); + + await sendTransaction("ArfPoolConfig", poolConfig, "setPool", [ + deployedContracts["ArfPool"], + ]); + + await sendTransaction( + "ArfPoolConfig", + poolConfig, + "setPoolOwnerRewardsAndLiquidity", + [500, 200] + ); + await sendTransaction( + "ArfPoolConfig", + poolConfig, + "setEARewardsAndLiquidity", + [0, 0] + ); + + // await sendTransaction("ArfPoolConfig", poolConfig, "setEvaluationAgent", [ + // 1, + // deployer.address, + // ]); + + const maxCL = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + console.log("maxCL: " + maxCL); + await sendTransaction("ArfPoolConfig", poolConfig, "setMaxCreditLine", [maxCL]); + await sendTransaction("ArfPoolConfig", poolConfig, "setAPR", [1000]); + await sendTransaction("ArfPoolConfig", poolConfig, "setReceivableRequiredInBps", [0]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolPayPeriod", [15]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolToken", [ + deployedContracts["ArfHDT"], + ]); + await sendTransaction("ArfPoolConfig", poolConfig, "setWithdrawalLockoutPeriod", [0]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolDefaultGracePeriod", [60]); + await sendTransaction("ArfPoolConfig", poolConfig, "addPoolOperator", [deployer.address]); + await sendTransaction("ArfPoolConfig", poolConfig, "setPoolOwnerTreasury", [poolTreasury.address]); + + await sendTransaction("ArfPoolConfig", poolConfig, "setCreditApprovalExpiration", [30]); + + // await transferOwnershipToTL("BasePoolConfig", "ArfPoolConfig", "ArfPoolTimelock"); + + await updateInitilizedContract("ArfPoolConfig"); +} + +async function initBaseCreditPool() { + const initilized = await getInitilizedContract("ArfPool"); + if (initilized) { + console.log("ArfPool is already initialized!"); + return; + } + + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + + if (!deployedContracts["ArfPoolConfig"]) { + throw new Error("ArfPoolConfig not deployed yet!"); + } + + const ReceivableFactoringPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = ReceivableFactoringPool.attach(deployedContracts["ArfPool"]); + + await sendTransaction("ArfPool", pool, "initialize", [ + deployedContracts["ArfPoolConfig"], + ]); + + await updateInitilizedContract("ArfPool"); +} + +async function initRWR() { + const initilized = await getInitilizedContract("RWReceivable"); + if (initilized) { + console.log("RWReceivable is already initialized!"); + return; + } + + if (!deployedContracts["RWReceivable"]) { + throw new Error("RWReceivable not deployed yet!"); + } + + const RealWorldReceivable = await hre.ethers.getContractFactory("RealWorldReceivable"); + const rwReceivable = RealWorldReceivable.attach(deployedContracts["RWReceivable"]); + + await sendTransaction("RWReceivable", rwReceivable, "initialize", []); + + await updateInitilizedContract("RWReceivable"); +} + +async function prepareBaseCreditPool() { + // The operations commented off need to run with TL on Defender + if (!deployedContracts["ArfPool"]) { + throw new Error("ArfPool not deployed yet!"); + } + if (!deployedContracts["USDC"]) { + throw new Error("USDC not deployed yet!"); + } + + const BaseCreditPool = await hre.ethers.getContractFactory("BaseCreditPool"); + const pool = BaseCreditPool.attach(deployedContracts["ArfPool"]) + // const poolFrombcpOperator = pool.connect(bcpOperator); + + // await sendTransaction("ArfPool", pool, "addApprovedLender", [deployer.address]); + // // await sendTransaction("ArfPool", poolFrombcpOperator, "addApprovedLender", [ea_bcp.address]); + // // await sendTransaction("ArfPool", poolFrombcpOperator, "addApprovedLender", [lender.address]); + // await sendTransaction("ArfPool", pool, "addApprovedLender", [poolTreasury.address]); + + const USDC = await hre.ethers.getContractFactory("TestToken"); + const usdc = USDC.attach(deployedContracts["USDC"]); + const decimals = await usdc.decimals(); + + // Owner + const usdcFromPoolOwnerTreasury = await usdc.connect(poolTreasury); + const poolFromPoolOwnerTreasury = await pool.connect(poolTreasury); + const amountOwner = BigInt(20_000)*(BigInt(10)**(BigInt(decimals))); + console.log("owner to deposit: " + amountOwner); + // await sendTransaction("TestToken", usdc, "mint", [poolTreasury.address, amountOwner]); + // await sendTransaction("TestToken", usdcFromPoolOwnerTreasury, "approve", [pool.address, amountOwner]); + // await sendTransaction("ArfPool", poolFromPoolOwnerTreasury, "makeInitialDeposit", [amountOwner]); + + // EA + // const usdcFromEA = await usdc.connect(ea_bcp); + // const poolFromEA = await pool.connect(ea_bcp); + // const amountEA = BigInt(10_000)*(BigInt(10)**(BigInt(decimals))); + // await sendTransaction("TestToken", usdc, "mint", [ea_bcp.address, amountEA]); + // await sendTransaction("TestToken", usdcFromEA, "approve", [poolFromEA.address, amountEA]); + // await sendTransaction("BaseCreditPool", poolFromEA, "makeInitialDeposit", [amountEA]); + + await sendTransaction("ArfPool", pool, "enablePool", []); +} + +async function initContracts() { + const network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + const accounts = await hre.ethers.getSigners(); + let invoicePayer; + [ + deployer, eaService, poolTreasury + ] = await accounts; + console.log("deployer address: " + deployer.address); + console.log("ea address: " + eaService.address); + + deployedContracts = await getDeployedContracts(); + + await initHumaConfig(); + await initEA(); + await initBaseCreditPoolFeeManager(); + await initBaseCreditPoolHDT(); + await initBaseCreditPoolConfig(); + await initBaseCreditPool(); + await initRWR(); + + await prepareBaseCreditPool(); + +} + +initContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/deployment/sepolia/verify-arf-pool.js b/deployment/sepolia/verify-arf-pool.js new file mode 100644 index 00000000..bc736ebc --- /dev/null +++ b/deployment/sepolia/verify-arf-pool.js @@ -0,0 +1,181 @@ +const execSync = require('child_process').execSync; +const { + getDeployedContracts, + getVerifiedContract, + updateVerifiedContract, +} = require("../utils.js"); + +const fs = require("fs"); + +const VERIFY_ARGS_PATH = "./deployment/polygon/verify_args/" + +const HUMA_OWNER_EOA='0x1e7A60fdc43E70d67A3C81AFAE1e95efC48b681b'; +const POOL_OWNER_EOA='0x242c334d3bd2882515547fFCF2733F3BB3701ACA'; + +let deployedContracts, proxyOwner, network, deployer; + +const getArgsFile = async function (contractName) { + const argsFile = `${VERIFY_ARGS_PATH}${contractName}.js`; + return argsFile; +} + +const writeVerifyArgs = async function (contractName, args) { + const argsFile = await getArgsFile(contractName); + let data = `module.exports = [ + ${args.toString()}, + ];` + // console.log(data) + await fs.mkdir(`${VERIFY_ARGS_PATH}`, { recursive: true }, (err) => { + if (err) throw err; + }); + fs.writeFileSync(argsFile, data, {flag: "w"}); + return argsFile; +}; + +const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + +async function etherscanVerify(contractName, contractAddress, argsFile, logMessage) { + await sleep(5000); + logMessage = !logMessage ? contractAddress : logMessage; + console.log(`Verifying ${contractName}:${logMessage}`) + + const command = !argsFile ? `yarn hardhat verify '${contractAddress}' --network ${network}` : `yarn hardhat verify ${contractAddress} --constructor-args ${argsFile} --network ${network}` + let result; + try { + const verifyResult = execSync(command) + // console.log(verifyResult); + result = 'successful'; + } + catch (error) { + if (!error.toString().toLowerCase().includes("already verified" )) { + throw error; + } + else { + result = 'already verified'; + } + }; + console.log(`Verifying ${contractName}:${logMessage} ended!`); + return result; +} + +async function verifyContract(contractKey, args) { + const verified = await getVerifiedContract(contractKey); + if (verified) { + console.log(`${contractKey} is already verified!`); + return 'already verified'; + } + + if (!deployedContracts[contractKey]) { + throw new Error(`${contractKey} not deployed yet!`); + } + let result; + if (args) { + const argsFile = await writeVerifyArgs(contractKey, args); + result = await etherscanVerify(contractKey, deployedContracts[contractKey], argsFile); + } + else { + result = await etherscanVerify(contractKey, deployedContracts[contractKey]); + } + await updateVerifiedContract(contractKey); + return result; +} + +async function verifyContracts() { + network = (await hre.ethers.provider.getNetwork()).name; + console.log("network : ", network); + deployedContracts = await getDeployedContracts(); + const accounts = await hre.ethers.getSigners(); + if (accounts.length == 0) { + throw new Error("Accounts not set!"); + } + deployer = await accounts[0]; + // proxyOwner = await accounts[1]; + // console.log("proxyOwner address: " + proxyOwner.address); + + const verifyUsdc = await verifyContract('USDC'); + console.log(`Verify USDC result: ${verifyUsdc}`); + + const verifyEANFT = await verifyContract('EANFT'); + console.log(`Verify EANFT result: ${verifyEANFT}`); + + // const verifyRNNFT = await verifyContract('RNNFT', [ + // `'${deployedContracts['USDC']}'` + // ]); + // console.log(`Verify RNNFT result: ${verifyRNNFT}`); + + const verifyHumaConfig = await verifyContract('HumaConfig'); + console.log(`Verify HumaConfig result: ${verifyHumaConfig}`); + + const verifyHumaConfigTL = await verifyContract('HumaConfigTimelock', + [ + 0, + `['${HUMA_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify HumaConfigTimelock result: ${verifyHumaConfigTL}`); + + const verifyRWRImpl = await verifyContract('RWReceivableImpl'); + console.log(`Verify RWRImpl result: ${verifyRWRImpl}`); + + const verifyRWR = await verifyContract('RWReceivable', + [ + `'${deployedContracts['RWReceivableImpl']}'`, + `'${deployedContracts['HumaConfigTimelock']}'`, + '[]' + ]); + console.log(`Verify RWR result: ${verifyRWR}`); + + + // const verifyBaseCreditPoolTL = await verifyContract('ArfPoolTimelock', + // [ + // 0, + // `['${POOL_OWNER_EOA}']`, + // `['${deployer.address}']`, + // ]); + // console.log(`Verify ArfPoolTimelock result: ${verifyBaseCreditPoolTL}`); + + const verifyBaseCreditPoolProxyAdminTL = await verifyContract('ArfPoolProxyAdminTimelock', + [ + 0, + `['${POOL_OWNER_EOA}']`, + `['${deployer.address}']`, + ]); + console.log(`Verify ArfPoolProxyAdminTimelock result: ${verifyBaseCreditPoolProxyAdminTL}`); + + const verifyFeeManager = await verifyContract('ArfPoolFeeManager'); + console.log(`Verify FeeManager result: ${verifyFeeManager}`); + + const verifyHDTImpl = await verifyContract('ArfHDTImpl'); + console.log(`Verify HDTImpl result: ${verifyHDTImpl}`); + + const verifyHDT = await verifyContract('ArfHDT', + [ + `'${deployedContracts['ArfHDTImpl']}'`, + `'${deployedContracts['ArfPoolProxyAdminTimelock']}'`, + '[]' + ]); + console.log(`Verify HDT result: ${verifyHDT}`); + + const verifyPoolConfig = await verifyContract('ArfPoolConfig'); + console.log(`Verify poolConfig result: ${verifyPoolConfig}`); + + const verifyPoolImpl = await verifyContract('ArfPoolImpl'); + console.log(`Verify PoolImpl result: ${verifyPoolImpl}`); + + const verifyPool = await verifyContract('ArfPool', + [ + `'${deployedContracts['ArfPoolImpl']}'`, + `'${deployedContracts['ArfPoolProxyAdminTimelock']}'`, + '[]', + ]); + console.log(`Verify Pool result: ${verifyPool}`); +} + +verifyContracts() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + +// Reason: Already Verified \ No newline at end of file diff --git a/deployment/utils.js b/deployment/utils.js index e25c1d31..1971940e 100644 --- a/deployment/utils.js +++ b/deployment/utils.js @@ -2,8 +2,8 @@ const {BigNumber: BN, ethers} = require("ethers"); const fs = require("fs"); const DEPLOYED_PATH = "./deployment/"; -const MAX_FEE_PER_GAS = 30_000_000_000; -const MAX_PRIORITY_FEE_PER_GAS = 2_000_000_000; +const MAX_FEE_PER_GAS = 40_000_000_000; +const MAX_PRIORITY_FEE_PER_GAS = 38_000_000_000; const getContractAddressFile = async function (fileType = "deployed", network) { if (!network) { @@ -119,14 +119,21 @@ const sendTransaction = async function ( console.log(`${contractName}:${logMessage} End!`); }; -async function deploy(contractName, keyName, contractParameters, deployer) { +async function deploy(contractName, keyName, contractParameters, libraries, deployer) { const deployed = await getDeployedContract(keyName); if (deployed) { console.log(`${keyName} already deployed: ${deployed}`); let Contract = await hre.ethers.getContractFactory(contractName); return Contract.attach(deployed); } - let Contract = await hre.ethers.getContractFactory(contractName); + + let Contract; + if (libraries) { + Contract = await hre.ethers.getContractFactory(contractName, libraries); + } else { + Contract = await hre.ethers.getContractFactory(contractName); + } + if (deployer) { Contract = Contract.connect(deployer); } diff --git a/hardhat.config.js b/hardhat.config.js index 1d44297c..18d96550 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,8 +1,7 @@ -require("dotenv").config(); require("hardhat-contract-sizer"); require("@nomicfoundation/hardhat-chai-matchers"); -require("@tenderly/hardhat-tenderly"); +// require("@tenderly/hardhat-tenderly"); require("hardhat-gas-reporter"); require("hardhat-abi-exporter"); @@ -12,13 +11,17 @@ require("@nomiclabs/hardhat-etherscan"); require("hardhat-prettier"); require("solidity-coverage"); -require("hardhat-abi-exporter"); +require("hardhat-celo"); require("dotenv").config(); const fs = require("fs"); const EMPTY_URL = "empty url"; const EMPTY_PRIVATE_KEY = "0x0000000000000000000000000000000000000000000000000000000000000000"; +let sepoliaUrl = process.env["SEPOLIA_URL"]; +if (!sepoliaUrl) { + sepoliaUrl = EMPTY_URL; +} let goerliUrl = process.env["GOERLI_URL"]; if (!goerliUrl) { goerliUrl = EMPTY_URL; @@ -27,6 +30,10 @@ let mumbaiUrl = process.env["MUMBAI_URL"]; if (!mumbaiUrl) { mumbaiUrl = EMPTY_URL; } +let amoyUrl = process.env["AMOY_URL"]; +if (!amoyUrl) { + amoyUrl = EMPTY_URL; +} let polygonUrl = process.env["POLYGON_URL"]; if (!polygonUrl) { polygonUrl = EMPTY_URL; @@ -39,6 +46,10 @@ let deployer = process.env["DEPLOYER"]; if (!deployer) { deployer = EMPTY_PRIVATE_KEY; } +let poolTreasury = process.env["POOL_TREASURY"]; +if (!poolTreasury) { + poolTreasury = EMPTY_PRIVATE_KEY; +} let proxyOwner = process.env["PROXY_OWNER"]; if (!proxyOwner) { proxyOwner = EMPTY_PRIVATE_KEY; @@ -163,21 +174,22 @@ module.exports = { }, goerli: { url: goerliUrl, - accounts: [ - deployer, - proxyOwner, - lender, - ea, - eaService, - pdsService, - treasury, - ea_bcp, - invoicePayer, - baseCreditPoolOperator, - receivableFactoringPoolOperator, - baseCreditPoolOwnerTreasury, - receivableFactoringPoolOwnerTreasury, - ], + accounts: [deployer, eaService, poolTreasury], + // accounts: [ + // deployer, + // proxyOwner, + // lender, + // ea, + // eaService, + // pdsService, + // treasury, + // ea_bcp, + // invoicePayer, + // baseCreditPoolOperator, + // receivableFactoringPoolOperator, + // baseCreditPoolOwnerTreasury, + // receivableFactoringPoolOwnerTreasury, + // ], }, xdai: { url: "https://rpc.xdaichain.com/", @@ -204,23 +216,34 @@ module.exports = { url: polygonUrl, accounts: [deployer, eaService], }, + amoy: { + url: amoyUrl, + accounts: [deployer, eaService], + }, mumbai: { url: mumbaiUrl, accounts: [ deployer, - proxyOwner, - lender, - ea, eaService, - pdsService, - treasury, - ea_bcp, - invoicePayer, ], }, matic: { url: polygonUrl, - accounts: [deployer, eaService, pdsService], + accounts: [deployer, eaService], + }, + alfajores: { + url: "https://alfajores-forno.celo-testnet.org", + accounts: [deployer, eaService], + chainId: 44787 + }, + celo: { + url: "https://forno.celo.org", + accounts: [deployer, eaService], + chainId: 42220 + }, + sepolia: { + url: sepoliaUrl, + accounts: [deployer, eaService, poolTreasury], }, optimism: { url: "https://mainnet.optimism.io", @@ -362,7 +385,22 @@ module.exports = { goerli: process.env.ETHERSCAN_API_KEY || null, polygon: process.env.POLYGONSCAN_API_KEY || null, mainnet: process.env.ETHERSCAN_API_KEY || null, + sepolia: process.env.ETHERSCAN_API_KEY || null, + alfajores: process.env.CELOSCAN_API_KEY || null, + celo: process.env.CELOSCAN_API_KEY || null, + polygonMumbai: process.env.POLYGONSCAN_API_KEY || null, + amoy: process.env.POLYGONSCAN_API_KEY || null, }, + customChains: [ + { + network: "amoy", + chainId: 80002, + urls: { + apiURL: "https://api-amoy.polygonscan.com/api", + browserURL: "https://amoy.polygonscan.com/", + }, + }, + ] }, contractSizer: { alphaSort: true, diff --git a/package.json b/package.json index 5040dd1c..be018165 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,7 @@ { "name": "huma-contract", "version": "1.0.0", - "license": "MIT", - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^1.0.5", - "@nomiclabs/hardhat-ethers": "^2.1.1", - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "@openzeppelin/hardhat-upgrades": "^1.23.1", - "@tenderly/hardhat-tenderly": "^1.1.6", - "chai": "^4.3.6", - "ethers": "^5.7.0", - "hardhat-abi-exporter": "^2.10.0", - "hardhat-contract-sizer": "^2.6.1", - "hardhat-gas-reporter": "^1.0.9", - "hardhat-prettier": "^0.0.1", - "husky": "^8.0.1", - "node-watch": "^0.7.3", - "prettier": "^2.7.1", - "prettier-plugin-solidity": "^1.0.0-beta.24", - "qrcode-terminal": "^0.12.0", - "solhint": "^3.3.7", - "solidity-coverage": "^0.8.2", - "typescript": "^4.8.2" - }, + "license": "LGPL-3.0-or-later", "scripts": { "build": "hardhat compile", "chain": "hardhat node", @@ -37,17 +16,36 @@ "gitleaks": "bash scripts/gitleaks.sh" }, "dependencies": { - "@openzeppelin/contracts": "^4.7.3", - "@openzeppelin/contracts-upgradeable": "^4.8.3", - "dotenv": "^16.0.2", - "hardhat": "^2.11.1" + "@openzeppelin/contracts": "4.7.3", + "@openzeppelin/contracts-upgradeable": "4.8.3", + "hardhat": "^2.17.1" }, - "resolutions": { - "flat": "^5.0.2", - "minimatch": "^3.1.2", - "undici": "^5.22.1", - "semver": "^5.7.2", - "tough-cookie": "^4.1.3", - "word-wrap": "^1.2.4" + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^1.0.5", + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-network-helpers": "^1.0.8", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", + "@openzeppelin/hardhat-upgrades": "^2.1.0", + "@typechain/ethers-v5": "^11.1.1", + "@typechain/hardhat": "^8.0.3", + "@types/mocha": "^10.0.1", + "chai": "^4.3.7", + "dotenv": "^16.3.1", + "ethers": "^5.7.2", + "hardhat-abi-exporter": "^2.10.1", + "hardhat-celo": "^0.0.4", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-prettier": "^0.0.1", + "husky": "^8.0.3", + "node-watch": "^0.7.4", + "prettier": "^3.0.1", + "prettier-plugin-solidity": "^1.1.3", + "solhint": "^3.5.1", + "solidity-coverage": "^0.8.4", + "ts-node": "^10.9.1", + "typechain": "^8.3.1", + "typescript": "^5.1.6" } -} +} \ No newline at end of file diff --git a/scripts/cancel-pending-txs.js b/scripts/cancel-pending-txs.js index b14699bd..7c445b72 100644 --- a/scripts/cancel-pending-txs.js +++ b/scripts/cancel-pending-txs.js @@ -2,7 +2,7 @@ const {Wallet, utils} = require("ethers"); const ZERO_BYTES32 = "0x0000000000000000000000000000000000000000000000000000000000000000"; const ACCOUNT_PRIVATE_KEY = ""; -const TO_ADDRESS = "0x60891b087E81Ee2a61B7606f68019ec112c539B9"; +const TO_ADDRESS = "0x07250B0373Aa6a3de47A44e3Cf720A6376296dD5"; async function main() { const network = (await hre.ethers.provider.getNetwork()).name; @@ -16,10 +16,10 @@ async function main() { const data = { to: TO_ADDRESS, - // value: utils.parseUnits("10", "gwei"), - maxFeePerGas: utils.parseUnits("100", "gwei"), - maxPriorityFeePerGas: utils.parseUnits("40", "gwei"), - nonce: null, + value: utils.parseUnits("10", "gwei"), + maxFeePerGas: utils.parseUnits("280", "gwei"), + maxPriorityFeePerGas: utils.parseUnits("200", "gwei"), + nonce: 92173, }; const tx = await account.sendTransaction(data); diff --git a/test/factoryTest.js b/test/factoryTest.js new file mode 100644 index 00000000..c36ea3fb --- /dev/null +++ b/test/factoryTest.js @@ -0,0 +1,259 @@ +/* eslint-disable no-underscore-dangle */ +const {ethers} = require("hardhat"); +const {expect} = require("chai"); + +describe("Huma Config", function () { + let poolAddress; + before(async function () { + [ + deployer, + poolOwner, + protocolOwner, + ] = await ethers.getSigners(); + + // Deploy EvaluationAgentNFT + // console.log("deploying EANFT"); + const EvaluationAgentNFT = await ethers.getContractFactory("EvaluationAgentNFT"); + eaNFTContract = await EvaluationAgentNFT.deploy(); + + // console.log("deploying HumaConfig"); + const HumaConfig = await ethers.getContractFactory("HumaConfig"); + configContract = await HumaConfig.deploy(); + + + // Deploy TestToken, give initial tokens to lender + // console.log("deploying TestToken"); + const TestToken = await ethers.getContractFactory("TestToken"); + testTokenContract = await TestToken.deploy(); + + await configContract.setLiquidityAsset(testTokenContract.address, true); + + // console.log("deploying HDTImpl"); + const HDTImpl = await ethers.getContractFactory("HDT"); + hdtImpl = await HDTImpl.deploy(); + + // deploy basecreditpool implementation + // console.log("deploying BaseCreditPoolImpl"); + const BaseCreditPoolImpl = await ethers.getContractFactory("BaseCreditPool"); + baseCreditPoolImpl = await BaseCreditPoolImpl.deploy(); + + const ReceivableFactoringPoolImpl = await ethers.getContractFactory("ReceivableFactoringPool"); + receivableFactoringPoolImpl = await ReceivableFactoringPoolImpl.deploy(); + + // console.log("deploying LibFeeManager"); + const LibFeeManager = await ethers.getContractFactory("LibFeeManager"); + libFeeManager = await LibFeeManager.deploy(); + + // console.log("deploying LibPoolConfig"); + const LibPoolConfig = await ethers.getContractFactory("LibPoolConfig"); + libPoolConfig = await LibPoolConfig.deploy(); + + const LibHDT = await ethers.getContractFactory("LibHDT"); + libHDT = await LibHDT.deploy(); + + const LibPool = await ethers.getContractFactory("LibPool"); + libPool = await LibPool.deploy(); + + // console.log("deploying PoolFactory"); + const PoolFactory = await ethers.getContractFactory("PoolFactory",{libraries: { + LibFeeManager: libFeeManager.address, + LibPoolConfig: libPoolConfig.address, + LibHDT: libHDT.address, + LibPool: libPool.address, + },}); + + poolFactory = await PoolFactory.deploy( + deployer.address, configContract.address, hdtImpl.address, + baseCreditPoolImpl.address, receivableFactoringPoolImpl.address + ); + }); + + describe("Factory Ownership", function () { + it("Protocol owner should own the factory", async function () { + await poolFactory.transferOwnership(protocolOwner.address); + const role = await poolFactory.OWNER_ROLE(); + await expect(await poolFactory.hasRole(role, protocolOwner.address)).to.equal(true); + await expect(await poolFactory.hasRole(role, deployer.address)).to.equal(false); + }); + }); + + describe("Deployer Role", function () { + it("Protocol owner can grant and revoke deployer role", async function () { + const role = await poolFactory.DEPLOYER_ROLE(); + await expect(await poolFactory.hasRole(role, deployer.address)).to.equal(false); + await poolFactory.connect(protocolOwner).addDeployer(deployer.address); + await expect(await poolFactory.hasRole(role, deployer.address)).to.equal(true); + await poolFactory.connect(protocolOwner).removeDeployer(deployer.address); + await expect(await poolFactory.hasRole(role, deployer.address)).to.equal(false); + await poolFactory.connect(protocolOwner).addDeployer(deployer.address); + }); + it("Other accounts cannot grant and revoke deployer role", async function () { + const role = await poolFactory.DEPLOYER_ROLE(); + await expect( + poolFactory.addDeployer(deployer.address) + ).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + await expect( + poolFactory.removeDeployer(deployer.address) + ).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + }); + }); + + describe("Setting implementation address", function () { + it("Owner can set new HDTimpl", async function () { + const newHDTImpl = await ethers.getContractFactory("HDT"); + hdtImpl = await newHDTImpl.deploy(); + await poolFactory.connect(protocolOwner).setHDTImplAddress(hdtImpl.address); + await expect(await poolFactory.hdtImplAddress()).to.equal(hdtImpl.address); + }); + it("Other accounts cannot set new HDTimpl", async function () { + const newHDTImpl = await ethers.getContractFactory("HDT"); + newhdtImpl = await newHDTImpl.deploy(); + await expect( + poolFactory.setHDTImplAddress(newhdtImpl.address) + ).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + }); + it("Owner can set new BaseCredtiPoolImpl Address", async function () { + const NewImpl = await ethers.getContractFactory("BaseCreditPool"); + newBaseCreditPoolImpl = await NewImpl.deploy(); + await poolFactory.connect(protocolOwner).setBaseCredtiPoolImplAddress(newBaseCreditPoolImpl.address); + await expect(await poolFactory.baseCreditPoolImplAddress()).to.equal(newBaseCreditPoolImpl.address); + // console.log(await poolFactory.baseCreditPoolImplAddress()); + }); + it("Other accounts cannot set new BaseCredtiPoolImpl", async function () { + const NewImpl = await ethers.getContractFactory("BaseCreditPool"); + newImpl = await NewImpl.deploy(); + await expect( + poolFactory.setHDTImplAddress(newImpl.address) + ).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + // console.log(await poolFactory.baseCreditPoolImplAddress()); + }); + it("Owner can set new receivableFactoringPoolImpl Address", async function () { + const NewImpl = await ethers.getContractFactory("ReceivableFactoringPool"); + newReceivableFactoringPoolImpl = await NewImpl.deploy(); + await poolFactory.connect( + protocolOwner + ).setReceivableFactoringPoolImplAddress( + newReceivableFactoringPoolImpl.address + ); + await expect( + await poolFactory.receivableFactoringPoolImplAddress() + ).to.equal( + newReceivableFactoringPoolImpl.address + ); + }); + it("Other accounts cannot set new BaseCredtiPoreceivableFactoringPoolImplolImpl", async function () { + const NewImpl = await ethers.getContractFactory("ReceivableFactoringPool"); + newImpl = await NewImpl.deploy(); + await expect( + poolFactory.setHDTImplAddress(newImpl.address) + ).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + }); + }); + describe("Creating pools", function () { + it("Non-deployer cannot create pools", async function () { + await expect( + poolFactory.connect(protocolOwner).createBaseCreditPool( + 'Testing pool', + [poolOwner.address], + [poolOwner.address], + )).to.be.revertedWith(/AccessControl: account .* is missing role .*/); + }); + it("Deployer creates base credit pool", async function () { + const tnx = await poolFactory.createBaseCreditPool( + 'Testing pool', + [poolOwner.address], + [poolOwner.address], + ); + const receipt = await tnx.wait(); + const poolAddress = await receipt.events.pop().args[0]; + const poolRecord = await poolFactory.checkPool(poolAddress); + await expect( + poolRecord['poolName'] + ).to.equal( + 'Testing pool', + ); + await expect( + poolRecord['poolStatus'] + ).to.equal( + 0, + ); + }); + it("Deployer creates receivable pool", async function () { + const tnx = await poolFactory.createReceivableFactoringPool( + 'Testing pool 2', + [poolOwner.address], + [poolOwner.address], + ); + const receipt = await tnx.wait(); + poolAddress = await receipt.events.pop().args[0]; + const poolRecord = await poolFactory.checkPool(poolAddress); + await expect( + poolRecord['poolName'] + ).to.equal( + 'Testing pool 2', + ); + await expect( + poolRecord['poolStatus'] + ).to.equal( + 0, + ); + }); + }); + describe("Initialize pools", function () { + it("Initialize Fee Manager", async function () { + await expect(poolFactory.updatePoolStatus(poolAddress)).to.be.revertedWith("FEE_MANAGER_NOT_INITIALIZED"); + await poolFactory.initializePoolFeeManager( + poolAddress, + 0, + 0, + 0, + 0, + 0, + 0, + ); + }); + it("Initialize HDT", async function () { + await expect(poolFactory.updatePoolStatus(poolAddress)).to.be.revertedWith("HDT_NOT_INITIALIZED"); + await poolFactory.initializeHDT( + poolAddress, + "Test HDT", + "THDT", + testTokenContract.address + ); + }); + it("Initialize Pool Config", async function () { + await expect(poolFactory.updatePoolStatus(poolAddress)).to.be.revertedWith("POOL_CONFIG_NOT_INITIALIZED"); + await poolFactory.initializePoolConfigOne( + poolAddress, + poolOwner.address, + 30, + 30 + ); + await poolFactory.initializePoolConfigTwo( + poolAddress, + 1_000_000_000_000, + 0, + 0, + 0, + 0, + 1000_000_000, + 1000, + 0, + deployer.address + ); + }); + it("Initialize Pool", async function () { + await expect(poolFactory.updatePoolStatus(poolAddress)).to.be.revertedWith("POOL_NOT_INITIALIZED"); + await poolFactory.initializePool( + poolAddress + ); + }); + }); + describe("Updating pool status", function () { + it("Pool should be initialized", async function () { + await poolFactory.updatePoolStatus(poolAddress); + const poolStatus = await poolFactory.checkPool(poolAddress); + await expect(poolStatus['poolStatus']).to.equal(1); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 838b073c..4a873ea2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,33 +2,110 @@ # yarn lockfile v1 +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/types@^3.1.0": + version "3.378.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.378.0.tgz#93a811ccdf15c81b1947f1cd67922c4690792189" + integrity sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w== + dependencies: + "@smithy/types" "^2.0.2" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + "@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" + integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.10" + chalk "^2.4.2" -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" js-tokens "^4.0.0" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -93,7 +170,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -197,10 +274,10 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" @@ -219,10 +296,10 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -348,10 +425,10 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== dependencies: "@ethersproject/base64" "^5.7.0" "@ethersproject/bytes" "^5.7.0" @@ -370,6 +447,24 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -381,15 +476,15 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/hashes@1.1.2", "@noble/hashes@~1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -412,29 +507,31 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@4.0.0-rc.3", "@nomicfoundation/ethereumjs-block@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0-rc.3.tgz#759d361968b23f06fd0f3f24023005bd3f05aa76" - integrity sha512-T+KzsCOEB4iP2Wy0OmjsxARbX8czN8LjF2pfdz9ucx37jAHfVAhWmEZaB+wfh7NZqumsBfgRtYbRJ572+nlTBQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-block@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" + integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" + ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@6.0.0-rc.3", "@nomicfoundation/ethereumjs-blockchain@^6.0.0-rc.3": - version "6.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0-rc.3.tgz#d6f4111447caad4f2f9c30fbe71117a7fdf081c2" - integrity sha512-GxaMYLXcyY/aFFXOiIwYYDVwHFffnddymldOsBGtGHbs0HM/kYLLF+dp3C31Q0+EaFNa6mF1L0NqAbC82CJRNA== - dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-ethash" "2.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-blockchain@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" + integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-ethash" "3.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" debug "^4.3.3" ethereum-cryptography "0.1.3" @@ -442,260 +539,305 @@ lru-cache "^5.1.1" memory-level "^1.0.0" -"@nomicfoundation/ethereumjs-common@3.0.0-rc.3", "@nomicfoundation/ethereumjs-common@^3.0.0-rc.3": - version "3.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0-rc.3.tgz#f0a43d0a9db0a0ebb587e8b5bac022c152c1da31" - integrity sha512-r7qLtNabVEHNihLZevHV0weNshDpXo/o7i0JD9O10OExdicpgHPsU4qGnAvzO9bby9ANO2ydrOIlrYSm4lBkTg== +"@nomicfoundation/ethereumjs-common@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" + integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== dependencies: - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-util" "9.0.1" crc-32 "^1.2.0" -"@nomicfoundation/ethereumjs-ethash@2.0.0-rc.3": - version "2.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0-rc.3.tgz#78476d68fd15f3ab3ade8b1ad68407d8ac7b96eb" - integrity sha512-l75FH3KYUXuXjEdVZ3P7iVBbFhsghIMUuOBVfau4vx90SEGUQZnrU6cg9jBTyYvn0w9IIKJ76ZmDV8RDohZktA== +"@nomicfoundation/ethereumjs-ethash@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" + integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" bigint-crypto-utils "^3.0.23" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@1.0.0-rc.3", "@nomicfoundation/ethereumjs-evm@^1.0.0-rc.3": - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0-rc.3.tgz#b09b470e33984211df9e1ca7fdff3261b6caef84" - integrity sha512-FY/SxIazYeJQ2uvx5uXV+MRgThrPjzr0nKMEyrFZPgbZb4KvcZarJuQVaJhQ4a5foqq8aHHRbWLdJQyWn9c2jw== +"@nomicfoundation/ethereumjs-evm@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" + integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/ethereumjs-rlp@4.0.0-rc.3", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2", "@nomicfoundation/ethereumjs-rlp@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0-rc.3.tgz#f654b6aaf74b0859ba68bac9522df82d847070cd" - integrity sha512-4F3fYTdqJhBNDoZ4o7uGzorvcbXuSeRXz46X/Z1TGMri5FjpWFl48qEOse2RpXCFudlAv7n/MpgJSuFzN1vreQ== +"@nomicfoundation/ethereumjs-rlp@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" + integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== -"@nomicfoundation/ethereumjs-statemanager@1.0.0-rc.3", "@nomicfoundation/ethereumjs-statemanager@^1.0.0-rc.3": - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0-rc.3.tgz#1057e81406f058166f68c6af9aac48693cc9ad1a" - integrity sha512-c69I4eZN9LFXUp1OI8hGwTvQMmcICus+MLgK5HELKLexV1SKs+K0iA4jgTK6VMM4wrzkmljyVxU5pM0Cb82XAQ== +"@nomicfoundation/ethereumjs-statemanager@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" + integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" + ethers "^5.7.1" + js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@5.0.0-rc.3", "@nomicfoundation/ethereumjs-trie@^5.0.0-rc.3": - version "5.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0-rc.3.tgz#df642ca1883eea0e2c2555028ae912b585d69da6" - integrity sha512-hz84rSGiYOs3vANLGxQm12gKtERMQzkgt1fZBu/OJulMCU+kR1CZxptVpmeg7W8n4NCyIcMPpGeshTMhg8zC5A== +"@nomicfoundation/ethereumjs-trie@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" + integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@4.0.0-rc.3", "@nomicfoundation/ethereumjs-tx@^4.0.0-rc.3": - version "4.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0-rc.3.tgz#0b56bbaee0908491b21419808a44bc0356438060" - integrity sha512-Z3/EYglP+uKyzQj5pc2oMv/vuJ3ZZ2v3qVqRG9k5EsGXNB1lzN1zIh6NCW/vw/AdGoH69MDNGzG5hqGZ9cJJiw== - dependencies: - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" +"@nomicfoundation/ethereumjs-tx@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" + integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@8.0.0-rc.3", "@nomicfoundation/ethereumjs-util@^8.0.0-rc.3": - version "8.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0-rc.3.tgz#d47dca076b5ea41b4498cf8292666d21f31b4e88" - integrity sha512-Ldd1NVbk+FtP/JKCQTOVrBJzHMXpMnUdqE9oetAqKVnaLszXMEUa/B0fBdJaPIXKU/c9tAba29/pGxRpcQbgKQ== +"@nomicfoundation/ethereumjs-util@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" + integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@^6.0.0-rc.3": - version "6.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0-rc.3.tgz#e1e3f29b45a206fdaafdff8316081c98a558407b" - integrity sha512-MF6WeU0sx+6zM8ustttlZZFZtI6/c/qIWVnxrT6K5VRaiC1Us1ih3S8HBr6xNkl6JgBHj0e0oC1CA9xiowwlUQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-blockchain" "6.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "3.0.0-rc.3" - "@nomicfoundation/ethereumjs-evm" "1.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-statemanager" "1.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "8.0.0-rc.3" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" +"@nomicfoundation/ethereumjs-vm@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" + integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" "@nomicfoundation/hardhat-chai-matchers@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.5.tgz#75d08bd9bd84a3cb7950be6bd27171a294516b01" - integrity sha512-+W5C/+5FHI2xBajUN9THSNc1UP6FUsA7LeLmfnaC9VMi/50/DEjjxd8OmizEXgV1Bjck7my4NVQLL1Ti39FkpA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz#72a2e312e1504ee5dd73fe302932736432ba96bc" + integrity sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ== dependencies: "@ethersproject/abi" "^5.1.2" "@types/chai-as-promised" "^7.1.3" chai-as-promised "^7.1.1" - chalk "^2.4.2" deep-eql "^4.0.1" ordinal "^1.0.3" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" - integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== +"@nomicfoundation/hardhat-ethers@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.4.tgz#6f0df2424e687e26d6574610de7a36bd69485cc1" + integrity sha512-k9qbLoY7qn6C6Y1LI0gk2kyHXil2Tauj4kGzQ8pgxYXIGw8lWn8tuuL72E11CrlKaXRUvOgF0EXrv/msPI2SbA== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" - integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== +"@nomicfoundation/hardhat-network-helpers@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz#e4fe1be93e8a65508c46d73c41fa26c7e9f84931" + integrity sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q== + dependencies: + ethereumjs-util "^7.1.4" -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" - integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== +"@nomicfoundation/hardhat-toolbox@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-1.0.2.tgz#342b79e19c456a56d8e76bc2e9cc8474cbcfc774" + integrity sha512-8CEgWSKUK2aMit+76Sez8n7UB0Ze1lwT+LcWxj4EFP30lQWOwOws048t6MTPfThH0BlSWjC6hJRr0LncIkc1Sw== -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" - integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" - integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" - integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" - integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" - integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" - integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" - integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== -"@nomicfoundation/solidity-analyzer@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" - integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" - -"@nomiclabs/hardhat-ethers@^2.0.6", "@nomiclabs/hardhat-ethers@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== -"@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz#7137554862b3b1c914f1b1bf110f0529fd2dec53" - integrity sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA== +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@nomiclabs/hardhat-ethers@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@nomiclabs/hardhat-etherscan@^3.1.7": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" + integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" + cbor "^8.1.0" chalk "^2.4.2" debug "^4.1.1" fs-extra "^7.0.1" lodash "^4.17.11" semver "^6.3.0" table "^6.8.0" - undici "^5.4.0" + undici "^5.14.0" -"@openzeppelin/contracts-upgradeable@^4.8.3": +"@openzeppelin/contracts-upgradeable@4.8.3": version "4.8.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.8.3.tgz#6b076a7b751811b90fe3a172a7faeaa603e13a3f" integrity sha512-SXDRl7HKpl2WDoJpn7CK/M9U4Z8gNXDHHChAKh0Iz+Wew3wu6CmFYBeie3je8V0GSXZAIYYwUktSrnW/kwVPtg== -"@openzeppelin/contracts@^4.7.3": +"@openzeppelin/contracts@4.7.3": version "4.7.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== -"@openzeppelin/hardhat-upgrades@^1.23.1": - version "1.23.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.23.1.tgz#45b47f7083493dae7339782aeeafd68606f76488" - integrity sha512-/bE480eKxbNBuvGsSsQglnwk3T52hC7lgmrOCSb4EKoF6njCeyebeBwQCr/5uZTRfIhHMkKr5s7lFFP8t2KzjQ== +"@openzeppelin/defender-base-client@^1.47.0": + version "1.47.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.47.1.tgz#2044fd048d73778a42eb0c5ae6f1370d0ab4bac9" + integrity sha512-xnopi1tZIh1zY9KF3mo9S2YgMP0I3T11r6jiO1teAw6M0U5Fx2SCjfCVoKV7CLAQGH1VHmAZ7w2CmcEsFvlQng== + dependencies: + amazon-cognito-identity-js "^6.0.1" + async-retry "^1.3.3" + axios "^1.4.0" + lodash "^4.17.19" + node-fetch "^2.6.0" + +"@openzeppelin/hardhat-upgrades@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-2.1.0.tgz#cb77e212b7e21f8a98c4fbdf6aad730f9e988153" + integrity sha512-cHwWbm5YeRde9y37Tcx9o0xc+hE7t+CrxDAdHt+USELW5agi6IaVECpgtVjPhhpfLR8UDJvSggzaP4HAqQhZtQ== dependencies: - "@openzeppelin/upgrades-core" "^1.25.0" + "@openzeppelin/defender-base-client" "^1.47.0" + "@openzeppelin/platform-deploy-client" "^0.9.0" + "@openzeppelin/upgrades-core" "^1.27.0" chalk "^4.1.0" debug "^4.1.1" proper-lockfile "^4.1.1" + undici "^5.14.0" -"@openzeppelin/upgrades-core@^1.25.0": - version "1.25.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.25.0.tgz#4f540e2043b98f8b59a4e8a988b9aeb5b5f23a35" - integrity sha512-vSxOSm1k+P156nNm15ydhOmSPGC37mnl092FMVOH+eGaoqLjr2Za6ULVjDMFzvMnG+sGE1UoDOqBNPfTm0ch8w== +"@openzeppelin/platform-deploy-client@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.9.0.tgz#6d7092066d1c5cf4c25ba6f9d8164e8d1c425b61" + integrity sha512-VepsNJu5B5xhrKMg//hROFljlxlNhlkcgLSKl8rqapKiRFN/dxXtSVmmpNmySrCFnbbV/6twfhuhYGAZiG7oAw== dependencies: - cbor "^8.0.0" + "@ethersproject/abi" "^5.6.3" + "@openzeppelin/defender-base-client" "^1.47.0" + axios "^1.4.0" + lodash "^4.17.19" + node-fetch "^2.6.0" + +"@openzeppelin/upgrades-core@^1.27.0": + version "1.28.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.28.0.tgz#19405f272dc09e766c756d9d149cbd680168aef7" + integrity sha512-8RKlyg98Adv+46GxDaR0awL3R8bVCcQ27DcSEwrgWOp6siHh8sZg4a2l+2dhPl1510S6uBfhHSydMH5VX2BV5g== + dependencies: + cbor "^9.0.0" chalk "^4.1.0" - compare-versions "^5.0.0" + compare-versions "^6.0.0" debug "^4.1.1" ethereumjs-util "^7.0.3" + minimist "^1.2.7" proper-lockfile "^4.1.1" - solidity-ast "^0.4.15" + solidity-ast "^0.4.26" "@scure/base@~1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: - "@noble/hashes" "~1.1.1" + "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": @@ -766,30 +908,61 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1", "@solidity-parser/parser@^0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== +"@smithy/types@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.0.2.tgz#49d42724c909e845bfd80a2e195740614ce497f3" + integrity sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw== + dependencies: + tslib "^2.5.0" + +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== dependencies: antlr4ts "^0.5.0-alpha.4" -"@tenderly/hardhat-tenderly@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.6.tgz#b706c7c337ebae7ecd314df3e8ee3d244ed1de08" - integrity sha512-B6vVdDAxQwjahrvsxjNirJW2ynDENLBD8LLFy8sYVJ+RCb4B8HXT1IGSceqpySNPr2iLYcD5cKC/YCHX+/O48Q== +"@solidity-parser/parser@^0.16.0": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@nomiclabs/hardhat-ethers" "^2.0.6" - axios "^0.21.1" - ethers "^5.6.8" - fs-extra "^9.0.1" - hardhat-deploy "^0.11.10" - js-yaml "^3.14.0" + antlr4ts "^0.5.0-alpha.4" -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v5@^11.1.1": + version "11.1.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-11.1.1.tgz#23a358135a302140cf89a186592464dd6bbf1f98" + integrity sha512-D9WyUrCJ4Z5Gg8T00HWLpuqn1CqSDXlCiUOOpLaWoCbnZrE2jSIOUwR9blBZNo6LE5058e3niVu6xk205Et7tg== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^8.0.3": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-8.0.3.tgz#a114825f130405bbb8e535314003733b7ce3f91c" + integrity sha512-MytSmJJn+gs7Mqrpt/gWkTCOpOQ6ZDfRrRT2gtZL0rfGe4QrU4x9ZdW15fFbVM/XTa+5EsKiOMYXhRABibNeng== + dependencies: + fs-extra "^9.1.0" "@types/bn.js@^4.11.3": version "4.11.6" @@ -813,9 +986,9 @@ "@types/chai" "*" "@types/chai@*": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" - integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== "@types/concat-stream@^1.6.0": version "1.6.1" @@ -849,10 +1022,15 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/mocha@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" + integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== + "@types/node@*": - version "18.7.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.16.tgz#0eb3cce1e37c79619943d2fd903919fc30850601" - integrity sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg== + version "20.4.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.8.tgz#b5dda19adaa473a9bf0ab5cbd8f30ec7d43f5c85" + integrity sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg== "@types/node@^10.0.3": version "10.17.60" @@ -871,11 +1049,24 @@ dependencies: "@types/node" "*" -"@types/qs@^6.2.31", "@types/qs@^6.9.7": +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -883,11 +1074,6 @@ dependencies: "@types/node" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -898,13 +1084,6 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" @@ -918,20 +1097,20 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^6.0.7: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn@^8.4.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" - integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== adm-zip@^0.4.16: version "0.4.16" @@ -958,7 +1137,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: +ajv@^6.12.3, ajv@^6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -969,15 +1148,26 @@ ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" +amazon-cognito-identity-js@^6.0.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.1.tgz#d9a4c1a92f4b059330df8ea075f65106d2605409" + integrity sha512-PxBdufgS8uZShrcIFAsRjmqNXsh/4fXOWUGQOUhKLHWWK1pcp/y+VeFF48avXIWefM8XwsT3JlN6m9J2eHt4LA== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -998,11 +1188,6 @@ ansi-colors@^4.1.0, ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1039,10 +1224,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -antlr4@4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" - integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== +antlr4@^4.11.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.0.tgz#25c0b17f0d9216de114303d38bafd6f181d5447f" + integrity sha512-zooUbt+UscjnWyOrsuY/tVFL4rwrAGwOivpQmvmUDE22hy/lUA467Rc1rcixyRwcRUIXFYBwv7+dClDSHdmmew== antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" @@ -1050,13 +1235,18 @@ antlr4ts@^0.5.0-alpha.4: integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1069,6 +1259,24 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -1079,17 +1287,29 @@ array-uniq@1.0.3: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1112,40 +1332,28 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -ast-parents@0.0.1: +ast-parents@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: - async "^2.4.0" + retry "0.13.1" async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1156,22 +1364,29 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== dependencies: - follow-redirects "^1.14.0" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" balanced-match@^1.0.0: version "1.0.2" @@ -1185,7 +1400,7 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -1203,21 +1418,9 @@ bech32@1.1.4: integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bigint-crypto-utils@^3.0.23: - version "3.1.4" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.4.tgz#b00aa00eb792b14f2f71ead916105c17aac98a4c" - integrity sha512-niSkvARUEe8MiAiH+zKXPkgXzlvGDbOqXL3JDevWaA1TrPhUGSCgV+iedm8qMEBQwvSlMMn8GpSuoUjvsm2QfQ== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.0.tgz#ee7186ff512248e245f8c6ed0aa5c0ccf0c116b4" - integrity sha512-vpiKCiv9B1nK8HhFOU7PMC4k9nrufQxeivgCj5yOH2ZMLD+UPwc/RfNgBCX+v8C6t0sF4q7mEZgZij6k53zpWA== - -bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== binary-extensions@^2.0.0: version "2.2.0" @@ -1252,6 +1455,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1317,6 +1527,15 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -1345,25 +1564,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1379,6 +1579,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1389,21 +1594,20 @@ catering@^2.1.0, catering@^2.1.1: resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.0.0: +cbor@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== dependencies: nofilter "^3.1.0" +cbor@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.1.tgz#b16e393d4948d44758cd54ac6151379d443b37ae" + integrity sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ== + dependencies: + nofilter "^3.1.0" + chai-as-promised@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" @@ -1411,20 +1615,20 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1441,11 +1645,6 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -1471,7 +1670,7 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: +chokidar@3.5.3, chokidar@^3.4.0: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1500,14 +1699,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== dependencies: abstract-level "^1.0.2" catering "^2.1.0" module-error "^1.0.1" - napi-macros "~2.0.0" + napi-macros "^2.2.2" node-gyp-build "^4.3.0" clean-stack@^2.0.0: @@ -1515,13 +1714,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - cli-table3@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -1533,19 +1725,14 @@ cli-table3@^0.5.0: colors "^1.1.2" cli-table3@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" - integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== dependencies: string-width "^4.2.0" optionalDependencies: "@colors/colors" "1.5.0" -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -1605,20 +1792,40 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" - integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -compare-versions@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" - integrity sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +compare-versions@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.0.0.tgz#a3edb527e4487bfab9a8b62ffe70cebc9b87675b" + integrity sha512-s2MzYxfRsE9f/ow8hjn7ysa7pod1xhHdQMsgiJtKx6XSNf4x2N1KG4fjrkUmXcP/e9Y2ZX4zB6sHIso0Lm6evQ== concat-map@0.0.1: version "0.0.1" @@ -1650,15 +1857,15 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^5.0.7: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" + integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" crc-32@^1.2.0: version "1.2.2" @@ -1688,16 +1895,10 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== "crypt@>= 0.0.1": version "0.0.2" @@ -1723,20 +1924,13 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^2.6.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1747,29 +1941,27 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-eql@^4.0.1: +deep-eql@^4.0.1, deep-eql@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -1795,12 +1987,12 @@ depd@2.0.0: integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== dependencies: address "^1.0.1" - debug "^2.6.0" + debug "4" diff@3.5.0: version "3.5.0" @@ -1812,6 +2004,11 @@ diff@5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + difflib@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -1826,17 +2023,10 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dotenv@^16.0.2: - version "16.0.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" - integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== ecc-jsbn@~0.1.1: version "0.1.2" @@ -1859,11 +2049,6 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" - integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -1874,17 +2059,13 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -enquirer@^2.3.0, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" env-paths@^2.2.0: version "2.2.1" @@ -1898,40 +2079,65 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.2.tgz#8495a07bc56d342a3b8ea3ab01bd986700c2ccb3" - integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.2" + get-intrinsic "^1.2.1" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -1951,7 +2157,7 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: +escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -1968,77 +2174,6 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^5.6.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -2049,35 +2184,11 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2133,14 +2244,14 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" ethereumjs-abi@^0.6.8: version "0.6.8" @@ -2163,7 +2274,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: +ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -2189,10 +2300,10 @@ ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" - integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== +ethers@^5.7.1, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -2209,10 +2320,10 @@ ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: "@ethersproject/json-wallets" "5.7.0" "@ethersproject/keccak256" "5.7.0" "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.0" + "@ethersproject/networks" "5.7.1" "@ethersproject/pbkdf2" "5.7.0" "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.0" + "@ethersproject/providers" "5.7.2" "@ethersproject/random" "5.7.0" "@ethersproject/rlp" "5.7.0" "@ethersproject/sha2" "5.7.0" @@ -2222,7 +2333,7 @@ ethers@^5.5.3, ethers@^5.6.8, ethers@^5.7.0: "@ethersproject/transactions" "5.7.0" "@ethersproject/units" "5.7.0" "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.0" + "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" ethjs-unit@0.1.6: @@ -2241,11 +2352,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -2259,15 +2365,6 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2278,20 +2375,25 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.0.3: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2310,26 +2412,12 @@ fast-levenshtein@~2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2337,6 +2425,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -2359,36 +2454,29 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + is-buffer "~2.0.3" -flat@^4.1.0, flat@^5.0.2: +flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +follow-redirects@^1.12.1, follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: - imul "^1.0.0" - -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + is-callable "^1.1.3" forever-agent@~0.6.1: version "0.6.1" @@ -2443,16 +2531,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^7.0.1: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -2470,7 +2549,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: +fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -2520,7 +2599,7 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -2535,13 +2614,14 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-port@^3.1.0: @@ -2591,6 +2671,18 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -2614,7 +2706,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2626,6 +2718,17 @@ glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -2642,10 +2745,12 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" globby@^10.0.1: version "10.0.2" @@ -2661,10 +2766,17 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== growl@1.10.5: version "1.10.5" @@ -2672,12 +2784,12 @@ growl@1.10.5: integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -2696,40 +2808,29 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-abi-exporter@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.10.0.tgz#4498982bb8942178a3b6d9368b0def8d18b49cc8" - integrity sha512-ynYGUptkal3leyUNGP3aJ6GRYtSHed3lHcfMv6imawqEd7MERueEkeFy+X4kWH3Vf5w4k6xeeCJHJsegGBJUPA== +hardhat-abi-exporter@^2.10.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.10.1.tgz#b14884e233c73fe3f43360f014ad7fd6df4b6d25" + integrity sha512-X8GRxUTtebMAd2k4fcPyVnCdPa6dYK4lBsrwzKP5yiSq4i+WadWPIumaLfce53TUf/o2TnLpLOduyO1ylE2NHQ== dependencies: "@ethersproject/abi" "^5.5.0" delete-empty "^3.0.0" -hardhat-contract-sizer@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.6.1.tgz#2b0046a55fa1ec96f19fdab7fde372377401c874" - integrity sha512-b8wS7DBvyo22kmVwpzstAQTdDCThpl/ySBqZh5ga9Yxjf61/uTL12TEg5nl7lDeWy73ntEUzxMwY6XxbQEc2wA== +hardhat-celo@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/hardhat-celo/-/hardhat-celo-0.0.4.tgz#aef6fc91e694dd5c0811953d01b08964e3c0a078" + integrity sha512-K/USkJCTaWUGfmlEs/9EbwYovgfoQ6BfhZNCrG7zAkFfmcYXuUuARwzLyyZbCHjmDOyh17OHiL3ItS89MEAohA== dependencies: - chalk "^4.0.0" - cli-table3 "^0.6.0" + "@nomicfoundation/hardhat-toolbox" "^1.0.2" -hardhat-deploy@^0.11.10: - version "0.11.14" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.14.tgz#8be2dcb0fa3560e59abba2ca33212d98f201b904" - integrity sha512-QL/ETKUj8a5QNZujXJCYFf7vwSvtKFmQhrSFe2S6x2TCHqhYt7heiR0H3YCxFGO8d1iF2QNL2wYtwvL+i5VvLQ== +hardhat-contract-sizer@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz#72646f43bfe50e9a5702c9720c9bc3e77d93a2c9" + integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA== dependencies: - "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - ethers "^5.5.3" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - zksync-web3 "^0.8.1" + chalk "^4.0.0" + cli-table3 "^0.6.0" + strip-ansi "^6.0.0" hardhat-gas-reporter@^1.0.9: version "1.0.9" @@ -2748,28 +2849,27 @@ hardhat-prettier@^0.0.1: chalk "^4.1.0" glob "^7.1.6" -hardhat@^2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.1.tgz#9d7967dd360b9a217ac6b7d9ca7f5087db4db01d" - integrity sha512-7FoyfKjBs97GHNpQejHecJBBcRPOEhAE3VkjSWXB3GeeiXefWbw+zhRVOjI4eCsUUt7PyNFAdWje/lhnBT9fig== +hardhat@^2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.17.1.tgz#4b6c8c8f624fd23d9f40185a4af24815d05a486a" + integrity sha512-1PxRkfjhEzXs/wDxI5YgzYBxNmvzifBTjYzuopwel+vXpAhCudplusJthN5eig0FTs4qbi828DBIITEDh8x9LA== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0-rc.3" - "@nomicfoundation/ethereumjs-common" "^3.0.0-rc.3" - "@nomicfoundation/ethereumjs-evm" "^1.0.0-rc.3" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0-rc.3" - "@nomicfoundation/ethereumjs-trie" "^5.0.0-rc.3" - "@nomicfoundation/ethereumjs-tx" "^4.0.0-rc.3" - "@nomicfoundation/ethereumjs-util" "^8.0.0-rc.3" - "@nomicfoundation/ethereumjs-vm" "^6.0.0-rc.3" - "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" @@ -2792,7 +2892,6 @@ hardhat@^2.11.1: mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" @@ -2800,7 +2899,7 @@ hardhat@^2.11.1: source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.4.0" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" @@ -2831,6 +2930,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -2939,47 +3043,34 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -husky@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" - integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.2.1: +ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.1.1, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" + version "4.3.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" + integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== -import-fresh@^3.0.0: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -2987,16 +3078,6 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -3020,31 +3101,12 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -3060,6 +3122,15 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3087,20 +3158,20 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.5: +is-buffer@^2.0.5, is-buffer@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -3111,11 +3182,6 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3194,6 +3260,13 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3211,21 +3284,44 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + js-sha3@0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" @@ -3249,7 +3345,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0: +js-yaml@3.x: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -3257,7 +3353,7 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -3269,10 +3365,10 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -3289,11 +3385,6 @@ json-schema@0.4.0: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -3338,9 +3429,9 @@ jsprim@^1.2.2: verror "1.10.0" keccak@^3.0.0, keccak@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" @@ -3379,7 +3470,7 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== @@ -3387,6 +3478,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -3410,12 +3506,22 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3436,9 +3542,9 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" @@ -3449,21 +3555,28 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + markdown-table@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -3517,11 +3630,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.52.0" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -3532,18 +3640,44 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@3.0.4, minimatch@5.0.1, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + mkdirp@0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -3551,13 +3685,18 @@ mkdirp@0.5.5: dependencies: minimist "^1.2.5" -mkdirp@0.5.x, mkdirp@^0.5.1: +mkdirp@0.5.x: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -3596,11 +3735,10 @@ mocha@7.1.2: yargs-unparser "1.6.0" mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" @@ -3658,11 +3796,6 @@ module-error@^1.0.1, module-error@^1.0.2: resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -3678,45 +3811,21 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== - nanoid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -3737,20 +3846,22 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + dependencies: + whatwg-url "^5.0.0" -node-watch@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.3.tgz#6d4db88e39c8d09d3ea61d6568d80e5975abc7ab" - integrity sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ== +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== +node-watch@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.4.tgz#34557106948cd4b8ddff9aa3d284774004548824" + integrity sha512-RinNxoz4W1cep1b928fuFhvAQ5ag/+1UlMDV7rbyGthBIgsiEouS4kvRayvvboxii4m8eolKOIBo3OjDqbc+uQ== nofilter@^3.1.0: version "3.1.0" @@ -3787,10 +3898,10 @@ object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.0.11, object-keys@^1.1.1: version "1.1.1" @@ -3818,14 +3929,15 @@ object.assign@^4.1.4: object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + version "2.1.6" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" + integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== dependencies: - array.prototype.reduce "^1.0.4" + array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" + define-properties "^1.2.0" + es-abstract "^1.21.2" + safe-array-concat "^1.0.0" obliterator@^2.0.0: version "2.0.4" @@ -3839,14 +3951,7 @@ once@1.x, once@^1.3.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -3939,13 +4044,15 @@ parse-cache-control@^1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: + "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" path-exists@^3.0.0: version "3.0.0" @@ -3962,25 +4069,15 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-starts-with@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.0.tgz#ffd6d51926cd497022b44d392196033d5451892f" - integrity sha512-3UHTHbJz5+NLkPafFR+2ycJOjoc4WV2e9qCZCnm71zHiWaFrm1XniLVTkZXvaRgxr1xFh9JsTdicpH2yM03nLA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.1.tgz#cd8b6213c141a9f2dd86c748310acdfa6493abb1" + integrity sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg== path-type@^4.0.0: version "4.0.0" @@ -4018,47 +4115,44 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prettier-plugin-solidity@^1.0.0-beta.24: - version "1.0.0-beta.24" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.24.tgz#67573ca87098c14f7ccff3639ddd8a4cab2a87eb" - integrity sha512-6JlV5BBTWzmDSq4kZ9PTXc3eLOX7DF5HpbqmmaF+kloyUwOZbJ12hIYsUaZh2fVgZdV2t0vWcvY6qhILhlzgqg== +prettier-plugin-solidity@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== dependencies: - "@solidity-parser/parser" "^0.14.3" - emoji-regex "^10.1.0" - escape-string-regexp "^4.0.0" - semver "^7.3.7" + "@solidity-parser/parser" "^0.16.0" + semver "^7.3.8" solidity-comments-extractor "^0.0.7" - string-width "^4.2.3" -prettier@^1.14.3: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.3.1, prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.1.tgz#65271fc9320ce4913c57747a70ce635b30beaa40" + integrity sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -4071,25 +4165,25 @@ proper-lockfile@^4.1.1: retry "^0.12.0" signal-exit "^3.0.2" -psl@^1.1.33: +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.28: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@^6.4.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" @@ -4098,11 +4192,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -4116,9 +4205,9 @@ randombytes@^2.1.0: safe-buffer "^5.1.0" raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -4126,9 +4215,9 @@ raw-body@^2.4.1: unpipe "1.0.0" readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -4139,9 +4228,9 @@ readable-stream@^2.2.2: util-deprecate "~1.0.1" readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -4169,25 +4258,25 @@ rechoir@^0.6.2: resolve "^1.1.6" recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== dependencies: - minimatch "3.0.4" + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + define-properties "^1.2.0" + functions-have-names "^1.2.3" req-cwd@^2.0.0: version "2.0.0" @@ -4260,11 +4349,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -4288,21 +4372,18 @@ resolve@1.17.0: path-parse "^1.0.6" resolve@^1.1.6: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== retry@^0.12.0: version "0.12.0" @@ -4314,13 +4395,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.2.8, rimraf@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -4343,11 +4417,6 @@ rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" @@ -4367,12 +4436,15 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== dependencies: - tslib "^1.9.0" + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" @@ -4384,6 +4456,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -4428,10 +4509,29 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -semver@^5.5.0, semver@^5.5.1, semver@^5.7.0, semver@^5.7.2, semver@^6.3.0, semver@^7.3.4, semver@^7.3.7: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@^5.5.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.4: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.8, semver@^7.5.2: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" serialize-javascript@6.0.0: version "6.0.0" @@ -4476,18 +4576,6 @@ sha1@^1.1.1: charenc ">= 0.0.1" crypt ">= 0.0.1" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - shelljs@^0.8.3: version "0.8.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" @@ -4516,15 +4604,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -4549,45 +4628,48 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solhint@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" - integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== +solhint@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.5.1.tgz#3cf47c173f1a223770c3bef719122d6d2d157371" + integrity sha512-29+vUIwUmsasKuIzCYOqiKlu4We7+BVYNuoKmDMWsmjfPDoJQpM65eBzYuqEr18lwvXpQAbjTGdzvm4iZIO9Uw== dependencies: - "@solidity-parser/parser" "^0.14.1" - ajv "^6.6.1" - antlr4 "4.7.1" - ast-parents "0.0.1" - chalk "^2.4.2" - commander "2.18.0" - cosmiconfig "^5.0.7" - eslint "^5.6.0" - fast-diff "^1.1.2" - glob "^7.1.3" - ignore "^4.0.6" - js-yaml "^3.12.0" - lodash "^4.17.11" - semver "^6.3.0" + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" optionalDependencies: - prettier "^1.14.3" + prettier "^2.8.3" -solidity-ast@^0.4.15: - version "0.4.35" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.35.tgz#82e064b14dc989338123264bde2235cad751f128" - integrity sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA== +solidity-ast@^0.4.26: + version "0.4.49" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.49.tgz#ecba89d10c0067845b7848c3a3e8cc61a4fc5b82" + integrity sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ== solidity-comments-extractor@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== -solidity-coverage@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.2.tgz#bc39604ab7ce0a3fa7767b126b44191830c07813" - integrity sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ== +solidity-coverage@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.4.tgz#c57a21979f5e86859c5198de9fbae2d3bc6324a5" + integrity sha512-xeHOfBOjdMF6hWTbt42iH4x+7j1Atmrf5OldDPMxI+i/COdExUxszOswD9qqvcBTaLGiOrrpnh9UZjSpt4rBsg== dependencies: "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.14.1" + "@solidity-parser/parser" "^0.16.0" chalk "^2.4.2" death "^1.1.0" detect-port "^1.3.0" @@ -4669,7 +4751,12 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +"string-width@^1.0.2 || 2", string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4695,23 +4782,32 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" string_decoder@^1.1.1: version "1.3.0" @@ -4755,7 +4851,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1, strip-json-comments@^2.0.1: +strip-json-comments@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== @@ -4821,20 +4917,20 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" -table@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== +table@^6.8.0, table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -4864,12 +4960,7 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tmp@0.0.33, tmp@^0.0.33: +tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -4888,21 +4979,63 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^2.3.3, tough-cookie@^4.1.3, tough-cookie@~2.5.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: - psl "^1.1.33" + psl "^1.1.28" punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" -tslib@^1.9.0, tslib@^1.9.3: +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@^1.11.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.1, tslib@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -4952,20 +5085,85 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +typechain@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.1.tgz#dccbc839b94877997536c356380eff7325395cfb" + integrity sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== +typescript@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.17.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" - integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" @@ -4977,23 +5175,23 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici@^5.22.1, undici@^5.4.0: - version "5.22.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" - integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== +undici@^5.14.0: + version "5.23.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.23.0.tgz#e7bdb0ed42cebe7b7aca87ced53e6eaafb8f8ca0" + integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== dependencies: busboy "^1.6.0" +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -5011,14 +5209,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - utf8@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -5044,6 +5234,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5054,9 +5249,9 @@ verror@1.10.0: extsprintf "^1.2.0" web3-utils@^1.3.6: - version "1.8.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.1.tgz#f2f7ca7eb65e6feb9f3d61056d0de6bbd57125ff" - integrity sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" + integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== dependencies: bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" @@ -5066,6 +5261,19 @@ web3-utils@^1.3.6: randombytes "^2.1.0" utf8 "3.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5078,11 +5286,22 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.10, which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" -which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.1.1, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -5096,7 +5315,7 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" -word-wrap@^1.2.4, word-wrap@~1.2.3: +word-wrap@~1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== @@ -5106,6 +5325,14 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -5134,13 +5361,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" @@ -5171,6 +5391,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -5237,12 +5462,12 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zksync-web3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.8.1.tgz#db289d8f6caf61f4d5ddc471fa3448d93208dc14" - integrity sha512-1A4aHPQ3MyuGjpv5X/8pVEN+MdZqMjfVmiweQSRjOlklXYu65wT9BGEOtCmMs5d3gIvLp4ssfTeuR5OCKOD2kw==