From b959c4b642ca5099d037f53464be1269071216d8 Mon Sep 17 00:00:00 2001 From: Van0k Date: Tue, 26 Nov 2024 09:45:58 +0400 Subject: [PATCH] feat: replace Tokens enum with uint256 (#294) --- contracts/test/config/MockCreditConfig.sol | 28 +- contracts/test/config/MockTokensData.sol | 36 +- .../test/gas/credit/CreditFacade.gas.t.sol | 254 +- contracts/test/helpers/BalanceHelper.sol | 14 +- .../test/helpers/IntegrationTestHelper.sol | 22 +- .../credit/CloseCreditAccount.int.sol | 10 +- .../credit/CreditConfigurator.int.t.sol | 42 +- .../integration/credit/ManageDebt.int.t.sol | 18 +- .../integration/credit/Multicall.int.t.sol | 60 +- .../credit/OpenCreditAccount.int.t.sol | 20 +- .../test/integration/credit/Quotas.int.t.sol | 128 +- contracts/test/interfaces/ICreditConfig.sol | 28 +- contracts/test/interfaces/ITokenTestSuite.sol | 19 - contracts/test/suites/TokensTestSuite.sol | 46 +- .../unit/credit/CreditFacadeV3.unit.t.sol | 106 +- .../unit/credit/CreditManagerV3.unit.t.sol | 126 +- .../test/unit/governance/GaugeV3.unit.t.sol | 4 +- .../unit/governance/GearStakingV3.unit.t.sol | 4 +- .../unit/libraries/CollateralLogic.unit.t.sol | 284 ++- .../unit/libraries/CollateralLogicHelper.sol | 76 +- .../libraries/CreditAccountHelper.unit.t.sol | 8 +- .../test/unit/pool/PoolEquivalence.t.sol | 5 +- .../unit/pool/PoolQuotaKeeperV3.unit.t.sol | 14 +- contracts/test/unit/pool/PoolV3.unit.t.sol | 2 +- lib/forge-std | 2 +- package.json | 2 +- yarn.lock | 2195 +---------------- 27 files changed, 771 insertions(+), 2782 deletions(-) diff --git a/contracts/test/config/MockCreditConfig.sol b/contracts/test/config/MockCreditConfig.sol index 231c1acc..5b1ea8a6 100644 --- a/contracts/test/config/MockCreditConfig.sol +++ b/contracts/test/config/MockCreditConfig.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.17; import {TokensTestSuite} from "../suites/TokensTestSuite.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {NetworkDetector} from "@gearbox-protocol/sdk-gov/contracts/NetworkDetector.sol"; import {Contracts} from "@gearbox-protocol/sdk-gov/contracts/SupportedContracts.sol"; import "forge-std/console.sol"; @@ -34,7 +34,7 @@ contract MockCreditConfig is Test, IPoolV3DeployConfig { uint128 public maxDebt; uint256 public chainId; - Tokens public underlying; + uint256 public underlying; bool public constant supportsQuotas = true; PoolV3DeployParams _poolParams; @@ -53,7 +53,7 @@ contract MockCreditConfig is Test, IPoolV3DeployConfig { PoolQuotaLimit[] _quotaLimits; CreditManagerV3DeployParams[] _creditManagers; - constructor(TokensTestSuite tokenTestSuite_, Tokens _underlying) { + constructor(TokensTestSuite tokenTestSuite_, uint256 _underlying) { NetworkDetector nd = new NetworkDetector(); chainId = nd.chainId(); @@ -90,16 +90,16 @@ contract MockCreditConfig is Test, IPoolV3DeployConfig { pushCollateralToken(_underlying, cp.collateralTokens); } - function pushCollateralToken(Tokens _underlying, CollateralTokenHuman[] storage cth) private { + function pushCollateralToken(uint256 _underlying, CollateralTokenHuman[] storage cth) private { CollateralTokenHuman[8] memory collateralTokenOpts = [ - CollateralTokenHuman({token: Tokens.USDC, lt: 90_00}), - CollateralTokenHuman({token: Tokens.USDT, lt: 88_00}), - CollateralTokenHuman({token: Tokens.DAI, lt: 83_00}), - CollateralTokenHuman({token: Tokens.WETH, lt: 83_00}), - CollateralTokenHuman({token: Tokens.LINK, lt: 73_00}), - CollateralTokenHuman({token: Tokens.CRV, lt: 73_00}), - CollateralTokenHuman({token: Tokens.CVX, lt: 73_00}), - CollateralTokenHuman({token: Tokens.STETH, lt: 73_00}) + CollateralTokenHuman({token: TOKEN_USDC, lt: 90_00}), + CollateralTokenHuman({token: TOKEN_USDT, lt: 88_00}), + CollateralTokenHuman({token: TOKEN_DAI, lt: 83_00}), + CollateralTokenHuman({token: TOKEN_WETH, lt: 83_00}), + CollateralTokenHuman({token: TOKEN_LINK, lt: 73_00}), + CollateralTokenHuman({token: TOKEN_CRV, lt: 73_00}), + CollateralTokenHuman({token: TOKEN_CVX, lt: 73_00}), + CollateralTokenHuman({token: TOKEN_STETH, lt: 73_00}) ]; uint256 len = collateralTokenOpts.length; @@ -111,9 +111,9 @@ contract MockCreditConfig is Test, IPoolV3DeployConfig { } function getAccountAmount() public view override returns (uint256) { - return (underlying == Tokens.DAI) + return (underlying == TOKEN_DAI) ? DAI_ACCOUNT_AMOUNT - : (underlying == Tokens.USDC) ? USDC_ACCOUNT_AMOUNT : WETH_ACCOUNT_AMOUNT; + : (underlying == TOKEN_USDC) ? USDC_ACCOUNT_AMOUNT : WETH_ACCOUNT_AMOUNT; } // GETTERS diff --git a/contracts/test/config/MockTokensData.sol b/contracts/test/config/MockTokensData.sol index fb3c8c45..bf76a16d 100644 --- a/contracts/test/config/MockTokensData.sol +++ b/contracts/test/config/MockTokensData.sol @@ -3,52 +3,46 @@ // (c) Gearbox Foundation, 2023. pragma solidity ^0.8.17; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import "../lib/constants.sol"; struct MockToken { - Tokens index; + uint256 index; string symbol; uint8 decimals; int256 price; - Tokens underlying; + uint256 underlying; } library MockTokensData { function getTokenData() internal pure returns (MockToken[] memory result) { MockToken[9] memory testTokensData = [ - MockToken({index: Tokens.DAI, symbol: "DAI", decimals: 18, price: 10 ** 8, underlying: Tokens.NO_TOKEN}), - MockToken({index: Tokens.USDC, symbol: "USDC", decimals: 6, price: 10 ** 8, underlying: Tokens.NO_TOKEN}), + MockToken({index: TOKEN_DAI, symbol: "DAI", decimals: 18, price: 10 ** 8, underlying: TOKEN_NO_TOKEN}), + MockToken({index: TOKEN_USDC, symbol: "USDC", decimals: 6, price: 10 ** 8, underlying: TOKEN_NO_TOKEN}), MockToken({ - index: Tokens.WETH, + index: TOKEN_WETH, symbol: "WETH", decimals: 18, price: int256(DAI_WETH_RATE) * 10 ** 8, - underlying: Tokens.NO_TOKEN + underlying: TOKEN_NO_TOKEN }), - MockToken({index: Tokens.LINK, symbol: "LINK", decimals: 18, price: 15 * 10 ** 8, underlying: Tokens.NO_TOKEN}), + MockToken({index: TOKEN_LINK, symbol: "LINK", decimals: 18, price: 15 * 10 ** 8, underlying: TOKEN_NO_TOKEN}), MockToken({ - index: Tokens.USDT, + index: TOKEN_USDT, symbol: "USDT", decimals: 18, price: 99 * 10 ** 7, // .99 for test purposes - underlying: Tokens.NO_TOKEN + underlying: TOKEN_NO_TOKEN }), + MockToken({index: TOKEN_STETH, symbol: "stETH", decimals: 18, price: 3300 * 10 ** 8, underlying: TOKEN_NO_TOKEN}), + MockToken({index: TOKEN_CRV, symbol: "CRV", decimals: 18, price: 14 * 10 ** 7, underlying: TOKEN_NO_TOKEN}), + MockToken({index: TOKEN_CVX, symbol: "CVX", decimals: 18, price: 7 * 10 ** 8, underlying: TOKEN_NO_TOKEN}), MockToken({ - index: Tokens.STETH, - symbol: "stETH", - decimals: 18, - price: 3300 * 10 ** 8, - underlying: Tokens.NO_TOKEN - }), - MockToken({index: Tokens.CRV, symbol: "CRV", decimals: 18, price: 14 * 10 ** 7, underlying: Tokens.NO_TOKEN}), - MockToken({index: Tokens.CVX, symbol: "CVX", decimals: 18, price: 7 * 10 ** 8, underlying: Tokens.NO_TOKEN}), - MockToken({ - index: Tokens.wstETH, + index: TOKEN_wstETH, symbol: "wstETH", decimals: 18, price: 3300 * 10 ** 8, - underlying: Tokens.NO_TOKEN + underlying: TOKEN_NO_TOKEN }) ]; diff --git a/contracts/test/gas/credit/CreditFacade.gas.t.sol b/contracts/test/gas/credit/CreditFacade.gas.t.sol index 56e74199..3a77116f 100644 --- a/contracts/test/gas/credit/CreditFacade.gas.t.sol +++ b/contracts/test/gas/credit/CreditFacade.gas.t.sol @@ -17,7 +17,7 @@ import {IntegrationTestHelper} from "../../helpers/IntegrationTestHelper.sol"; import {AdapterMock} from "../../mocks/core/AdapterMock.sol"; // SUITES -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; contract CreditFacadeGasTest is IntegrationTestHelper { function _zeroAllLTs() internal { @@ -49,8 +49,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -77,15 +77,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.USDC), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_USDC), "", false) + ) }) ); @@ -114,22 +114,22 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.USDC), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_USDC), "", false) + ) }), MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.USDC), tokenTestSuite.addressOf(Tokens.LINK), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_USDC), tokenTestSuite.addressOf(TOKEN_LINK), "", false) + ) }) ); @@ -149,25 +149,25 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-5]: openCreditAccount with adding quoted collateral and updating quota function test_G_FA_05_openCreditAccountMulticall_gas_estimate_4() public creditTest { vm.startPrank(CONFIGURATOR); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_LINK), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_LINK), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_LINK)); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.USDC), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.USDC), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.USDC)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_USDC), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_USDC), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_USDC)); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.WETH), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.WETH), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.WETH)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_WETH), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_WETH), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_WETH)); vm.warp(block.timestamp + 7 days); gauge.updateEpoch(); vm.stopPrank(); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -177,29 +177,29 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.WETH), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_WETH), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }) ); @@ -217,15 +217,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-6]: openCreditAccount with swapping and updating quota function test_G_FA_06_openCreditAccountMulticall_gas_estimate_5() public withAdapterMock creditTest { vm.startPrank(CONFIGURATOR); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_LINK), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_LINK), type(uint96).max); vm.warp(block.timestamp + 7 days); gauge.updateEpoch(); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_LINK)); vm.stopPrank(); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -235,22 +235,22 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }), MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.LINK), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_LINK), "", false) + ) }) ); @@ -279,8 +279,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -319,8 +319,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -350,16 +350,16 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-9]: multicall with decreaseDebt and active quota interest function test_G_FA_09_decreaseDebt_gas_estimate_2() public creditTest { vm.startPrank(CONFIGURATOR); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_LINK), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_LINK), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_LINK)); vm.warp(block.timestamp + 7 days); gauge.updateEpoch(); vm.stopPrank(); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -369,15 +369,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }) ); @@ -392,8 +392,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }), MultiCall({ target: address(creditFacade), @@ -424,8 +424,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -435,7 +435,7 @@ contract CreditFacadeGasTest is IntegrationTestHelper { calls = MultiCallBuilder.build( MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeV3Multicall.enableToken, (tokenTestSuite.addressOf(Tokens.LINK))) + callData: abi.encodeCall(ICreditFacadeV3Multicall.enableToken, (tokenTestSuite.addressOf(TOKEN_LINK))) }) ); @@ -462,12 +462,12 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeV3Multicall.enableToken, (tokenTestSuite.addressOf(Tokens.LINK))) + callData: abi.encodeCall(ICreditFacadeV3Multicall.enableToken, (tokenTestSuite.addressOf(TOKEN_LINK))) }) ); @@ -477,7 +477,7 @@ contract CreditFacadeGasTest is IntegrationTestHelper { calls = MultiCallBuilder.build( MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeV3Multicall.disableToken, (tokenTestSuite.addressOf(Tokens.LINK))) + callData: abi.encodeCall(ICreditFacadeV3Multicall.disableToken, (tokenTestSuite.addressOf(TOKEN_LINK))) }) ); @@ -504,8 +504,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -517,8 +517,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.LINK), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_LINK), "", false) + ) }) ); @@ -545,8 +545,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -558,15 +558,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.LINK), "", false) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_LINK), "", false) + ) }), MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.LINK), tokenTestSuite.addressOf(Tokens.USDC), "", true) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), tokenTestSuite.addressOf(TOKEN_USDC), "", true) + ) }) ); @@ -584,9 +584,9 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-13]: multicall with a single swap into quoted token function test_G_FA_13_multicall_gas_estimate_2() public withAdapterMock creditTest { vm.startPrank(CONFIGURATOR); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_LINK), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_LINK), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_LINK)); vm.warp(block.timestamp + 7 days); gauge.updateEpoch(); @@ -602,31 +602,31 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); vm.prank(USER); address creditAccount = creditFacade.openCreditAccount(USER, calls, 0); - tokenTestSuite.burn(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); - tokenTestSuite.mint(Tokens.LINK, creditAccount, LINK_ACCOUNT_AMOUNT * 3); + tokenTestSuite.burn(TOKEN_DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + tokenTestSuite.mint(TOKEN_LINK, creditAccount, LINK_ACCOUNT_AMOUNT * 3); calls = MultiCallBuilder.build( MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.DAI), tokenTestSuite.addressOf(Tokens.LINK), "", true) - ) + (tokenTestSuite.addressOf(TOKEN_DAI), tokenTestSuite.addressOf(TOKEN_LINK), "", true) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT * 3)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT * 3)), 0) + ) }) ); @@ -655,8 +655,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -675,7 +675,7 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (underlying, type(uint256).max, USER) - ) + ) }) ) ); @@ -698,8 +698,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -722,7 +722,7 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (underlying, type(uint256).max, USER) - ) + ) }) ) ); @@ -736,8 +736,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-16]: closeCreditAccount with debt and two tokens function test_G_FA_16_closeCreditAccount_gas_estimate_3() public creditTest { tokenTestSuite.mint(underlying, USER, DAI_ACCOUNT_AMOUNT); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -747,14 +747,14 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }) ); @@ -763,7 +763,7 @@ contract CreditFacadeGasTest is IntegrationTestHelper { vm.roll(block.number + 1); - address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + address linkToken = tokenTestSuite.addressOf(TOKEN_LINK); uint256 gasBefore = gasleft(); @@ -779,13 +779,13 @@ contract CreditFacadeGasTest is IntegrationTestHelper { target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (underlying, type(uint256).max, USER) - ) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (linkToken, type(uint256).max, USER) - ) + ) }) ) ); @@ -808,8 +808,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -818,15 +818,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { vm.roll(block.number + 1); - address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + address linkToken = tokenTestSuite.addressOf(TOKEN_LINK); calls = MultiCallBuilder.build( MultiCall({ target: address(adapterMock), callData: abi.encodeCall( AdapterMock.executeSwapSafeApprove, - (tokenTestSuite.addressOf(Tokens.LINK), tokenTestSuite.addressOf(Tokens.DAI), "", true) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), tokenTestSuite.addressOf(TOKEN_DAI), "", true) + ) }), MultiCall({ target: address(creditFacade), @@ -865,8 +865,8 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }) ); @@ -891,11 +891,11 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-19]: liquidateCreditAccount with two tokens function test_G_FA_19_liquidateCreditAccount_gas_estimate_2() public creditTest { tokenTestSuite.mint(underlying, USER, DAI_ACCOUNT_AMOUNT); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); - tokenTestSuite.mint(Tokens.DAI, FRIEND, DAI_ACCOUNT_AMOUNT * 100); - tokenTestSuite.approve(Tokens.DAI, FRIEND, address(creditManager)); + tokenTestSuite.mint(TOKEN_DAI, FRIEND, DAI_ACCOUNT_AMOUNT * 100); + tokenTestSuite.approve(TOKEN_DAI, FRIEND, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -905,14 +905,14 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }) ); @@ -937,19 +937,19 @@ contract CreditFacadeGasTest is IntegrationTestHelper { /// @dev G:[FA-20]: liquidateCreditAccount with 2 tokens and active quota interest function test_G_FA_20_liquidateCreditAccount_gas_estimate_3() public creditTest { vm.startPrank(CONFIGURATOR); - gauge.addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500, 500); - poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); - creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); + gauge.addQuotaToken(tokenTestSuite.addressOf(TOKEN_LINK), 500, 500); + poolQuotaKeeper.setTokenLimit(tokenTestSuite.addressOf(TOKEN_LINK), type(uint96).max); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(TOKEN_LINK)); vm.warp(block.timestamp + 7 days); gauge.updateEpoch(); vm.stopPrank(); - tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_LINK, USER, LINK_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); - tokenTestSuite.mint(Tokens.DAI, FRIEND, DAI_ACCOUNT_AMOUNT * 100); - tokenTestSuite.approve(Tokens.DAI, FRIEND, address(creditManager)); + tokenTestSuite.mint(TOKEN_DAI, FRIEND, DAI_ACCOUNT_AMOUNT * 100); + tokenTestSuite.approve(TOKEN_DAI, FRIEND, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -959,15 +959,15 @@ contract CreditFacadeGasTest is IntegrationTestHelper { MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.LINK), LINK_ACCOUNT_AMOUNT) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_LINK), LINK_ACCOUNT_AMOUNT) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(int256(LINK_ACCOUNT_AMOUNT)), 0) + ) }) ); diff --git a/contracts/test/helpers/BalanceHelper.sol b/contracts/test/helpers/BalanceHelper.sol index de62aca8..7228a8d7 100644 --- a/contracts/test/helpers/BalanceHelper.sol +++ b/contracts/test/helpers/BalanceHelper.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.17; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {TokensTestSuite} from "../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {BalanceEngine} from "./BalanceEngine.sol"; import "forge-std/Vm.sol"; @@ -149,18 +149,18 @@ contract BalanceHelper is BalanceEngine { _; } - function expectBalance(Tokens t, address holder, uint256 expectedBalance) internal withTokenSuite { + function expectBalance(uint256 t, address holder, uint256 expectedBalance) internal withTokenSuite { expectBalance(t, holder, expectedBalance, ""); } - function expectBalance(Tokens t, address holder, uint256 expectedBalance, string memory reason) + function expectBalance(uint256 t, address holder, uint256 expectedBalance, string memory reason) internal withTokenSuite { expectBalance(tokenTestSuite.addressOf(t), holder, expectedBalance, reason); } - function expectBalanceGe(Tokens t, address holder, uint256 minBalance, string memory reason) + function expectBalanceGe(uint256 t, address holder, uint256 minBalance, string memory reason) internal withTokenSuite { @@ -169,21 +169,21 @@ contract BalanceHelper is BalanceEngine { expectBalanceGe(tokenTestSuite.addressOf(t), holder, minBalance, reason); } - function expectBalanceLe(Tokens t, address holder, uint256 maxBalance, string memory reason) + function expectBalanceLe(uint256 t, address holder, uint256 maxBalance, string memory reason) internal withTokenSuite { expectBalanceLe(tokenTestSuite.addressOf(t), holder, maxBalance, reason); } - function expectAllowance(Tokens t, address owner, address spender, uint256 expectedAllowance) + function expectAllowance(uint256 t, address owner, address spender, uint256 expectedAllowance) internal withTokenSuite { expectAllowance(t, owner, spender, expectedAllowance, ""); } - function expectAllowance(Tokens t, address owner, address spender, uint256 expectedAllowance, string memory reason) + function expectAllowance(uint256 t, address owner, address spender, uint256 expectedAllowance, string memory reason) internal withTokenSuite { diff --git a/contracts/test/helpers/IntegrationTestHelper.sol b/contracts/test/helpers/IntegrationTestHelper.sol index 91f18d0f..3356ab6e 100644 --- a/contracts/test/helpers/IntegrationTestHelper.sol +++ b/contracts/test/helpers/IntegrationTestHelper.sol @@ -37,7 +37,7 @@ import {MockCreditConfig} from "../config/MockCreditConfig.sol"; import {TestHelper} from "../lib/helper.sol"; import {ERC20Mock} from "../mocks/token/ERC20Mock.sol"; import "../lib/constants.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {PriceFeedMock} from "../mocks/oracles/PriceFeedMock.sol"; import {BalanceHelper} from "./BalanceHelper.sol"; import {BotListV3} from "../../core/BotListV3.sol"; @@ -83,7 +83,7 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { address public weth; bool public anyUnderlying = true; - Tokens public underlyingT = Tokens.DAI; + uint256 public underlyingT = TOKEN_DAI; address public underlying; @@ -177,7 +177,7 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { _; } - modifier withUnderlying(Tokens t) { + modifier withUnderlying(uint256 t) { anyUnderlying = false; underlyingT = t; _; @@ -261,7 +261,7 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { vm.deal(address(this), 100 * WAD); tokenTestSuite.topUpWETH{value: 100 * WAD}(); - weth = tokenTestSuite.addressOf(Tokens.WETH); + weth = tokenTestSuite.addressOf(TOKEN_WETH); vm.startPrank(CONFIGURATOR); GenesisFactory gp = new GenesisFactory(weth, DUMB_ADDRESS, accountFactoryVersion); @@ -631,15 +631,17 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { } } - function expectTokenIsEnabled(address creditAccount, Tokens t, bool expectedState) internal { + function expectTokenIsEnabled(address creditAccount, uint256 t, bool expectedState) internal { expectTokenIsEnabled(creditAccount, t, expectedState, ""); } - function expectTokenIsEnabled(address creditAccount, Tokens t, bool expectedState, string memory reason) internal { + function expectTokenIsEnabled(address creditAccount, uint256 t, bool expectedState, string memory reason) + internal + { expectTokenIsEnabled(creditAccount, tokenTestSuite.addressOf(t), expectedState, reason); } - function addCollateral(Tokens t, uint256 amount) internal { + function addCollateral(uint256 t, uint256 amount) internal { tokenTestSuite.mint(t, USER, amount); tokenTestSuite.approve(t, USER, address(creditManager)); @@ -654,7 +656,7 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { } function _checkForWETHTest(address tester) internal { - expectBalance(Tokens.WETH, tester, WETH_TEST_AMOUNT); + expectBalance(TOKEN_WETH, tester, WETH_TEST_AMOUNT); expectEthBalance(tester, 0); } @@ -669,10 +671,10 @@ contract IntegrationTestHelper is TestHelper, BalanceHelper, ConfigManager { IWETH(weth).deposit{value: tester.balance}(); } - IERC20(weth).transfer(address(this), tokenTestSuite.balanceOf(Tokens.WETH, tester)); + IERC20(weth).transfer(address(this), tokenTestSuite.balanceOf(TOKEN_WETH, tester)); vm.stopPrank(); - expectBalance(Tokens.WETH, tester, 0); + expectBalance(TOKEN_WETH, tester, 0); vm.deal(tester, WETH_TEST_AMOUNT); } diff --git a/contracts/test/integration/credit/CloseCreditAccount.int.sol b/contracts/test/integration/credit/CloseCreditAccount.int.sol index e236f5f5..dfdd6016 100644 --- a/contracts/test/integration/credit/CloseCreditAccount.int.sol +++ b/contracts/test/integration/credit/CloseCreditAccount.int.sol @@ -43,7 +43,7 @@ import {GeneralMock} from "../../mocks/GeneralMock.sol"; // SUITES -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {IPoolV3} from "../../../interfaces/IPoolV3.sol"; @@ -98,8 +98,8 @@ contract CloseCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFaca MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT / 2) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT / 2) + ) }) ); @@ -215,7 +215,7 @@ contract CloseCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFaca withAccountFactoryV1 creditTest { - address daiToken = tokenTestSuite.addressOf(Tokens.DAI); + address daiToken = tokenTestSuite.addressOf(TOKEN_DAI); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ target: address(creditFacade), @@ -248,7 +248,7 @@ contract CloseCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFaca target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (daiToken, type(uint256).max, USER) - ) + ) }) ) ); diff --git a/contracts/test/integration/credit/CreditConfigurator.int.t.sol b/contracts/test/integration/credit/CreditConfigurator.int.t.sol index 6907128a..29dc9cf3 100644 --- a/contracts/test/integration/credit/CreditConfigurator.int.t.sol +++ b/contracts/test/integration/credit/CreditConfigurator.int.t.sol @@ -37,7 +37,7 @@ import {IntegrationTestHelper} from "../../helpers/IntegrationTestHelper.sol"; // SUITES import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {MockCreditConfig, CollateralTokenHuman} from "../../config/MockCreditConfig.sol"; @@ -190,14 +190,14 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf assertEq(address(creditConfigurator.addressProvider()), address(addressProvider), "Incorrect address provider"); CollateralTokenHuman[8] memory collateralTokenOpts = [ - CollateralTokenHuman({token: Tokens.DAI, lt: DEFAULT_UNDERLYING_LT}), - CollateralTokenHuman({token: Tokens.USDC, lt: 9000}), - CollateralTokenHuman({token: Tokens.USDT, lt: 8800}), - CollateralTokenHuman({token: Tokens.WETH, lt: 8300}), - CollateralTokenHuman({token: Tokens.LINK, lt: 7300}), - CollateralTokenHuman({token: Tokens.CRV, lt: 7300}), - CollateralTokenHuman({token: Tokens.CVX, lt: 7300}), - CollateralTokenHuman({token: Tokens.STETH, lt: 7300}) + CollateralTokenHuman({token: TOKEN_DAI, lt: DEFAULT_UNDERLYING_LT}), + CollateralTokenHuman({token: TOKEN_USDC, lt: 9000}), + CollateralTokenHuman({token: TOKEN_USDT, lt: 8800}), + CollateralTokenHuman({token: TOKEN_WETH, lt: 8300}), + CollateralTokenHuman({token: TOKEN_LINK, lt: 7300}), + CollateralTokenHuman({token: TOKEN_CRV, lt: 7300}), + CollateralTokenHuman({token: TOKEN_CVX, lt: 7300}), + CollateralTokenHuman({token: TOKEN_STETH, lt: 7300}) ]; uint256 len = collateralTokenOpts.length; @@ -248,7 +248,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf creditFacade = new CreditFacadeV3(address(creditManager), creditOpts.degenNFT, creditOpts.expirable); address priceOracleAddress = address(creditManager.priceOracle()); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); bytes memory configuratorByteCode = abi.encodePacked( type(CreditConfiguratorV3).creationCode, abi.encode(creditManager, creditFacade, creditOpts) @@ -397,7 +397,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf function test_I_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt() public creditTest { uint256 tokensCountBefore = creditManager.collateralTokensCount(); - address newToken = tokenTestSuite.addressOf(Tokens.wstETH); + address newToken = tokenTestSuite.addressOf(TOKEN_wstETH); vm.expectEmit(true, false, false, false); emit AddCollateralToken(newToken); @@ -426,7 +426,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf vm.expectRevert(TokenNotAllowedException.selector); creditConfigurator.setLiquidationThreshold(underlying, 1); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); uint16 maxAllowedLT = creditManager.liquidationThresholds(underlying); vm.expectRevert(IncorrectLiquidationThresholdException.selector); @@ -437,7 +437,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf /// @dev I:[CC-6]: setLiquidationThreshold sets liquidation threshold in creditManager function test_I_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager() public creditTest { - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); uint16 newLT = 24; vm.expectEmit(true, false, false, true); @@ -470,7 +470,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf /// @dev I:[CC-8]: allowToken works correctly function test_I_CC_08_allowToken_works_correctly() public creditTest { - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); uint256 forbiddenMask = creditFacade.forbiddenTokenMask(); vm.prank(CONFIGURATOR); @@ -492,7 +492,7 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf /// @dev I:[CC-9]: forbidToken works correctly function test_I_CC_09_forbidToken_works_correctly() public creditTest { - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); vm.expectEmit(true, false, false, false); @@ -757,8 +757,8 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf (uint16 feeInterest,,,,) = creditManager.fees(); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); - address wethToken = tokenTestSuite.addressOf(Tokens.WETH); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); + address wethToken = tokenTestSuite.addressOf(TOKEN_WETH); creditConfigurator.setLiquidationThreshold(usdcToken, creditManager.liquidationThresholds(underlying)); uint256 expectedLT = PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM - 2 * DEFAULT_FEE_LIQUIDATION; @@ -989,9 +989,9 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS2); - address crvToken = tokenTestSuite.addressOf(Tokens.CRV); + address crvToken = tokenTestSuite.addressOf(TOKEN_CRV); uint256 crvMask = creditManager.getTokenMaskOrRevert(crvToken); - address cvxToken = tokenTestSuite.addressOf(Tokens.CVX); + address cvxToken = tokenTestSuite.addressOf(TOKEN_CVX); uint256 cvxMask = creditManager.getTokenMaskOrRevert(cvxToken); creditConfigurator.forbidToken(crvToken); @@ -1211,8 +1211,8 @@ contract CreditConfiguratorIntegrationTest is IntegrationTestHelper, ICreditConf /// @dev I:[CC-30] rampLiquidationThreshold works correctly function test_I_CC_30_rampLiquidationThreshold_works_correctly() public creditTest { - address dai = tokenTestSuite.addressOf(Tokens.DAI); - address usdc = tokenTestSuite.addressOf(Tokens.USDC); + address dai = tokenTestSuite.addressOf(TOKEN_DAI); + address usdc = tokenTestSuite.addressOf(TOKEN_USDC); vm.expectRevert(TokenNotAllowedException.selector); vm.prank(CONFIGURATOR); diff --git a/contracts/test/integration/credit/ManageDebt.int.t.sol b/contracts/test/integration/credit/ManageDebt.int.t.sol index cee823c3..858c14d9 100644 --- a/contracts/test/integration/credit/ManageDebt.int.t.sol +++ b/contracts/test/integration/credit/ManageDebt.int.t.sol @@ -15,7 +15,7 @@ import {MultiCallBuilder} from "../../lib/MultiCallBuilder.sol"; // TESTS import "../../lib/constants.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {IntegrationTestHelper} from "../../helpers/IntegrationTestHelper.sol"; // EXCEPTIONS @@ -72,7 +72,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.increaseDebt, (maxDebt * maxDebtPerBlockMultiplier + 1) - ) + ) }) ) ); @@ -87,7 +87,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event uint256 amount = maxDebt - DAI_ACCOUNT_AMOUNT + 1; - tokenTestSuite.mint(Tokens.DAI, address(pool), amount); + tokenTestSuite.mint(TOKEN_DAI, address(pool), amount); vm.expectRevert(BorrowAmountOutOfLimitsException.selector); @@ -130,7 +130,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event (address creditAccount,) = _openTestCreditAccount(); vm.roll(block.number + 1); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); vm.prank(USER); creditFacade.multicall( @@ -201,7 +201,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event uint256 amount = DAI_ACCOUNT_AMOUNT - minDebt + 1; - tokenTestSuite.mint(Tokens.DAI, address(pool), amount); + tokenTestSuite.mint(TOKEN_DAI, address(pool), amount); vm.expectRevert(BorrowAmountOutOfLimitsException.selector); @@ -219,7 +219,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event /// @dev I:[MD-8]: manageDebt correctly increases debt function test_I_MD_08_manageDebt_correctly_increases_debt(uint120 amount) public creditTest { - tokenTestSuite.mint(Tokens.DAI, INITIAL_LP, amount); + tokenTestSuite.mint(TOKEN_DAI, INITIAL_LP, amount); vm.assume(amount > 1); @@ -254,7 +254,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event // (uint256 debt,,,,,,,) = creditManager.creditAccountInfo(creditAccount); // assertEq(debt, newBorrowedAmount, "Incorrect debt"); - // expectBalance(Tokens.DAI, creditAccount, newBorrowedAmount, "Incorrect balance on credit account"); + // expectBalance(TOKEN_DAI, creditAccount, newBorrowedAmount, "Incorrect balance on credit account"); // assertEq(pool.lendAmount(), amount, "Incorrect lend amount"); @@ -263,7 +263,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event /// @dev I:[MD-9]: manageDebt correctly decreases debt function test_I_MD_09_manageDebt_correctly_decreases_debt(uint128 amount) public creditTest { - // tokenTestSuite.mint(Tokens.DAI, address(pool), (uint256(type(uint128).max) * 14) / 10); + // tokenTestSuite.mint(TOKEN_DAI, address(pool), (uint256(type(uint128).max) * 14) / 10); // (uint256 debt, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = // cft.openCreditAccount((uint256(type(uint128).max) * 14) / 10); @@ -306,7 +306,7 @@ contract ManegDebtIntegrationTest is IntegrationTestHelper, ICreditFacadeV3Event // assertEq(debt, newBorrowedAmount, "Incorrect debt"); // } - // expectBalance(Tokens.DAI, creditAccount, debt - amount, "Incorrect balance on credit account"); + // expectBalance(TOKEN_DAI, creditAccount, debt - amount, "Incorrect balance on credit account"); // if (amount >= totalDebt - debt) { // assertEq(cumulativeIndexLastUpdateAfter, cumulativeIndexNow, "Incorrect cumulativeIndexLastUpdate"); diff --git a/contracts/test/integration/credit/Multicall.int.t.sol b/contracts/test/integration/credit/Multicall.int.t.sol index 10d8183f..d26e6d25 100644 --- a/contracts/test/integration/credit/Multicall.int.t.sol +++ b/contracts/test/integration/credit/Multicall.int.t.sol @@ -31,7 +31,7 @@ import "../../../interfaces/IExceptions.sol"; import {AdapterMock} from "../../mocks//core/AdapterMock.sol"; // SUITES -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; /// @title CreditFacadeTest /// @notice Designed for unit test purposes only @@ -108,12 +108,12 @@ contract MultiCallIntegrationTest is function test_I_MC_05_addCollateral_executes_actions_as_expected() public creditTest { (address creditAccount,) = _openTestCreditAccount(); - expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, false); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); - tokenTestSuite.mint(Tokens.USDC, USER, 512); - tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_USDC, USER, 512); + tokenTestSuite.approve(TOKEN_USDC, USER, address(creditManager)); vm.expectCall( address(creditManager), @@ -135,8 +135,8 @@ contract MultiCallIntegrationTest is vm.prank(USER); creditFacade.multicall(creditAccount, calls); - expectBalance(Tokens.USDC, creditAccount, 512); - expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + expectBalance(TOKEN_USDC, creditAccount, 512); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, true); } /// @dev I:[MC-6]: multicall addCollateral and oncreaseDebt works with creditFacade calls as expected @@ -147,9 +147,9 @@ contract MultiCallIntegrationTest is (address creditAccount,) = _openTestCreditAccount(); vm.roll(block.number + 1); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); - tokenTestSuite.mint(Tokens.USDC, USER, USDC_EXCHANGE_AMOUNT); - tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); + tokenTestSuite.mint(TOKEN_USDC, USER, USDC_EXCHANGE_AMOUNT); + tokenTestSuite.approve(TOKEN_USDC, USER, address(creditManager)); uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); @@ -208,9 +208,9 @@ contract MultiCallIntegrationTest is (address creditAccount,) = _openTestCreditAccount(); vm.roll(block.number + 1); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); - tokenTestSuite.mint(Tokens.USDC, USER, USDC_EXCHANGE_AMOUNT); - tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); + tokenTestSuite.mint(TOKEN_USDC, USER, USDC_EXCHANGE_AMOUNT); + tokenTestSuite.approve(TOKEN_USDC, USER, address(creditManager)); uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); @@ -333,10 +333,10 @@ contract MultiCallIntegrationTest is function test_I_MC_10_enable_token_is_correct() public creditTest { (address creditAccount,) = _openTestCreditAccount(); - address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); - expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + address usdcToken = tokenTestSuite.addressOf(TOKEN_USDC); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, false); - tokenTestSuite.mint(Tokens.USDC, creditAccount, 100); + tokenTestSuite.mint(TOKEN_USDC, creditAccount, 100); vm.prank(USER); creditFacade.multicall( @@ -349,7 +349,7 @@ contract MultiCallIntegrationTest is ) ); - expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, true); } /// @dev I:[MC-11]: slippage check works correctly @@ -359,7 +359,7 @@ contract MultiCallIntegrationTest is uint256 expectedDAI = 1000; uint256 expectedLINK = 2000; - address tokenLINK = tokenTestSuite.addressOf(Tokens.LINK); + address tokenLINK = tokenTestSuite.addressOf(TOKEN_LINK); BalanceDelta[] memory expectedBalances = new BalanceDelta[](2); expectedBalances[0] = BalanceDelta({token: underlying, amount: int256(expectedDAI)}); @@ -367,11 +367,11 @@ contract MultiCallIntegrationTest is expectedBalances[1] = BalanceDelta({token: tokenLINK, amount: int256(expectedLINK)}); // TOKEN PREPARATION - tokenTestSuite.mint(Tokens.DAI, USER, expectedDAI * 3); - tokenTestSuite.mint(Tokens.LINK, USER, expectedLINK * 3); + tokenTestSuite.mint(TOKEN_DAI, USER, expectedDAI * 3); + tokenTestSuite.mint(TOKEN_LINK, USER, expectedLINK * 3); - tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); - tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + tokenTestSuite.approve(TOKEN_DAI, USER, address(creditManager)); + tokenTestSuite.approve(TOKEN_LINK, USER, address(creditManager)); vm.prank(USER); creditFacade.multicall( @@ -407,13 +407,13 @@ contract MultiCallIntegrationTest is target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.addCollateral, (underlying, (i == 0) ? expectedDAI - 1 : expectedDAI) - ) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.addCollateral, (tokenLINK, (i == 0) ? expectedLINK : expectedLINK - 1) - ) + ) }) ) ); @@ -466,9 +466,9 @@ contract MultiCallIntegrationTest is function test_I_MC_13_enableToken_works_as_expected() public creditTest { (address creditAccount,) = _openTestCreditAccount(); - address token = tokenTestSuite.addressOf(Tokens.USDC); + address token = tokenTestSuite.addressOf(TOKEN_USDC); - expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, false); vm.prank(USER); creditFacade.multicall( @@ -481,14 +481,14 @@ contract MultiCallIntegrationTest is ) ); - expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, true); } /// @dev I:[MC-14]: disableToken works as expected in a multicall function test_I_MC_14_disableToken_works_as_expected_multicall() public creditTest { (address creditAccount,) = _openTestCreditAccount(); - address token = tokenTestSuite.addressOf(Tokens.USDC); + address token = tokenTestSuite.addressOf(TOKEN_USDC); vm.prank(USER); creditFacade.multicall( @@ -514,7 +514,7 @@ contract MultiCallIntegrationTest is ) ); - expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + expectTokenIsEnabled(creditAccount, TOKEN_USDC, false); } // @@ -526,7 +526,7 @@ contract MultiCallIntegrationTest is (address creditAccount,) = _openTestCreditAccount(); uint256[] memory collateralHints = new uint256[](1); - collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(TOKEN_USDC)); uint256 enabledTokensMap = creditManager.enabledTokensMaskOf(creditAccount); diff --git a/contracts/test/integration/credit/OpenCreditAccount.int.t.sol b/contracts/test/integration/credit/OpenCreditAccount.int.t.sol index ef220e30..8ec4dbb2 100644 --- a/contracts/test/integration/credit/OpenCreditAccount.int.t.sol +++ b/contracts/test/integration/credit/OpenCreditAccount.int.t.sol @@ -29,7 +29,7 @@ import {IntegrationTestHelper} from "../../helpers/IntegrationTestHelper.sol"; import "../../lib/constants.sol"; // SUITES -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; @@ -51,8 +51,8 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad uint256 cumulativeAtOpen = pool.baseInterestIndex(); // pool.setCumulativeIndexNow(cumulativeAtOpen); - tokenTestSuite.mint(Tokens.DAI, USER, DAI_ACCOUNT_AMOUNT); - tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_DAI, USER, DAI_ACCOUNT_AMOUNT); + tokenTestSuite.approve(TOKEN_DAI, USER, address(creditManager)); MultiCall[] memory calls = MultiCallBuilder.build( MultiCall({ @@ -62,8 +62,8 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(Tokens.DAI), DAI_ACCOUNT_AMOUNT / 2) - ) + ICreditFacadeV3Multicall.addCollateral, (tokenTestSuite.addressOf(TOKEN_DAI), DAI_ACCOUNT_AMOUNT / 2) + ) }) ); @@ -80,7 +80,7 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad assertEq(ICreditAccount(creditAccount).since(), blockAtOpen, "Incorrect since set in CA"); - expectBalance(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT + DAI_ACCOUNT_AMOUNT / 2); + expectBalance(TOKEN_DAI, creditAccount, DAI_ACCOUNT_AMOUNT + DAI_ACCOUNT_AMOUNT / 2); // assertEq(pool.lendAmount(), DAI_ACCOUNT_AMOUNT, "Incorrect DAI_ACCOUNT_AMOUNT in Pool call"); // assertEq(pool.lendAccount(), creditAccount, "Incorrect credit account in lendCreditAccount call"); // assertEq(creditManager.creditAccounts(USER), creditAccount, "Credit account is not associated with user"); @@ -197,8 +197,8 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad revocations[0] = RevocationPair({spender: address(this), token: underlying}); - tokenTestSuite.mint(Tokens.DAI, USER, WAD); - tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); + tokenTestSuite.mint(TOKEN_DAI, USER, WAD); + tokenTestSuite.approve(TOKEN_DAI, USER, address(creditManager)); address expectedCreditAccountAddress = accountFactory.head(); @@ -265,7 +265,7 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad amount = bound(amount, 10000, DAI_ACCOUNT_AMOUNT); token1 = uint8(bound(token1, 1, creditManager.collateralTokensCount() - 1)); - tokenTestSuite.mint(Tokens.DAI, address(creditManager.pool()), type(uint96).max); + tokenTestSuite.mint(TOKEN_DAI, address(creditManager.pool()), type(uint96).max); vm.prank(CONFIGURATOR); creditConfigurator.setMaxDebtPerBlockMultiplier(type(uint8).max); @@ -381,7 +381,7 @@ contract OpenCreditAccountIntegrationTest is IntegrationTestHelper, ICreditFacad assertEq(ICreditAccount(creditAccount).since(), blockAtOpen, "Incorrect since set in CA"); - expectBalance(Tokens.DAI, creditAccount, 0); + expectBalance(TOKEN_DAI, creditAccount, 0); assertEq(creditManager.enabledTokensMaskOf(creditAccount), 0, "Incorrect enabled token mask"); } diff --git a/contracts/test/integration/credit/Quotas.int.t.sol b/contracts/test/integration/credit/Quotas.int.t.sol index ce702d5e..6e9e3588 100644 --- a/contracts/test/integration/credit/Quotas.int.t.sol +++ b/contracts/test/integration/credit/Quotas.int.t.sol @@ -30,7 +30,7 @@ import "../../lib/constants.sol"; // SUITES -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {IntegrationTestHelper} from "../../helpers/IntegrationTestHelper.sol"; @@ -52,19 +52,19 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-2]: setQuotedMask works correctly function test_I_CMQ_02_setQuotedMask_works_correctly() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500, uint96(1_000_000 * WAD)); - uint256 usdtMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)); - uint256 linkMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + uint256 usdtMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(TOKEN_USDT)); + uint256 linkMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(TOKEN_LINK)); assertEq(creditManager.quotedTokensMask(), usdtMask | linkMask, "New limited mask is incorrect"); } /// @dev I:[CMQ-3]: updateQuotas works correctly function test_I_CMQ_03_updateQuotas_works_correctly() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500, uint96(1_000_000 * WAD)); (address creditAccount,) = _openTestCreditAccount(); @@ -73,7 +73,7 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events assertEq(cumulativeQuotaInterest, 1, "SETUP: Cumulative quota interest was not updated correctly"); { - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); vm.expectRevert(CallerNotCreditFacadeException.selector); vm.prank(FRIEND); creditManager.updateQuota({ @@ -92,8 +92,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), 100_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), 100_000, 0) + ) }) ); @@ -101,14 +101,14 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events address(poolQuotaKeeper), abi.encodeCall( IPoolQuotaKeeperV3.updateQuota, - (creditAccount, tokenTestSuite.addressOf(Tokens.LINK), 100_000, 0, maxQuota) + (creditAccount, tokenTestSuite.addressOf(TOKEN_LINK), 100_000, 0, maxQuota) ) ); vm.prank(USER); creditFacade.multicall(creditAccount, calls); - expectTokenIsEnabled(creditAccount, tokenTestSuite.addressOf(Tokens.LINK), true, "Incorrect tokensToEnble"); + expectTokenIsEnabled(creditAccount, tokenTestSuite.addressOf(TOKEN_LINK), true, "Incorrect tokensToEnble"); vm.warp(block.timestamp + 365 days); @@ -116,15 +116,15 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), -100_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), -100_000, 0) + ) }) ); vm.prank(USER); creditFacade.multicall(creditAccount, calls); - expectTokenIsEnabled(creditAccount, tokenTestSuite.addressOf(Tokens.LINK), false, "Incorrect tokensToEnble"); + expectTokenIsEnabled(creditAccount, tokenTestSuite.addressOf(TOKEN_LINK), false, "Incorrect tokensToEnble"); (,, cumulativeQuotaInterest,,,,,) = creditManager.creditAccountInfo(creditAccount); @@ -134,7 +134,7 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events "Cumulative quota interest was not updated correctly" ); - address usdc = tokenTestSuite.addressOf(Tokens.USDC); + address usdc = tokenTestSuite.addressOf(TOKEN_USDC); calls = MultiCallBuilder.build( MultiCall({ @@ -150,8 +150,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-4]: Quotas are handled correctly on debt decrease: amount < quota interest case function test_I_CMQ_04_quotas_are_handled_correctly_at_repayment_partial_case() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500, uint96(1_000_000 * WAD)); (address creditAccount,) = _openTestCreditAccount(); vm.roll(block.timestamp + 1); @@ -160,14 +160,14 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), 100_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), 100_000, 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.USDT), 200_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_USDT), 200_000, 0) + ) }) ); @@ -211,8 +211,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-5]: Quotas are handled correctly on debt decrease: amount >= quota interest case function test_I_CMQ_05_quotas_are_handled_correctly_at_repayment_full_case() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 1000, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 1000, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500, uint96(1_000_000 * WAD)); (address creditAccount,) = _openTestCreditAccount(); vm.roll(block.timestamp + 1); @@ -221,14 +221,14 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), 100_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), 100_000, 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.USDT), 200_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_USDT), 200_000, 0) + ) }) ); @@ -262,8 +262,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-6]: Quotas are disabled on closing an account function test_I_CMQ_06_quotas_are_disabled_on_close_account_and_all_quota_fees_are_repaid() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 5_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 5_00, uint96(1_000_000 * WAD)); (address creditAccount,) = _openTestCreditAccount(); @@ -275,15 +275,15 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(uint96(100 * WAD)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(uint96(100 * WAD)), 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.USDT), int96(uint96(200 * WAD)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_USDT), int96(uint96(200 * WAD)), 0) + ) }) ); @@ -303,9 +303,9 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events uint256 expectedQuotasInterest = (100 * WAD * 10_00 / PERCENTAGE_FACTOR + 200 * WAD * 5_00 / PERCENTAGE_FACTOR) * (PERCENTAGE_FACTOR + feeInterest) / PERCENTAGE_FACTOR; - tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + tokenTestSuite.mint(TOKEN_DAI, creditAccount, borrowedAmount); - uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(pool)); + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(TOKEN_DAI, address(pool)); vm.startPrank(USER); creditFacade.closeCreditAccount( @@ -314,14 +314,14 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), type(int96).min, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), type(int96).min, 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.USDT), type(int96).min, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_USDT), type(int96).min, 0) + ) }), MultiCall({ target: address(creditFacade), @@ -331,21 +331,21 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, (underlying, type(uint256).max, USER) - ) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, - (tokenTestSuite.addressOf(Tokens.LINK), type(uint256).max, USER) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), type(uint256).max, USER) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.withdrawCollateral, - (tokenTestSuite.addressOf(Tokens.USDT), type(uint256).max, USER) - ) + (tokenTestSuite.addressOf(TOKEN_USDT), type(uint256).max, USER) + ) }) ) ); @@ -353,18 +353,18 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events vm.stopPrank(); expectBalance( - Tokens.DAI, + TOKEN_DAI, address(pool), poolBalanceBefore + borrowedAmount + interestAccured + expectedQuotasInterest, "Incorrect pool balance" ); (uint96 quota, uint192 cumulativeIndexLU) = - poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.LINK)); + poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(TOKEN_LINK)); assertEq(uint256(quota), 0, "Quota was not set to 0"); - (quota, cumulativeIndexLU) = poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.USDT)); + (quota, cumulativeIndexLU) = poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(TOKEN_USDT)); assertEq(uint256(quota), 0, "Quota was not set to 0"); } @@ -373,8 +373,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(100_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(100_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(100_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500, uint96(100_000 * WAD)); quotaLink = uint96(bound(quotaLink, 0, uint96(type(int96).max))); quotaUsdt = uint96(bound(quotaUsdt, 0, uint96(type(int96).max))); @@ -388,14 +388,14 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), int96(quotaLink), 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), int96(quotaLink), 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.USDT), int96(quotaUsdt), 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_USDT), int96(quotaUsdt), 0) + ) }) ); @@ -423,8 +423,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-08]: Credit Manager zeroes limits on quoted tokens upon incurring a loss function test_I_CMQ_08_creditManager_triggers_limit_zeroing_on_loss() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), type(uint16).max, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), type(uint16).max, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_USDT), 500_00, uint96(1_000_000 * WAD)); (address creditAccount,) = _openTestCreditAccount(); @@ -433,15 +433,15 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.LINK), int96(uint96(100_000 * WAD)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_LINK), int96(uint96(100_000 * WAD)), 0) + ) }), MultiCall({ target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.updateQuota, - (tokenTestSuite.addressOf(Tokens.USDT), int96(uint96(200 * WAD)), 0) - ) + (tokenTestSuite.addressOf(TOKEN_USDT), int96(uint96(200 * WAD)), 0) + ) }) ); @@ -451,7 +451,7 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events vm.warp(block.timestamp + 365 days); vm.roll(block.number + 100); - address[2] memory quotedTokens = [tokenTestSuite.addressOf(Tokens.USDT), tokenTestSuite.addressOf(Tokens.LINK)]; + address[2] memory quotedTokens = [tokenTestSuite.addressOf(TOKEN_USDT), tokenTestSuite.addressOf(TOKEN_LINK)]; vm.prank(USER); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, new MultiCall[](0)); @@ -465,7 +465,7 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events /// @dev I:[CMQ-09]: positive updateQuotas reverts on zero debt function test_I_CMQ_09_updateQuotas_with_positive_value_reverts_on_zero_debt() public creditTest { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(TOKEN_LINK), 10_00, uint96(1_000_000 * WAD)); address creditAccount = _openCreditAccount(0, USER, 0, 0); @@ -476,8 +476,8 @@ contract QuotasIntegrationTest is IntegrationTestHelper, ICreditManagerV3Events MultiCall({ target: address(creditFacade), callData: abi.encodeCall( - ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(Tokens.LINK), 100_000, 0) - ) + ICreditFacadeV3Multicall.updateQuota, (tokenTestSuite.addressOf(TOKEN_LINK), 100_000, 0) + ) }) ); diff --git a/contracts/test/interfaces/ICreditConfig.sol b/contracts/test/interfaces/ICreditConfig.sol index 6c58b873..7711cea5 100644 --- a/contracts/test/interfaces/ICreditConfig.sol +++ b/contracts/test/interfaces/ICreditConfig.sol @@ -3,7 +3,7 @@ // (c) Gearbox Foundation, 2023. pragma solidity ^0.8.17; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {ITokenTestSuite} from "./ITokenTestSuite.sol"; import {CreditManagerOpts} from "../../interfaces/ICreditConfiguratorV3.sol"; @@ -38,34 +38,34 @@ struct BalancerPool { struct GenericSwapPair { Contracts router; - Tokens token0; - Tokens token1; + uint256 token0; + uint256 token1; } struct UniswapV3Pair { Contracts router; - Tokens token0; - Tokens token1; + uint256 token0; + uint256 token1; uint24 fee; } struct VelodromeV2Pool { - Tokens token0; - Tokens token1; + uint256 token0; + uint256 token1; bool stable; address factory; } struct PendlePair { address market; - Tokens inputToken; - Tokens pendleToken; + uint256 inputToken; + uint256 pendleToken; uint8 status; } struct MellowUnderlyingConfig { Contracts vault; - Tokens underlying; + uint256 underlying; } struct AdapterConfig { @@ -113,19 +113,19 @@ struct CreditManagerV3DeployParams { } struct GaugeRate { - Tokens token; + uint256 token; uint16 minRate; uint16 maxRate; } struct PoolQuotaLimit { - Tokens token; + uint256 token; uint16 quotaIncreaseFee; uint96 limit; } struct CollateralTokenHuman { - Tokens token; + uint256 token; uint16 lt; } @@ -135,7 +135,7 @@ interface IPoolV3DeployConfig { function name() external view returns (string memory); function chainId() external view returns (uint256); - function underlying() external view returns (Tokens); + function underlying() external view returns (uint256); function supportsQuotas() external view returns (bool); function poolParams() external view returns (PoolV3DeployParams memory); diff --git a/contracts/test/interfaces/ITokenTestSuite.sol b/contracts/test/interfaces/ITokenTestSuite.sol index cb3be43c..5c6971b5 100644 --- a/contracts/test/interfaces/ITokenTestSuite.sol +++ b/contracts/test/interfaces/ITokenTestSuite.sol @@ -10,19 +10,6 @@ interface ITokenTestSuite { function approve(address token, address holder, address targetContract, uint256 amount) external; - // function approve( - // Tokens t, - // address holder, - // address targetContract - // ) external; - - // function approve( - // Tokens t, - // address holder, - // address targetContract, - // uint256 amount - // ) external; - function topUpWETH() external payable; function topUpWETH(address onBehalfOf, uint256 value) external; @@ -32,10 +19,4 @@ interface ITokenTestSuite { function mint(address token, address to, uint256 amount) external; function burn(address token, address from, uint256 amount) external; - - // function mint( - // Tokens t, - // address to, - // uint256 amount - // ) external; } diff --git a/contracts/test/suites/TokensTestSuite.sol b/contracts/test/suites/TokensTestSuite.sol index 462d4bdc..fde8a714 100644 --- a/contracts/test/suites/TokensTestSuite.sol +++ b/contracts/test/suites/TokensTestSuite.sol @@ -22,21 +22,21 @@ import "../lib/constants.sol"; import {TokensTestSuiteHelper} from "./TokensTestSuiteHelper.sol"; import {MockTokensData, MockToken} from "../config/MockTokensData.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {TokenData, TokensDataLive, TokenType} from "@gearbox-protocol/sdk-gov/contracts/TokensData.sol"; import {NetworkDetector} from "@gearbox-protocol/sdk-gov/contracts/NetworkDetector.sol"; contract TokensTestSuite is Test, TokensTestSuiteHelper { using SafeERC20 for IERC20; - mapping(Tokens => address) public addressOf; - mapping(Tokens => string) public symbols; - mapping(Tokens => uint256) public prices; - mapping(Tokens => address) public priceFeedsMap; + mapping(uint256 => address) public addressOf; + mapping(uint256 => string) public symbols; + mapping(uint256 => uint256) public prices; + mapping(uint256 => address) public priceFeedsMap; - mapping(Tokens => TokenType) public tokenTypes; + mapping(uint256 => TokenType) public tokenTypes; - mapping(address => Tokens) public tokenIndexes; + mapping(address => uint256) public tokenIndexes; uint256 public tokenCount; @@ -82,18 +82,18 @@ contract TokensTestSuite is Test, TokensTestSuiteHelper { } } } - wethToken = addressOf[Tokens.WETH]; + wethToken = addressOf[TOKEN_WETH]; } function addMockToken(MockToken memory token) internal { IERC20 t; - if (token.index == Tokens.WETH) { + if (token.index == TOKEN_WETH) { t = new WETHMock(); wethToken = address(t); - } else if (token.index == Tokens.USDC) { + } else if (token.index == TOKEN_USDC) { t = new ERC20BlacklistableMock(token.symbol, token.symbol, token.decimals); - } else if (token.index == Tokens.USDT) { + } else if (token.index == TOKEN_USDT) { t = new ERC20FeeMock(token.symbol, token.symbol, token.decimals); } else { t = new ERC20Mock(token.symbol, token.symbol, token.decimals); @@ -119,49 +119,53 @@ contract TokensTestSuite is Test, TokensTestSuiteHelper { return priceFeeds; } - function mint(Tokens t, address to, uint256 amount) public { + function mint(uint256 t, address to, uint256 amount) public { mint(addressOf[t], to, amount); } - function balanceOf(Tokens t, address holder) public view returns (uint256) { + function balanceOf(uint256 t, address holder) public view returns (uint256) { return balanceOf(addressOf[t], holder); } - function approve(Tokens t, address from, address spender) public { + function approve(uint256 t, address from, address spender) public { approve(addressOf[t], from, spender); } - function approve(Tokens t, address from, address spender, uint256 amount) public { + function approve(uint256 t, address from, address spender, uint256 amount) public { approve(addressOf[t], from, spender, amount); } - function allowance(Tokens t, address from, address spender) external view returns (uint256) { + function allowance(uint256 t, address from, address spender) external view returns (uint256) { return IERC20(addressOf[t]).allowance(from, spender); } - function burn(Tokens t, address from, uint256 amount) external { + function burn(uint256 t, address from, uint256 amount) external { burn(addressOf[t], from, amount); } - function listOf(Tokens t1) external view returns (address[] memory tokensList) { + function listOf(uint256 t1) external view returns (address[] memory tokensList) { tokensList = new address[](1); tokensList[0] = addressOf[t1]; } - function listOf(Tokens t1, Tokens t2) external view returns (address[] memory tokensList) { + function listOf(uint256 t1, uint256 t2) external view returns (address[] memory tokensList) { tokensList = new address[](2); tokensList[0] = addressOf[t1]; tokensList[1] = addressOf[t2]; } - function listOf(Tokens t1, Tokens t2, Tokens t3) external view returns (address[] memory tokensList) { + function listOf(uint256 t1, uint256 t2, uint256 t3) external view returns (address[] memory tokensList) { tokensList = new address[](3); tokensList[0] = addressOf[t1]; tokensList[1] = addressOf[t2]; tokensList[2] = addressOf[t3]; } - function listOf(Tokens t1, Tokens t2, Tokens t3, Tokens t4) external view returns (address[] memory tokensList) { + function listOf(uint256 t1, uint256 t2, uint256 t3, uint256 t4) + external + view + returns (address[] memory tokensList) + { tokensList = new address[](4); tokensList[0] = addressOf[t1]; tokensList[1] = addressOf[t2]; diff --git a/contracts/test/unit/credit/CreditFacadeV3.unit.t.sol b/contracts/test/unit/credit/CreditFacadeV3.unit.t.sol index ab25bdb1..12cae6cd 100644 --- a/contracts/test/unit/credit/CreditFacadeV3.unit.t.sol +++ b/contracts/test/unit/credit/CreditFacadeV3.unit.t.sol @@ -58,7 +58,7 @@ import "../../../interfaces/IExceptions.sol"; // SUITES import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; uint16 constant REFERRAL_CODE = 23; @@ -127,7 +127,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve addressProvider = new AddressProviderV3ACLMock(); - addressProvider.setAddress(AP_WETH_TOKEN, tokenTestSuite.addressOf(Tokens.WETH), false); + addressProvider.setAddress(AP_WETH_TOKEN, tokenTestSuite.addressOf(TOKEN_WETH), false); botListMock = BotListMock(addressProvider.getAddressOrRevert(AP_BOT_LIST, 3_00)); @@ -135,7 +135,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve AddressProviderV3ACLMock(address(addressProvider)).addPausableAdmin(CONFIGURATOR); - poolMock = new PoolMock(address(addressProvider), tokenTestSuite.addressOf(Tokens.DAI)); + poolMock = new PoolMock(address(addressProvider), tokenTestSuite.addressOf(TOKEN_DAI)); creditManagerMock = new CreditManagerMock({_addressProvider: address(addressProvider), _pool: address(poolMock)}); @@ -171,7 +171,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_01_constructor_sets_correct_values() public allDegenNftCases allExpirableCases { assertEq(address(creditFacade.creditManager()), address(creditManagerMock), "Incorrect creditManager"); - assertEq(creditFacade.weth(), tokenTestSuite.addressOf(Tokens.WETH), "Incorrect weth token"); + assertEq(creditFacade.weth(), tokenTestSuite.addressOf(TOKEN_WETH), "Incorrect weth token"); assertEq(creditFacade.degenNFT(), address(degenNFTMock), "Incorrect degen NFT"); } @@ -285,7 +285,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve vm.prank(CONFIGURATOR); creditFacade.setDebtLimits(1 ether, 9 ether, 9); - address weth = tokenTestSuite.addressOf(Tokens.WETH); + address weth = tokenTestSuite.addressOf(TOKEN_WETH); vm.prank(USER); creditFacade.openCreditAccount{value: 1 ether}({ @@ -299,22 +299,22 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.addCollateral, (weth, 1 ether)) }) - ), + ), referralCode: 0 }); - expectBalance({t: Tokens.WETH, holder: USER, expectedBalance: 1 ether}); + expectBalance({t: TOKEN_WETH, holder: USER, expectedBalance: 1 ether}); creditManagerMock.setBorrower(USER); vm.prank(USER); creditFacade.closeCreditAccount{value: 1 ether}({creditAccount: DUMB_ADDRESS, calls: new MultiCall[](0)}); - expectBalance({t: Tokens.WETH, holder: USER, expectedBalance: 2 ether}); + expectBalance({t: TOKEN_WETH, holder: USER, expectedBalance: 2 ether}); vm.prank(USER); creditFacade.multicall{value: 1 ether}({creditAccount: DUMB_ADDRESS, calls: new MultiCall[](0)}); - expectBalance({t: Tokens.WETH, holder: USER, expectedBalance: 3 ether}); + expectBalance({t: TOKEN_WETH, holder: USER, expectedBalance: 3 ether}); } // @@ -398,7 +398,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.increaseDebt, (debt)) }) - ), + ), referralCode: REFERRAL_CODE }); @@ -515,8 +515,8 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve public notExpirableCase { - address dai = tokenTestSuite.addressOf(Tokens.DAI); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address dai = tokenTestSuite.addressOf(TOKEN_DAI); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 linkMask = 4; creditManagerMock.addToken(link, linkMask); @@ -554,7 +554,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve (addNonUnderlying ? link : dai, abi.encodeCall(ERC20Mock.mint, (creditAccount, 10))) ) ) - ) + ) }); } } @@ -603,9 +603,9 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve address creditAccount = DUMB_ADDRESS; creditManagerMock.setBorrower(USER); - address usdc = tokenTestSuite.addressOf(Tokens.USDC); - address weth = tokenTestSuite.addressOf(Tokens.WETH); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address usdc = tokenTestSuite.addressOf(TOKEN_USDC); + address weth = tokenTestSuite.addressOf(TOKEN_WETH); + address link = tokenTestSuite.addressOf(TOKEN_LINK); creditManagerMock.addToken(usdc, 2); creditManagerMock.addToken(weth, 4); creditManagerMock.addToken(link, 8); @@ -646,7 +646,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve MultiCall( address(creditFacade), abi.encodeCall(ICreditFacadeV3Multicall.withdrawCollateral, (usdc, 2, FRIEND)) ) - ) + ) }); } @@ -786,7 +786,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_21_multicall_reverts_if_called_without_particaular_permission() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address token = tokenTestSuite.addressOf(Tokens.LINK); + address token = tokenTestSuite.addressOf(TOKEN_LINK); creditManagerMock.addToken(token, 1 << 4); vm.prank(CONFIGURATOR); @@ -818,7 +818,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve MultiCallPermissionTestCase({ callData: abi.encodeCall( ICreditFacadeV3Multicall.addCollateralWithPermit, (token, 0, 0, 0, bytes32(0), bytes32(0)) - ), + ), permissionRquired: ADD_COLLATERAL_PERMISSION }), MultiCallPermissionTestCase({ @@ -880,7 +880,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_23_multicall_slippage_check_works_properly() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); BalanceDelta[] memory expectedBalance = new BalanceDelta[](1); address acm = address(new AdapterCallMock()); @@ -924,7 +924,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: acm, callData: abi.encodeCall( AdapterCallMock.makeCall, (link, abi.encodeCall(ERC20Mock.mint, (creditAccount, 1))) - ) + ) }), MultiCall({ target: address(creditFacade), @@ -967,7 +967,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: acm, callData: abi.encodeCall( AdapterCallMock.makeCall, (link, abi.encodeCall(ERC20Mock.mint, (creditAccount, 1))) - ) + ) }), MultiCall({ target: address(creditFacade), @@ -1006,9 +1006,9 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.setFullCheckParams, (new uint256[](0), PERCENTAGE_FACTOR - 1) - ) + ) }) - ), + ), enabledTokensMask: 0, flags: 0 }); @@ -1023,7 +1023,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.setFullCheckParams, (collateralHints, PERCENTAGE_FACTOR)) }) - ), + ), enabledTokensMask: 0, flags: 0 }); @@ -1037,7 +1037,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.setFullCheckParams, (collateralHints, PERCENTAGE_FACTOR)) }) - ), + ), enabledTokensMask: 0, flags: 0 }); @@ -1054,7 +1054,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.setFullCheckParams, (collateralHints, minHealthFactor)) }) - ), + ), enabledTokensMask: 0, flags: 0 }); @@ -1067,7 +1067,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_25_multicall_onDemandPriceUpdate_works_properly() public notExpirableCase { bytes memory cd = bytes("Hellew"); - address token = tokenTestSuite.addressOf(Tokens.LINK); + address token = tokenTestSuite.addressOf(TOKEN_LINK); creditManagerMock.setPriceOracle(address(priceOracleMock)); @@ -1102,7 +1102,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_26_multicall_addCollateral_works_properly() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address token = tokenTestSuite.addressOf(Tokens.LINK); + address token = tokenTestSuite.addressOf(TOKEN_LINK); uint256 amount = 12333345; uint256 mask = 1 << 5; @@ -1167,7 +1167,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall( ICreditFacadeV3Multicall.addCollateralWithPermit, (address(token), amount, deadline, v, r, s) - ) + ) }) ); @@ -1276,7 +1276,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.increaseDebt, (maxDebt + 1)) }) - ), + ), enabledTokensMask: mask, flags: INCREASE_DEBT_PERMISSION }); @@ -1295,7 +1295,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.increaseDebt, (1)) }) - ), + ), enabledTokensMask: mask, flags: INCREASE_DEBT_PERMISSION }); @@ -1308,7 +1308,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve { address creditAccount = DUMB_ADDRESS; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 linkMask = 1 << 8; tokenTestSuite.mint(link, DUMB_ADDRESS, 1000); @@ -1329,7 +1329,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.increaseDebt, (10)) }) - ), + ), enabledTokensMask: linkMask, flags: INCREASE_DEBT_PERMISSION }); @@ -1342,7 +1342,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.withdrawCollateral, (link, 1000, USER)) }) - ), + ), enabledTokensMask: linkMask, flags: WITHDRAW_COLLATERAL_PERMISSION }); @@ -1379,7 +1379,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.decreaseDebt, (amount)) }) - ), + ), enabledTokensMask: mask, flags: DECREASE_DEBT_PERMISSION }); @@ -1416,7 +1416,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.decreaseDebt, (1)) }) - ), + ), enabledTokensMask: mask, flags: DECREASE_DEBT_PERMISSION }); @@ -1442,7 +1442,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.decreaseDebt, (1)) }) - ), + ), enabledTokensMask: mask, flags: DECREASE_DEBT_PERMISSION }); @@ -1452,7 +1452,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_33_multicall_enableToken_works_properly() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 mask = 1 << 5; creditManagerMock.addToken(link, mask); @@ -1471,7 +1471,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.enableToken, (link)) }) - ), + ), enabledTokensMask: UNDERLYING_TOKEN_MASK, flags: ENABLE_TOKEN_PERMISSION }); @@ -1489,7 +1489,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.disableToken, (link)) }) - ), + ), enabledTokensMask: UNDERLYING_TOKEN_MASK | mask, flags: DISABLE_TOKEN_PERMISSION }); @@ -1511,7 +1511,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve vm.prank(CONFIGURATOR); creditFacade.setDebtLimits(0, maxDebt, type(uint8).max); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 maskToEnable = 1 << 4; uint256 maskToDisable = 1 << 7; @@ -1534,7 +1534,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.updateQuota, (link, change, 0)) }) - ), + ), enabledTokensMask: maskToDisable | UNDERLYING_TOKEN_MASK, flags: UPDATE_QUOTA_PERMISSION }); @@ -1550,7 +1550,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_34A_multicall_updateQuota_works_properly() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 linkMask = 1 << 8; tokenTestSuite.mint(link, DUMB_ADDRESS, 1000); @@ -1574,7 +1574,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.updateQuota, (link, change, 0)) }) - ), + ), enabledTokensMask: linkMask, flags: UPDATE_QUOTA_PERMISSION | FORBIDDEN_TOKENS_BEFORE_CALLS }); @@ -1586,7 +1586,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.updateQuota, (link, -change, 0)) }) - ), + ), enabledTokensMask: linkMask, flags: UPDATE_QUOTA_PERMISSION | FORBIDDEN_TOKENS_BEFORE_CALLS }); @@ -1596,7 +1596,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve function test_U_FA_35_multicall_withdrawCollateral_works_properly() public notExpirableCase { address creditAccount = DUMB_ADDRESS; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 maskToDisable = 1 << 7; uint256 amount = 100; @@ -1617,7 +1617,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.withdrawCollateral, (link, amount, USER)) }) - ), + ), enabledTokensMask: maskToDisable | UNDERLYING_TOKEN_MASK, flags: WITHDRAW_COLLATERAL_PERMISSION }); @@ -1632,7 +1632,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve address creditAccount = DUMB_ADDRESS; RevocationPair[] memory rp = new RevocationPair[](1); - rp[0].token = tokenTestSuite.addressOf(Tokens.LINK); + rp[0].token = tokenTestSuite.addressOf(TOKEN_LINK); rp[0].spender = DUMB_ADDRESS; vm.expectCall( @@ -1646,7 +1646,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: address(creditFacade), callData: abi.encodeCall(ICreditFacadeV3Multicall.revokeAdapterAllowances, (rp)) }) - ), + ), enabledTokensMask: 0, flags: REVOKE_ALLOWANCES_PERMISSION }); @@ -1720,7 +1720,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve target: adapter, callData: abi.encodeCall(AdapterMock.dumbCall, (tokensToEnable, tokensToDisable)) }) - ), + ), enabledTokensMask: _case.tokenMaskBefore, flags: EXTERNAL_CALLS_PERMISSION }); @@ -1849,7 +1849,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve address creditAccount = DUMB_ADDRESS; uint256 enabledTokensMaskBefore = UNDERLYING_TOKEN_MASK; - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 linkMask = 2; deal({token: link, to: creditAccount, give: 1000}); @@ -2007,7 +2007,7 @@ contract CreditFacadeV3UnitTest is TestHelper, BalanceHelper, ICreditFacadeV3Eve vm.prank(CONFIGURATOR); creditFacade.setTokenAllowance(DUMB_ADDRESS, AllowanceAction.ALLOW); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); uint256 mask = 1 << 8; creditManagerMock.addToken(link, mask); diff --git a/contracts/test/unit/credit/CreditManagerV3.unit.t.sol b/contracts/test/unit/credit/CreditManagerV3.unit.t.sol index e6cda8be..d32bfa94 100644 --- a/contracts/test/unit/credit/CreditManagerV3.unit.t.sol +++ b/contracts/test/unit/credit/CreditManagerV3.unit.t.sol @@ -49,7 +49,7 @@ import {ERC20Mock} from "../../mocks/token/ERC20Mock.sol"; import {CreditAccountMock, CreditAccountMockEvents} from "../../mocks/credit/CreditAccountMock.sol"; // SUITES import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {MockCreditConfig} from "../../config/MockCreditConfig.sol"; // EXCEPTIONS @@ -114,7 +114,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH tokenTestSuite = new TokensTestSuite(); tokenTestSuite.topUpWETH{value: 100 * WAD}(); - underlying = tokenTestSuite.addressOf(Tokens.DAI); + underlying = tokenTestSuite.addressOf(TOKEN_DAI); addressProvider = new AddressProviderV3ACLMock(); @@ -161,10 +161,10 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH } function _setUnderlying(bool underlyingIsFeeToken) internal { - uint256 oneUSDT = 10 ** _decimals(tokenTestSuite.addressOf(Tokens.USDT)); + uint256 oneUSDT = 10 ** _decimals(tokenTestSuite.addressOf(TOKEN_USDT)); isFeeToken = underlyingIsFeeToken; - underlying = tokenTestSuite.addressOf(underlyingIsFeeToken ? Tokens.USDT : Tokens.DAI); + underlying = tokenTestSuite.addressOf(underlyingIsFeeToken ? TOKEN_USDT : TOKEN_DAI); uint256 _tokenFee = underlyingIsFeeToken ? 20 : 0; uint256 _maxTokenFee = underlyingIsFeeToken ? 50 * oneUSDT : 0; @@ -195,7 +195,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH return IERC20Metadata(token).decimals(); } - function _addToken(Tokens token, uint16 lt) internal { + function _addToken(uint256 token, uint16 lt) internal { _addToken(tokenTestSuite.addressOf(token), lt); } @@ -222,7 +222,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH }); } - function _addQuotedToken(Tokens token, uint16 lt, uint96 quoted, uint128 outstandingInterest) internal { + function _addQuotedToken(uint256 token, uint16 lt, uint96 quoted, uint128 outstandingInterest) internal { _addQuotedToken({ token: tokenTestSuite.addressOf(token), lt: lt, @@ -248,7 +248,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH } } - function _getTokenMaskOrRevert(Tokens token) internal view returns (uint256) { + function _getTokenMaskOrRevert(uint256 token) internal view returns (uint256) { return creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(token)); } @@ -299,14 +299,14 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH function test_U_CM_01_constructor_sets_correct_values() public creditManagerTest { assertEq(address(creditManager.pool()), address(poolMock), _testCaseErr("Incorrect pool")); - assertEq(creditManager.underlying(), tokenTestSuite.addressOf(Tokens.DAI), _testCaseErr("Incorrect underlying")); + assertEq(creditManager.underlying(), tokenTestSuite.addressOf(TOKEN_DAI), _testCaseErr("Incorrect underlying")); (address token,) = creditManager.collateralTokenByMask(UNDERLYING_TOKEN_MASK); - assertEq(token, tokenTestSuite.addressOf(Tokens.DAI), _testCaseErr("Incorrect underlying")); + assertEq(token, tokenTestSuite.addressOf(TOKEN_DAI), _testCaseErr("Incorrect underlying")); assertEq( - creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)), + creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(TOKEN_DAI)), 1, _testCaseErr("Incorrect token mask for underlying token") ); @@ -614,23 +614,23 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH address[] memory hasQuotedTokens = new address[](2); - hasQuotedTokens[0] = tokenTestSuite.addressOf(Tokens.USDC); - hasQuotedTokens[1] = tokenTestSuite.addressOf(Tokens.LINK); + hasQuotedTokens[0] = tokenTestSuite.addressOf(TOKEN_USDC); + hasQuotedTokens[1] = tokenTestSuite.addressOf(TOKEN_LINK); priceOracleMock.setPrice(underlying, 10 ** 8); /// @notice sets price 2 USD for underlying - priceOracleMock.setPrice(tokenTestSuite.addressOf(Tokens.USDC), USDC_MULTIPLIER * 10 ** 8); + priceOracleMock.setPrice(tokenTestSuite.addressOf(TOKEN_USDC), USDC_MULTIPLIER * 10 ** 8); /// @notice sets price 4 USD for underlying - priceOracleMock.setPrice(tokenTestSuite.addressOf(Tokens.LINK), LINK_MULTIPLIER * 10 ** 8); + priceOracleMock.setPrice(tokenTestSuite.addressOf(TOKEN_LINK), LINK_MULTIPLIER * 10 ** 8); vm.startPrank(CONFIGURATOR); - creditManager.addToken(tokenTestSuite.addressOf(Tokens.USDC)); - creditManager.addToken(tokenTestSuite.addressOf(Tokens.LINK)); + creditManager.addToken(tokenTestSuite.addressOf(TOKEN_USDC)); + creditManager.addToken(tokenTestSuite.addressOf(TOKEN_LINK)); vm.stopPrank(); - uint256 LINK_TOKEN_MASK = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + uint256 LINK_TOKEN_MASK = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(TOKEN_LINK)); LiquidateAccountTestCase[7] memory cases = [ LiquidateAccountTestCase({ @@ -799,8 +799,8 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH }); tokenTestSuite.mint(underlying, creditAccount, _case.underlyingBalance); - tokenTestSuite.mint(tokenTestSuite.addressOf(Tokens.USDC), creditAccount, _case.usdcBalance); - tokenTestSuite.mint(tokenTestSuite.addressOf(Tokens.LINK), creditAccount, _case.linkBalance); + tokenTestSuite.mint(tokenTestSuite.addressOf(TOKEN_USDC), creditAccount, _case.usdcBalance); + tokenTestSuite.mint(tokenTestSuite.addressOf(TOKEN_LINK), creditAccount, _case.linkBalance); vm.startPrank(CONFIGURATOR); for (uint256 j; j < _case.quotedTokens.length; ++j) { @@ -1122,13 +1122,13 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH tokenTestSuite.mint(underlying, creditAccount, _amountWithFee(DAI_ACCOUNT_AMOUNT)); address[] memory quotedTokens = new address[](2); - quotedTokens[0] = tokenTestSuite.addressOf(Tokens.LINK); - quotedTokens[1] = tokenTestSuite.addressOf(Tokens.USDC); + quotedTokens[0] = tokenTestSuite.addressOf(TOKEN_LINK); + quotedTokens[1] = tokenTestSuite.addressOf(TOKEN_USDC); - _addQuotedToken({token: Tokens.LINK, lt: 80_00, quoted: 10000, outstandingInterest: 0}); - _addQuotedToken({token: Tokens.USDC, lt: 80_00, quoted: 10000, outstandingInterest: 0}); + _addQuotedToken({token: TOKEN_LINK, lt: 80_00, quoted: 10000, outstandingInterest: 0}); + _addQuotedToken({token: TOKEN_USDC, lt: 80_00, quoted: 10000, outstandingInterest: 0}); - uint256 quotedTokensMask = _getTokenMaskOrRevert(Tokens.LINK) | _getTokenMaskOrRevert(Tokens.USDC); + uint256 quotedTokensMask = _getTokenMaskOrRevert(TOKEN_LINK) | _getTokenMaskOrRevert(TOKEN_USDC); vm.prank(CONFIGURATOR); creditManager.setQuotedMask(quotedTokensMask); @@ -1236,7 +1236,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH /// @dev U:[CM-13]: addCollateral works as expected function test_U_CM_13_addCollateral_works_as_expected() public creditManagerTest { address creditAccount = DUMB_ADDRESS; - address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + address linkToken = tokenTestSuite.addressOf(TOKEN_LINK); uint256 amount = DAI_ACCOUNT_AMOUNT; @@ -1273,7 +1273,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH /// @dev U:[CM-14]: approveCreditAccount works as expected function test_U_CM_14_approveCreditAccount_works_as_expected() public creditManagerTest { address creditAccount = address(new CreditAccountMock()); - address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + address linkToken = tokenTestSuite.addressOf(TOKEN_LINK); creditManager.setActiveCreditAccount(address(creditAccount)); @@ -1610,11 +1610,11 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH uint128 STETH_INTEREST = uint128(debt / 100); uint128 INITIAL_INTEREST = 500; - _addQuotedToken({token: Tokens.LINK, lt: 80_00, quoted: LINK_QUOTA, outstandingInterest: LINK_INTEREST}); - _addQuotedToken({token: Tokens.STETH, lt: 30_00, quoted: STETH_QUOTA, outstandingInterest: STETH_INTEREST}); + _addQuotedToken({token: TOKEN_LINK, lt: 80_00, quoted: LINK_QUOTA, outstandingInterest: LINK_INTEREST}); + _addQuotedToken({token: TOKEN_STETH, lt: 30_00, quoted: STETH_QUOTA, outstandingInterest: STETH_INTEREST}); - uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.LINK}); - uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.STETH}); + uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_LINK}); + uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_STETH}); vars.set("cumulativeIndexNow", RAY * 22 / 10); vars.set("cumulativeIndexLastUpdate", RAY * 21 / 10); @@ -1652,7 +1652,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH assertEq(collateralDebtData._poolQuotaKeeper, address(poolQuotaKeeperMock), "Incorrect _poolQuotaKeeper"); assertEq( - collateralDebtData.quotedTokens, tokenTestSuite.listOf(Tokens.LINK, Tokens.STETH), "Incorrect quotedTokens" + collateralDebtData.quotedTokens, tokenTestSuite.listOf(TOKEN_LINK, TOKEN_STETH), "Incorrect quotedTokens" ); assertEq( @@ -1712,15 +1712,15 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH vars.set("LINK_LT", 80_00); _addQuotedToken({ - token: Tokens.LINK, + token: TOKEN_LINK, lt: uint16(vars.get("LINK_LT")), quoted: uint96(vars.get("LINK_QUOTA")), outstandingInterest: uint128(vars.get("LINK_INTEREST")) }); vars.set("STETH_LT", 30_00); - _addToken({token: Tokens.STETH, lt: uint16(vars.get("STETH_LT"))}); - _addToken({token: Tokens.USDC, lt: 60_00}); + _addToken({token: TOKEN_STETH, lt: uint16(vars.get("STETH_LT"))}); + _addToken({token: TOKEN_USDC, lt: 60_00}); vars.set("cumulativeIndexNow", RAY * 22 / 10); vars.set("cumulativeIndexLastUpdate", RAY * 21 / 10); @@ -1733,19 +1733,19 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH vars.set("LINK_PRICE", 4); priceOracleMock.setPrice({ - token: tokenTestSuite.addressOf(Tokens.LINK), + token: tokenTestSuite.addressOf(TOKEN_LINK), price: vars.get("LINK_PRICE") * (10 ** 8) }); vars.set("STETH_PRICE", 3); priceOracleMock.setPrice({ - token: tokenTestSuite.addressOf(Tokens.STETH), + token: tokenTestSuite.addressOf(TOKEN_STETH), price: vars.get("STETH_PRICE") * (10 ** 8) }); vars.set("USDC_PRICE", 5); priceOracleMock.setPrice({ - token: tokenTestSuite.addressOf(Tokens.USDC), + token: tokenTestSuite.addressOf(TOKEN_USDC), price: vars.get("USDC_PRICE") * (10 ** 8) }); @@ -1759,9 +1759,9 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH _collateralTestSetup(debt); - uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.LINK}); - uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.STETH}); - uint256 USDC_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.USDC}); + uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_LINK}); + uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_STETH}); + uint256 USDC_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_USDC}); vm.prank(CONFIGURATOR); creditManager.setQuotedMask(LINK_TOKEN_MASK); @@ -1838,9 +1838,9 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH }); tokenTestSuite.mint({token: underlying, to: creditAccount, amount: _case.underlyingBalance}); - tokenTestSuite.mint({t: Tokens.LINK, to: creditAccount, amount: _case.linkBalance}); - tokenTestSuite.mint({t: Tokens.STETH, to: creditAccount, amount: _case.stEthBalance}); - tokenTestSuite.mint({t: Tokens.USDC, to: creditAccount, amount: _case.usdcBalance}); + tokenTestSuite.mint({t: TOKEN_LINK, to: creditAccount, amount: _case.linkBalance}); + tokenTestSuite.mint({t: TOKEN_STETH, to: creditAccount, amount: _case.stEthBalance}); + tokenTestSuite.mint({t: TOKEN_USDC, to: creditAccount, amount: _case.usdcBalance}); CollateralDebtData memory collateralDebtData = creditManager.calcDebtAndCollateralFC({creditAccount: creditAccount, task: tasks[taskIndex]}); @@ -1896,28 +1896,28 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH assertEq(creditManager.collateralTokensCount(), 1, "SETUP: incorrect tokens count"); //// LINK: [QUOTED] - _addQuotedToken({token: Tokens.LINK, lt: 80_00, quoted: 10_000, outstandingInterest: 40_000}); - uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.LINK}); + _addQuotedToken({token: TOKEN_LINK, lt: 80_00, quoted: 10_000, outstandingInterest: 40_000}); + uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_LINK}); //// WETH: [NOT_QUOTED] - _addToken({token: Tokens.WETH, lt: 50_00}); - uint256 WETH_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.WETH}); + _addToken({token: TOKEN_WETH, lt: 50_00}); + uint256 WETH_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_WETH}); //// USDT: [QUOTED] - _addQuotedToken({token: Tokens.USDT, lt: 40_00, quoted: 0, outstandingInterest: 90_000}); - uint256 USDT_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.USDT}); + _addQuotedToken({token: TOKEN_USDT, lt: 40_00, quoted: 0, outstandingInterest: 90_000}); + uint256 USDT_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_USDT}); //// STETH: [QUOTED] - _addQuotedToken({token: Tokens.STETH, lt: 30_00, quoted: 20_000, outstandingInterest: 10_000}); - uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.STETH}); + _addQuotedToken({token: TOKEN_STETH, lt: 30_00, quoted: 20_000, outstandingInterest: 10_000}); + uint256 STETH_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_STETH}); //// USDC: [NOT_QUOTED] - _addToken({token: Tokens.USDC, lt: 80_00}); - uint256 USDC_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.USDC}); + _addToken({token: TOKEN_USDC, lt: 80_00}); + uint256 USDC_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_USDC}); //// CVX: [QUOTED] - _addQuotedToken({token: Tokens.CVX, lt: 20_00, quoted: 100_000, outstandingInterest: 30_000}); - uint256 CVX_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.CVX}); + _addQuotedToken({token: TOKEN_CVX, lt: 20_00, quoted: 100_000, outstandingInterest: 30_000}); + uint256 CVX_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_CVX}); uint256 quotedTokensMask = LINK_TOKEN_MASK | USDT_TOKEN_MASK | STETH_TOKEN_MASK | CVX_TOKEN_MASK; @@ -1941,7 +1941,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH GetQuotedTokenDataTestCase({ name: "1 quotes token", enabledTokensMask: STETH_TOKEN_MASK | WETH_TOKEN_MASK | USDC_TOKEN_MASK, - expectedQuotaTokens: tokenTestSuite.listOf(Tokens.STETH), + expectedQuotaTokens: tokenTestSuite.listOf(TOKEN_STETH), expertedOutstandingQuotaInterest: 10_000, expectedQuotas: arrayOf(20_000, 0, 0), expectedLts: arrayOfU16(30_00, 0, 0) @@ -1949,7 +1949,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH GetQuotedTokenDataTestCase({ name: "2 quotes token", enabledTokensMask: STETH_TOKEN_MASK | LINK_TOKEN_MASK | WETH_TOKEN_MASK | USDC_TOKEN_MASK, - expectedQuotaTokens: tokenTestSuite.listOf(Tokens.LINK, Tokens.STETH), + expectedQuotaTokens: tokenTestSuite.listOf(TOKEN_LINK, TOKEN_STETH), expertedOutstandingQuotaInterest: 40_000 + 10_000, expectedQuotas: arrayOf(10_000, 20_000, 0), expectedLts: arrayOfU16(80_00, 30_00, 0) @@ -1957,7 +1957,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH GetQuotedTokenDataTestCase({ name: "3 quotes token", enabledTokensMask: STETH_TOKEN_MASK | LINK_TOKEN_MASK | CVX_TOKEN_MASK | WETH_TOKEN_MASK | USDC_TOKEN_MASK, - expectedQuotaTokens: tokenTestSuite.listOf(Tokens.LINK, Tokens.STETH, Tokens.CVX), + expectedQuotaTokens: tokenTestSuite.listOf(TOKEN_LINK, TOKEN_STETH, TOKEN_CVX), expertedOutstandingQuotaInterest: 40_000 + 10_000 + 30_000, expectedQuotas: arrayOf(10_000, 20_000, 100_000), expectedLts: arrayOfU16(80_00, 30_00, 20_00) @@ -2002,8 +2002,8 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH /// @dev U:[CM-25]: updateQuota works correctly function test_U_CM_25_updateQuota_works_correctly() public creditManagerTest { - _addToken(Tokens.LINK, 80_00); - uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: Tokens.LINK}); + _addToken(TOKEN_LINK, 80_00); + uint256 LINK_TOKEN_MASK = _getTokenMaskOrRevert({token: TOKEN_LINK}); uint128 INITIAL_INTEREST = 123123; uint128 caInterestChange = 10323212323; @@ -2041,7 +2041,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH (uint256 tokensToEnable, uint256 tokensToDisable) = creditManager.updateQuota({ creditAccount: creditAccount, - token: tokenTestSuite.addressOf(Tokens.LINK), + token: tokenTestSuite.addressOf(TOKEN_LINK), quotaChange: 122, minQuota: 122, maxQuota: type(uint96).max @@ -2074,7 +2074,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH /// @dev U:[CM-26]: withdrawCollateral reverts for unknown token function test_U_CM_26_withdrawCollateral_reverts_for_unknown_token() public creditManagerTest { address creditAccount = DUMB_ADDRESS; - address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + address linkToken = tokenTestSuite.addressOf(TOKEN_LINK); /// @notice check that it reverts on unknown token vm.expectRevert(TokenNotAllowedException.selector); creditManager.withdrawCollateral({creditAccount: creditAccount, token: linkToken, amount: 20000, to: USER}); @@ -2371,7 +2371,7 @@ contract CreditManagerV3UnitTest is TestHelper, ICreditManagerV3Events, BalanceH vm.revertTo(snapshot); /// @notice Non-underlying token case - address weth = tokenTestSuite.addressOf(Tokens.WETH); + address weth = tokenTestSuite.addressOf(TOKEN_WETH); creditManager.addToken(weth); diff --git a/contracts/test/unit/governance/GaugeV3.unit.t.sol b/contracts/test/unit/governance/GaugeV3.unit.t.sol index 004cfc54..d6771fc1 100644 --- a/contracts/test/unit/governance/GaugeV3.unit.t.sol +++ b/contracts/test/unit/governance/GaugeV3.unit.t.sol @@ -21,7 +21,7 @@ import {AddressProviderV3ACLMock} from "../../mocks/core/AddressProviderV3ACLMoc // SUITES import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {TestHelper} from "../../lib/helper.sol"; // EXCEPTIONS @@ -46,7 +46,7 @@ contract GauageV3UnitTest is TestHelper, IGaugeV3Events { tokenTestSuite.topUpWETH{value: 100 * WAD}(); - underlying = tokenTestSuite.addressOf(Tokens.DAI); + underlying = tokenTestSuite.addressOf(TOKEN_DAI); vm.prank(CONFIGURATOR); addressProvider = new AddressProviderV3ACLMock(); diff --git a/contracts/test/unit/governance/GearStakingV3.unit.t.sol b/contracts/test/unit/governance/GearStakingV3.unit.t.sol index 720d48f4..86f36338 100644 --- a/contracts/test/unit/governance/GearStakingV3.unit.t.sol +++ b/contracts/test/unit/governance/GearStakingV3.unit.t.sol @@ -20,7 +20,7 @@ import {TargetContractMock} from "../../mocks/core/TargetContractMock.sol"; // SUITES import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; @@ -42,7 +42,7 @@ contract GearStakingV3UnitTest is Test, IGearStakingV3Events { tokenTestSuite = new TokensTestSuite(); - gearToken = tokenTestSuite.addressOf(Tokens.WETH); + gearToken = tokenTestSuite.addressOf(TOKEN_WETH); vm.prank(CONFIGURATOR); addressProvider.setAddress(AP_GEAR_TOKEN, gearToken, false); diff --git a/contracts/test/unit/libraries/CollateralLogic.unit.t.sol b/contracts/test/unit/libraries/CollateralLogic.unit.t.sol index a27fe7ec..37632584 100644 --- a/contracts/test/unit/libraries/CollateralLogic.unit.t.sol +++ b/contracts/test/unit/libraries/CollateralLogic.unit.t.sol @@ -12,7 +12,7 @@ import {TestHelper} from "../../lib/helper.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; import "../../lib/constants.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {CollateralLogicHelper, PRICE_ORACLE, B, Q} from "./CollateralLogicHelper.sol"; /// @title CollateralLogic unit test @@ -27,13 +27,13 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { } function _tokenSetup() internal { - setTokenParams({t: Tokens.DAI, lt: 80_00, price: 1}); - setTokenParams({t: Tokens.USDC, lt: 60_00, price: 2}); - setTokenParams({t: Tokens.WETH, lt: 90_00, price: 1_818}); - setTokenParams({t: Tokens.LINK, lt: 30_00, price: 15}); - setTokenParams({t: Tokens.USDT, lt: 50_00, price: 1}); - setTokenParams({t: Tokens.STETH, lt: 40_00, price: 1_500}); - setTokenParams({t: Tokens.CRV, lt: 55_00, price: 10}); + setTokenParams({t: TOKEN_DAI, lt: 80_00, price: 1}); + setTokenParams({t: TOKEN_USDC, lt: 60_00, price: 2}); + setTokenParams({t: TOKEN_WETH, lt: 90_00, price: 1_818}); + setTokenParams({t: TOKEN_LINK, lt: 30_00, price: 15}); + setTokenParams({t: TOKEN_USDT, lt: 50_00, price: 1}); + setTokenParams({t: TOKEN_STETH, lt: 40_00, price: 1_500}); + setTokenParams({t: TOKEN_CRV, lt: 55_00, price: 10}); } struct CalcOneTokenCollateralTestCase { @@ -192,11 +192,11 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { CalcOneNonQuotedTokenCollateralTestCase memory _case = cases[i]; caseName = _case.name; - address token = addressOf[Tokens.DAI]; + address token = addressOf[TOKEN_DAI]; - setTokenParams({t: Tokens.DAI, lt: _case.liquidationThreshold, price: _case.price}); + setTokenParams({t: TOKEN_DAI, lt: _case.liquidationThreshold, price: _case.price}); - setBalances(arrayOf(B({t: Tokens.DAI, balance: _case.balance}))); + setBalances(arrayOf(B({t: TOKEN_DAI, balance: _case.balance}))); if (!_case.priceOracleCalled) { revertIsPriceOracleCalled[token] = true; @@ -209,11 +209,11 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { creditAccount: creditAccount, convertToUSDFn: _convertToUSD, collateralTokenByMaskFn: _collateralTokenByMask, - tokenMask: tokenMask[Tokens.DAI], + tokenMask: tokenMask[TOKEN_DAI], priceOracle: PRICE_ORACLE }); - expectTokensOrder({tokens: arrayOf(Tokens.DAI), debug: false}); + expectTokensOrder({tokens: arrayOfTokens(TOKEN_DAI), debug: false}); assertEq(valueUSD, _case.expectedValueUSD, _testCaseErr("Incorrect valueUSD")); assertEq(weightedValueUSD, _case.expectedWeightedValueUSD, _testCaseErr("Incorrect weightedValueUSD")); @@ -233,7 +233,7 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { uint256 expectedTotalValueUSD; uint256 expectedTwvUSD; uint256 expectedTokensToDisable; - Tokens[] expectedOrder; + uint256[] expectedOrder; } /// @dev U:[CLL-3]: ccalcOneNonQuotedCollateral works correctly @@ -241,83 +241,83 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { CalcNonQuotedTokenCollateralTestCase[7] memory cases = [ CalcNonQuotedTokenCollateralTestCase({ name: "One token calc, no target, no hints", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000})), target: type(uint256).max, collateralHints: new uint256[](0), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.DAI) + expectedOrder: arrayOfTokens(TOKEN_DAI) }), CalcNonQuotedTokenCollateralTestCase({ name: "Two tokens calc, no target, no hints", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000}), B({t: Tokens.STETH, balance: 100})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000}), B({t: TOKEN_STETH, balance: 100})), target: type(uint256).max, collateralHints: new uint256[](0), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI, Tokens.STETH)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI] + (100 - 1) * prices[Tokens.STETH], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR - + (100 - 1) * prices[Tokens.STETH] * lts[Tokens.STETH] / PERCENTAGE_FACTOR, + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI, TOKEN_STETH)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI] + (100 - 1) * prices[TOKEN_STETH], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR + + (100 - 1) * prices[TOKEN_STETH] * lts[TOKEN_STETH] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.DAI, Tokens.STETH) + expectedOrder: arrayOfTokens(TOKEN_DAI, TOKEN_STETH) }), CalcNonQuotedTokenCollateralTestCase({ name: "Disable tokens with 0 or 1 balance", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000}), B({t: Tokens.STETH, balance: 1})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000}), B({t: TOKEN_STETH, balance: 1})), target: type(uint256).max, collateralHints: new uint256[](0), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI, Tokens.STETH, Tokens.LINK)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, - expectedTokensToDisable: getTokenMask(arrayOf(Tokens.STETH, Tokens.LINK)), - expectedOrder: arrayOf(Tokens.DAI, Tokens.LINK, Tokens.STETH) + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI, TOKEN_STETH, TOKEN_LINK)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, + expectedTokensToDisable: getTokenMask(arrayOfTokens(TOKEN_STETH, TOKEN_LINK)), + expectedOrder: arrayOfTokens(TOKEN_DAI, TOKEN_LINK, TOKEN_STETH) }), CalcNonQuotedTokenCollateralTestCase({ name: "Stops on target", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000}), B({t: Tokens.STETH, balance: 100_000})), - target: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000}), B({t: TOKEN_STETH, balance: 100_000})), + target: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, collateralHints: new uint256[](0), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI, Tokens.STETH, Tokens.LINK)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI, TOKEN_STETH, TOKEN_LINK)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.DAI) + expectedOrder: arrayOfTokens(TOKEN_DAI) }), CalcNonQuotedTokenCollateralTestCase({ name: "Call tokens by collateral hints order", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000}), B({t: Tokens.STETH, balance: 300})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000}), B({t: TOKEN_STETH, balance: 300})), target: type(uint256).max, - collateralHints: getHints(arrayOf(Tokens.LINK, Tokens.DAI, Tokens.STETH)), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI, Tokens.STETH, Tokens.LINK)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI] + (300 - 1) * prices[Tokens.STETH], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR - + (300 - 1) * prices[Tokens.STETH] * lts[Tokens.STETH] / PERCENTAGE_FACTOR, - expectedTokensToDisable: getTokenMask(arrayOf(Tokens.LINK)), - expectedOrder: arrayOf(Tokens.LINK, Tokens.DAI, Tokens.STETH) + collateralHints: getHints(arrayOfTokens(TOKEN_LINK, TOKEN_DAI, TOKEN_STETH)), + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI, TOKEN_STETH, TOKEN_LINK)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI] + (300 - 1) * prices[TOKEN_STETH], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR + + (300 - 1) * prices[TOKEN_STETH] * lts[TOKEN_STETH] / PERCENTAGE_FACTOR, + expectedTokensToDisable: getTokenMask(arrayOfTokens(TOKEN_LINK)), + expectedOrder: arrayOfTokens(TOKEN_LINK, TOKEN_DAI, TOKEN_STETH) }), CalcNonQuotedTokenCollateralTestCase({ name: "Call tokens by normal order after collateral hints order", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000}), B({t: Tokens.STETH, balance: 300})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000}), B({t: TOKEN_STETH, balance: 300})), target: type(uint256).max, - collateralHints: getHints(arrayOf(Tokens.LINK, Tokens.STETH)), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI, Tokens.STETH, Tokens.LINK)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI] + (300 - 1) * prices[Tokens.STETH], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR - + (300 - 1) * prices[Tokens.STETH] * lts[Tokens.STETH] / PERCENTAGE_FACTOR, - expectedTokensToDisable: getTokenMask(arrayOf(Tokens.LINK)), - expectedOrder: arrayOf(Tokens.LINK, Tokens.STETH, Tokens.DAI) + collateralHints: getHints(arrayOfTokens(TOKEN_LINK, TOKEN_STETH)), + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI, TOKEN_STETH, TOKEN_LINK)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI] + (300 - 1) * prices[TOKEN_STETH], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR + + (300 - 1) * prices[TOKEN_STETH] * lts[TOKEN_STETH] / PERCENTAGE_FACTOR, + expectedTokensToDisable: getTokenMask(arrayOfTokens(TOKEN_LINK)), + expectedOrder: arrayOfTokens(TOKEN_LINK, TOKEN_STETH, TOKEN_DAI) }), CalcNonQuotedTokenCollateralTestCase({ name: "Do not double count tokens if it's mask added twice to collatreral hints", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000})), target: type(uint256).max, - collateralHints: getHints(arrayOf(Tokens.DAI, Tokens.DAI)), - tokensToCheckMask: getTokenMask(arrayOf(Tokens.DAI)), - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + collateralHints: getHints(arrayOfTokens(TOKEN_DAI, TOKEN_DAI)), + tokensToCheckMask: getTokenMask(arrayOfTokens(TOKEN_DAI)), + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.DAI) + expectedOrder: arrayOfTokens(TOKEN_DAI) }) ]; @@ -362,7 +362,7 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { // expected uint256 expectedTotalValueUSD; uint256 expectedTwvUSD; - Tokens[] expectedOrder; + uint256[] expectedOrder; } /// @dev U:[CLL-4]: calcQuotedTokensCollateral works correctly @@ -370,42 +370,42 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { CalcQuotedTokenCollateralTestCase[4] memory cases = [ CalcQuotedTokenCollateralTestCase({ name: "One token calc, no target, twv < quota", - balances: arrayOf(B({t: Tokens.USDT, balance: 10_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 10_000})), + balances: arrayOf(B({t: TOKEN_USDT, balance: 10_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 10_000})), target: type(uint256).max, - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.USDT] * lts[Tokens.USDT] / PERCENTAGE_FACTOR, - expectedOrder: arrayOf(Tokens.USDT) + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_USDT] * lts[TOKEN_USDT] / PERCENTAGE_FACTOR, + expectedOrder: arrayOfTokens(TOKEN_USDT) }), CalcQuotedTokenCollateralTestCase({ name: "One token calc, no target, twv > quota", - balances: arrayOf(B({t: Tokens.USDT, balance: 10_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000})), + balances: arrayOf(B({t: TOKEN_USDT, balance: 10_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000})), target: type(uint256).max, - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: (5_000 - 1) * prices[Tokens.DAI], - expectedOrder: arrayOf(Tokens.USDT) + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: (5_000 - 1) * prices[TOKEN_DAI], + expectedOrder: arrayOfTokens(TOKEN_USDT) }), CalcQuotedTokenCollateralTestCase({ name: "Two token calc, no target, one twv quota", - balances: arrayOf(B({t: Tokens.USDT, balance: 70_000}), B({t: Tokens.LINK, balance: 1_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000}), Q({t: Tokens.LINK, quota: 20_000})), + balances: arrayOf(B({t: TOKEN_USDT, balance: 70_000}), B({t: TOKEN_LINK, balance: 1_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000}), Q({t: TOKEN_LINK, quota: 20_000})), target: type(uint256).max, - expectedTotalValueUSD: (70_000 - 1) * prices[Tokens.USDT] + (1_000 - 1) * prices[Tokens.LINK], - expectedTwvUSD: 5_000 * prices[Tokens.DAI] - + (1_000 - 1) * prices[Tokens.LINK] * lts[Tokens.LINK] / PERCENTAGE_FACTOR, - expectedOrder: arrayOf(Tokens.USDT, Tokens.LINK) + expectedTotalValueUSD: (70_000 - 1) * prices[TOKEN_USDT] + (1_000 - 1) * prices[TOKEN_LINK], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI] + + (1_000 - 1) * prices[TOKEN_LINK] * lts[TOKEN_LINK] / PERCENTAGE_FACTOR, + expectedOrder: arrayOfTokens(TOKEN_USDT, TOKEN_LINK) }), CalcQuotedTokenCollateralTestCase({ name: "Stops when target reached", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000})), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000})), quotas: arrayOf( - Q({t: Tokens.USDT, quota: 5_000}), Q({t: Tokens.WETH, quota: 50}), Q({t: Tokens.LINK, quota: 50_000}) - ), - target: 5_000 * prices[Tokens.DAI], - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: 5_000 * prices[Tokens.DAI], - expectedOrder: arrayOf(Tokens.USDT) + Q({t: TOKEN_USDT, quota: 5_000}), Q({t: TOKEN_WETH, quota: 50}), Q({t: TOKEN_LINK, quota: 50_000}) + ), + target: 5_000 * prices[TOKEN_DAI], + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI], + expectedOrder: arrayOfTokens(TOKEN_USDT) }) ]; @@ -419,7 +419,7 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { setBalances(_case.balances); - uint256 underlyingPriceRAY = RAY * prices[Tokens.DAI]; + uint256 underlyingPriceRAY = RAY * prices[TOKEN_DAI]; (address[] memory quotedTokens, uint256[] memory quotasPacked) = getQuotas(_case.quotas); @@ -463,7 +463,7 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { uint256 expectedTotalValueUSD; uint256 expectedTwvUSD; uint256 expectedTokensToDisable; - Tokens[] expectedOrder; + uint256[] expectedOrder; } /// @dev U:[CLL-5]: calcCollateral works correctly @@ -471,112 +471,110 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { CalcCollateralTestCase[7] memory cases = [ CalcCollateralTestCase({ name: "One non-quoted token calc, no target, no hints", - balances: arrayOf(B({t: Tokens.DAI, balance: 10_000})), + balances: arrayOf(B({t: TOKEN_DAI, balance: 10_000})), quotas: new Q[](0), - enabledTokensMask: getTokenMask(arrayOf(Tokens.DAI)), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_DAI)), quotedTokensMask: 0, lazy: false, minHealthFactor: PERCENTAGE_FACTOR, collateralHints: new uint256[](0), totalDebtUSD: 0, - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.DAI) + expectedOrder: arrayOfTokens(TOKEN_DAI) }), CalcCollateralTestCase({ name: "One quoted token calc, no target, no hints, value < quota", - balances: arrayOf(B({t: Tokens.USDT, balance: 10_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 10_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 10_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 10_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), lazy: false, minHealthFactor: PERCENTAGE_FACTOR, collateralHints: new uint256[](0), totalDebtUSD: 0, - expectedTotalValueUSD: (10_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: (10_000 - 1) * prices[Tokens.USDT] * lts[Tokens.USDT] / PERCENTAGE_FACTOR, + expectedTotalValueUSD: (10_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: (10_000 - 1) * prices[TOKEN_USDT] * lts[TOKEN_USDT] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.USDT) + expectedOrder: arrayOfTokens(TOKEN_USDT) }), CalcCollateralTestCase({ name: "One quoted token calc, no target, no hints, value > quota", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), lazy: false, minHealthFactor: PERCENTAGE_FACTOR, collateralHints: new uint256[](0), totalDebtUSD: 0, - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: 5_000 * prices[Tokens.DAI], + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI], expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.USDT) + expectedOrder: arrayOfTokens(TOKEN_USDT) }), CalcCollateralTestCase({ name: "It removes non-quoted tokens with 0 and 1 balances", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000}), B({t: Tokens.LINK, balance: 1})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.LINK, Tokens.DAI)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000}), B({t: TOKEN_LINK, balance: 1})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_LINK, TOKEN_DAI)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), lazy: false, minHealthFactor: PERCENTAGE_FACTOR, collateralHints: new uint256[](0), totalDebtUSD: 0, - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: 5_000 * prices[Tokens.DAI], - expectedTokensToDisable: getTokenMask(arrayOf(Tokens.LINK, Tokens.DAI)), - expectedOrder: arrayOf(Tokens.USDT, Tokens.DAI, Tokens.LINK) + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI], + expectedTokensToDisable: getTokenMask(arrayOfTokens(TOKEN_LINK, TOKEN_DAI)), + expectedOrder: arrayOfTokens(TOKEN_USDT, TOKEN_DAI, TOKEN_LINK) }), CalcCollateralTestCase({ name: "It stops if target reached during quoted token collateral computation", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000}), B({t: Tokens.LINK, balance: 1})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000}), Q({t: Tokens.WETH, quota: 5_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.WETH, Tokens.LINK, Tokens.DAI)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.WETH)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000}), B({t: TOKEN_LINK, balance: 1})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000}), Q({t: TOKEN_WETH, quota: 5_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_WETH, TOKEN_LINK, TOKEN_DAI)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_WETH)), lazy: true, minHealthFactor: 2 * PERCENTAGE_FACTOR, collateralHints: new uint256[](0), - totalDebtUSD: 5_000 * prices[Tokens.DAI] / 2, - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT], - expectedTwvUSD: 5_000 * prices[Tokens.DAI], + totalDebtUSD: 5_000 * prices[TOKEN_DAI] / 2, + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI], expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.USDT) + expectedOrder: arrayOfTokens(TOKEN_USDT) }), CalcCollateralTestCase({ name: "It stops if target reached during non-quoted token collateral computation, and updates target properly after quoted calc", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000}), B({t: Tokens.DAI, balance: 8_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000}), Q({t: Tokens.WETH, quota: 5_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.WETH, Tokens.LINK, Tokens.DAI)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.WETH)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000}), B({t: TOKEN_DAI, balance: 8_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000}), Q({t: TOKEN_WETH, quota: 5_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_WETH, TOKEN_LINK, TOKEN_DAI)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_WETH)), lazy: true, minHealthFactor: PERCENTAGE_FACTOR, collateralHints: new uint256[](0), - totalDebtUSD: 5_000 * prices[Tokens.DAI] * lts[Tokens.USDT] / PERCENTAGE_FACTOR - + (8_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT] + (8_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: 5_000 * prices[Tokens.DAI] - + (8_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, + totalDebtUSD: 5_000 * prices[TOKEN_DAI] * lts[TOKEN_USDT] / PERCENTAGE_FACTOR + + (8_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT] + (8_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI] + (8_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, expectedTokensToDisable: 0, - expectedOrder: arrayOf(Tokens.USDT, Tokens.WETH, Tokens.DAI) + expectedOrder: arrayOfTokens(TOKEN_USDT, TOKEN_WETH, TOKEN_DAI) }), CalcCollateralTestCase({ name: "Collateral hints work for non-quoted tokens", - balances: arrayOf(B({t: Tokens.USDT, balance: 20_000}), B({t: Tokens.DAI, balance: 8_000})), - quotas: arrayOf(Q({t: Tokens.USDT, quota: 5_000})), - enabledTokensMask: getTokenMask(arrayOf(Tokens.USDT, Tokens.WETH, Tokens.LINK, Tokens.DAI)), - quotedTokensMask: getTokenMask(arrayOf(Tokens.USDT)), + balances: arrayOf(B({t: TOKEN_USDT, balance: 20_000}), B({t: TOKEN_DAI, balance: 8_000})), + quotas: arrayOf(Q({t: TOKEN_USDT, quota: 5_000})), + enabledTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT, TOKEN_WETH, TOKEN_LINK, TOKEN_DAI)), + quotedTokensMask: getTokenMask(arrayOfTokens(TOKEN_USDT)), lazy: false, minHealthFactor: PERCENTAGE_FACTOR, - collateralHints: getHints(arrayOf(Tokens.WETH, Tokens.LINK)), - totalDebtUSD: 5_000 * prices[Tokens.DAI] * lts[Tokens.USDT] / PERCENTAGE_FACTOR - + (8_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, - expectedTotalValueUSD: (20_000 - 1) * prices[Tokens.USDT] + (8_000 - 1) * prices[Tokens.DAI], - expectedTwvUSD: 5_000 * prices[Tokens.DAI] - + (8_000 - 1) * prices[Tokens.DAI] * lts[Tokens.DAI] / PERCENTAGE_FACTOR, - expectedTokensToDisable: getTokenMask(arrayOf(Tokens.WETH, Tokens.LINK)), - expectedOrder: arrayOf(Tokens.USDT, Tokens.WETH, Tokens.LINK, Tokens.DAI) + collateralHints: getHints(arrayOfTokens(TOKEN_WETH, TOKEN_LINK)), + totalDebtUSD: 5_000 * prices[TOKEN_DAI] * lts[TOKEN_USDT] / PERCENTAGE_FACTOR + + (8_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, + expectedTotalValueUSD: (20_000 - 1) * prices[TOKEN_USDT] + (8_000 - 1) * prices[TOKEN_DAI], + expectedTwvUSD: 5_000 * prices[TOKEN_DAI] + (8_000 - 1) * prices[TOKEN_DAI] * lts[TOKEN_DAI] / PERCENTAGE_FACTOR, + expectedTokensToDisable: getTokenMask(arrayOfTokens(TOKEN_WETH, TOKEN_LINK)), + expectedOrder: arrayOfTokens(TOKEN_USDT, TOKEN_WETH, TOKEN_LINK, TOKEN_DAI) }) ]; @@ -608,7 +606,7 @@ contract CollateralLogicUnitTest is TestHelper, CollateralLogicHelper { (uint256 totalValueUSD, uint256 twvUSD, uint256 tokensToDisable) = CollateralLogic.calcCollateral({ collateralDebtData: collateralDebtData, creditAccount: creditAccount, - underlying: addressOf[Tokens.DAI], + underlying: addressOf[TOKEN_DAI], quotasPacked: quotasPacked, twvUSDTarget: target, collateralHints: _case.collateralHints, diff --git a/contracts/test/unit/libraries/CollateralLogicHelper.sol b/contracts/test/unit/libraries/CollateralLogicHelper.sol index b4f58920..7f63be09 100644 --- a/contracts/test/unit/libraries/CollateralLogicHelper.sol +++ b/contracts/test/unit/libraries/CollateralLogicHelper.sol @@ -3,7 +3,7 @@ // (c) Gearbox Foundation, 2023. pragma solidity ^0.8.17; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {MockTokensData, MockToken} from "../../config/MockTokensData.sol"; import {CollateralLogic} from "../../../libraries/CollateralLogic.sol"; @@ -16,30 +16,30 @@ import "forge-std/console.sol"; address constant PRICE_ORACLE = DUMB_ADDRESS4; struct B { - Tokens t; + uint256 t; uint256 balance; } struct Q { - Tokens t; + uint256 t; uint256 quota; } contract CollateralLogicHelper is TestHelper { uint256 session; - mapping(Tokens => uint256) tokenMask; + mapping(uint256 => uint256) tokenMask; - mapping(uint256 => Tokens) tokenByMask; + mapping(uint256 => uint256) tokenByMask; - mapping(Tokens => address) addressOf; - mapping(Tokens => string) symbolOf; - mapping(address => Tokens) tokenOf; + mapping(uint256 => address) addressOf; + mapping(uint256 => string) symbolOf; + mapping(address => uint256) tokenOf; - mapping(Tokens => uint16) lts; + mapping(uint256 => uint16) lts; mapping(address => uint256) _prices; - mapping(Tokens => uint256) prices; + mapping(uint256 => uint256) prices; mapping(address => bool) revertIsPriceOracleCalled; @@ -69,8 +69,8 @@ contract CollateralLogicHelper is TestHelper { } function _collateralTokenByMask(uint256 _tokenMask, bool calcLT) internal view returns (address token, uint16 lt) { - Tokens t = tokenByMask[_tokenMask]; - if (t == Tokens.NO_TOKEN) { + uint256 t = tokenByMask[_tokenMask]; + if (t == TOKEN_NO_TOKEN) { console.log("Cant find token with mask"); console.log(_tokenMask); revert("Token not found"); @@ -83,7 +83,7 @@ contract CollateralLogicHelper is TestHelper { /// HELPERS /// @dev Deployes order token and store info - function deploy(Tokens t, string memory symbol, uint8 index) internal { + function deploy(uint256 t, string memory symbol, uint8 index) internal { address token = address(new OrderToken()); addressOf[t] = token; tokenOf[token] = t; @@ -97,7 +97,7 @@ contract CollateralLogicHelper is TestHelper { vm.label(addressOf[t], symbol); } - function setTokenParams(Tokens t, uint16 lt, uint256 price) internal { + function setTokenParams(uint256 t, uint16 lt, uint256 price) internal { lts[t] = lt; prices[t] = price; _prices[addressOf[t]] = price; @@ -108,8 +108,8 @@ contract CollateralLogicHelper is TestHelper { } function saveCallOrder() external view returns (uint256) { - Tokens currentToken = tokenOf[msg.sender]; - if (currentToken == Tokens.NO_TOKEN) { + uint256 currentToken = tokenOf[msg.sender]; + if (currentToken == TOKEN_NO_TOKEN) { revert("Incorrect tokens order"); } @@ -123,18 +123,18 @@ contract CollateralLogicHelper is TestHelper { } } - function expectTokensOrder(Tokens[] memory tokens, bool debug) internal { + function expectTokensOrder(uint256[] memory tokens, bool debug) internal { (bytes32[] memory reads,) = vm.accesses(address(this)); uint256 len = reads.length; - Tokens[] memory callOrder = new Tokens[](len); + uint256[] memory callOrder = new uint256[](len); uint256 j; for (uint256 i; i < len; ++i) { uint256 slot = uint256(reads[i]); - if (slot > 100 && slot <= (100 + uint256(type(Tokens).max))) { - callOrder[j] = Tokens(slot - 100); + if (slot > 100 && slot <= (100 + NUM_TOKENS)) { + callOrder[j] = slot - 100; ++j; } } @@ -170,24 +170,24 @@ contract CollateralLogicHelper is TestHelper { } } - function printTokens(Tokens[] memory tokens) internal view { + function printTokens(uint256[] memory tokens) internal view { uint256 len = tokens.length; for (uint256 i; i < len; ++i) { - Tokens t = Tokens(tokens[i]); - if (t == Tokens.NO_TOKEN) break; + uint256 t = tokens[i]; + if (t == TOKEN_NO_TOKEN) break; console.log(symbolOf[t]); } } - function getTokenMask(Tokens[] memory tokens) internal view returns (uint256 mask) { + function getTokenMask(uint256[] memory tokens) internal view returns (uint256 mask) { uint256 len = tokens.length; for (uint256 i; i < len; ++i) { mask |= tokenMask[tokens[i]]; } } - function getHints(Tokens[] memory tokens) internal view returns (uint256[] memory collateralHints) { + function getHints(uint256[] memory tokens) internal view returns (uint256[] memory collateralHints) { uint256 len = tokens.length; collateralHints = new uint256[](len); for (uint256 i; i < len; ++i) { @@ -220,38 +220,42 @@ contract CollateralLogicHelper is TestHelper { /// - function arrayOf(Tokens t1) internal pure returns (Tokens[] memory result) { - result = new Tokens[](1); + function arrayOfTokens(uint256 t1) internal pure returns (uint256[] memory result) { + result = new uint256[](1); result[0] = t1; } - function arrayOf(Tokens t1, Tokens t2) internal pure returns (Tokens[] memory result) { - result = new Tokens[](2); + function arrayOfTokens(uint256 t1, uint256 t2) internal pure returns (uint256[] memory result) { + result = new uint256[](2); result[0] = t1; result[1] = t2; } - function arrayOf(Tokens t1, Tokens t2, Tokens t3) internal pure returns (Tokens[] memory result) { - result = new Tokens[](3); + function arrayOfTokens(uint256 t1, uint256 t2, uint256 t3) internal pure returns (uint256[] memory result) { + result = new uint256[](3); result[0] = t1; result[1] = t2; result[2] = t3; } - function arrayOf(Tokens t1, Tokens t2, Tokens t3, Tokens t4) internal pure returns (Tokens[] memory result) { - result = new Tokens[](4); + function arrayOfTokens(uint256 t1, uint256 t2, uint256 t3, uint256 t4) + internal + pure + returns (uint256[] memory result) + { + result = new uint256[](4); result[0] = t1; result[1] = t2; result[2] = t3; result[3] = t4; } - function arrayOf(Tokens t1, Tokens t2, Tokens t3, Tokens t4, Tokens t5) + function arrayOfTokens(uint256 t1, uint256 t2, uint256 t3, uint256 t4, uint256 t5) internal pure - returns (Tokens[] memory result) + returns (uint256[] memory result) { - result = new Tokens[](5); + result = new uint256[](5); result[0] = t1; result[1] = t2; result[2] = t3; diff --git a/contracts/test/unit/libraries/CreditAccountHelper.unit.t.sol b/contracts/test/unit/libraries/CreditAccountHelper.unit.t.sol index 4e936e90..f79acf77 100644 --- a/contracts/test/unit/libraries/CreditAccountHelper.unit.t.sol +++ b/contracts/test/unit/libraries/CreditAccountHelper.unit.t.sol @@ -10,7 +10,7 @@ import {CreditAccountV3} from "../../../credit/CreditAccountV3.sol"; import {ERC20ApproveRestrictedRevert, ERC20ApproveRestrictedFalse} from "../../mocks/token/ERC20ApproveRestricted.sol"; import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {TestHelper} from "../../lib/helper.sol"; import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; @@ -31,13 +31,13 @@ contract CreditAccountHelperUnitTest is TestHelper, BalanceHelper { /// @notice U:[CAH-1]: approveCreditAccount approves with desired allowance function test_U_CAH_01_safeApprove_approves_with_desired_allowance() public { // Case, when current allowance > Allowance_THRESHOLD - tokenTestSuite.approve(Tokens.DAI, creditAccount, DUMB_ADDRESS, 200); + tokenTestSuite.approve(TOKEN_DAI, creditAccount, DUMB_ADDRESS, 200); - address dai = tokenTestSuite.addressOf(Tokens.DAI); + address dai = tokenTestSuite.addressOf(TOKEN_DAI); ICreditAccountBase(creditAccount).safeApprove(dai, DUMB_ADDRESS, DAI_EXCHANGE_AMOUNT); - expectAllowance(Tokens.DAI, creditAccount, DUMB_ADDRESS, DAI_EXCHANGE_AMOUNT); + expectAllowance(TOKEN_DAI, creditAccount, DUMB_ADDRESS, DAI_EXCHANGE_AMOUNT); } /// @dev U:[CAH-2]: approveCreditAccount works for ERC20 that revert if allowance > 0 before approve diff --git a/contracts/test/unit/pool/PoolEquivalence.t.sol b/contracts/test/unit/pool/PoolEquivalence.t.sol index e38a838b..0f093211 100644 --- a/contracts/test/unit/pool/PoolEquivalence.t.sol +++ b/contracts/test/unit/pool/PoolEquivalence.t.sol @@ -13,7 +13,8 @@ import {LinearInterestRateModelV3} from "../../../pool/LinearInterestRateModelV3 import {PoolV3} from "../../../pool/PoolV3.sol"; import {AddressProviderV3ACLMock} from "../../mocks/core/AddressProviderV3ACLMock.sol"; -import {Tokens, TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; /// @title Pool equivalence test /// @notice U:[PET]: Tests that ensure that `PoolV3` without quotas behaves identically to `PoolService` @@ -46,7 +47,7 @@ contract PoolEquivalenceTest is Test { liquidityProvider = makeAddr("LIQUIDITY_PROVIDER"); tokens = new TokensTestSuite(); - underlying = tokens.addressOf(Tokens.DAI); + underlying = tokens.addressOf(TOKEN_DAI); irm = new LinearInterestRateModelV3({ U_1: 80_00, diff --git a/contracts/test/unit/pool/PoolQuotaKeeperV3.unit.t.sol b/contracts/test/unit/pool/PoolQuotaKeeperV3.unit.t.sol index 38fc67e9..03f25708 100644 --- a/contracts/test/unit/pool/PoolQuotaKeeperV3.unit.t.sol +++ b/contracts/test/unit/pool/PoolQuotaKeeperV3.unit.t.sol @@ -20,7 +20,7 @@ import {PoolMock} from "../../mocks/pool/PoolMock.sol"; import {CreditManagerMock} from "../../mocks/credit/CreditManagerMock.sol"; import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; import {PoolQuotaKeeperV3} from "../../../pool/PoolQuotaKeeperV3.sol"; @@ -52,10 +52,10 @@ contract PoolQuotaKeeperV3UnitTest is TestHelper, BalanceHelper, IPoolQuotaKeepe CreditManagerMock creditManagerMock; function setUp() public { - _setUp(Tokens.DAI); + _setUp(TOKEN_DAI); } - function _setUp(Tokens t) public { + function _setUp(uint256 t) public { tokenTestSuite = new TokensTestSuite(); tokenTestSuite.topUpWETH{value: 100 * WAD}(); @@ -63,7 +63,7 @@ contract PoolQuotaKeeperV3UnitTest is TestHelper, BalanceHelper, IPoolQuotaKeepe underlying = tokenTestSuite.addressOf(t); AddressProviderV3ACLMock addressProvider = new AddressProviderV3ACLMock(); - addressProvider.setAddress(AP_WETH_TOKEN, tokenTestSuite.addressOf(Tokens.WETH), false); + addressProvider.setAddress(AP_WETH_TOKEN, tokenTestSuite.addressOf(TOKEN_WETH), false); poolMock = new PoolMock(address(addressProvider), underlying); @@ -187,8 +187,8 @@ contract PoolQuotaKeeperV3UnitTest is TestHelper, BalanceHelper, IPoolQuotaKeepe // U:[PQK-7]: updateRates works as expected function test_U_PQK_07_updateRates_works_as_expected() public { - address DAI = tokenTestSuite.addressOf(Tokens.DAI); - address USDC = tokenTestSuite.addressOf(Tokens.USDC); + address DAI = tokenTestSuite.addressOf(TOKEN_DAI); + address USDC = tokenTestSuite.addressOf(TOKEN_USDC); uint16 DAI_QUOTA_RATE = 20_00; uint16 USDC_QUOTA_RATE = 45_00; @@ -383,7 +383,7 @@ contract PoolQuotaKeeperV3UnitTest is TestHelper, BalanceHelper, IPoolQuotaKeepe function test_U_PQK_14_updateQuotas_reverts_for_unregistered_token() public { pqk.addCreditManager(address(creditManagerMock)); - address link = tokenTestSuite.addressOf(Tokens.LINK); + address link = tokenTestSuite.addressOf(TOKEN_LINK); vm.expectRevert(TokenIsNotQuotedException.selector); vm.prank(address(creditManagerMock)); diff --git a/contracts/test/unit/pool/PoolV3.unit.t.sol b/contracts/test/unit/pool/PoolV3.unit.t.sol index bd293caa..da8ff030 100644 --- a/contracts/test/unit/pool/PoolV3.unit.t.sol +++ b/contracts/test/unit/pool/PoolV3.unit.t.sol @@ -15,7 +15,7 @@ import {IPoolQuotaKeeperV3} from "../../../interfaces/IPoolQuotaKeeperV3.sol"; import {IPoolV3Events} from "../../../interfaces/IPoolV3.sol"; import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; +import "@gearbox-protocol/sdk-gov/contracts/Tokens.sol"; import {TestHelper} from "../../lib/helper.sol"; import {AddressProviderV3ACLMock} from "../../mocks/core/AddressProviderV3ACLMock.sol"; diff --git a/lib/forge-std b/lib/forge-std index 73d44ec7..1714bee7 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 73d44ec7d124e3831bc5f832267889ffb6f9bc3f +Subproject commit 1714bee72e286e73f76e320d110e0eaf5c4e649d diff --git a/package.json b/package.json index e58ce76c..8ab4524a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@commitlint/config-conventional": "17.6.0", "@gearbox-protocol/core-v2": "1.19.0-base.16", "@gearbox-protocol/prettier-config": "^1.5.0", - "@gearbox-protocol/sdk-gov": "^1.4.6", + "@gearbox-protocol/sdk-gov": "^2.28.0", "@openzeppelin/contracts": "^4.9.3", "husky": "^8.0.3", "lint-staged": "^13.0.3", diff --git a/yarn.lock b/yarn.lock index 2edcdd66..54947898 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@1inch/solidity-utils@2.4.0", "@1inch/solidity-utils@^2.2.27": +"@1inch/solidity-utils@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@1inch/solidity-utils/-/solidity-utils-2.4.0.tgz#23268c5061521933b6e95a8d2c2d620d8851f7d3" integrity sha512-qX+TkF9IPppC5Ghr+ZsZYmFVaSs+Uyc91VgRtghgj7INjjaSaTANl70wqrv5utVCiIR70s8FZGXbpzwAwIEoww== @@ -15,10 +15,10 @@ ethereumjs-util "7.1.5" ethers "5.7.2" -"@adraffy/ens-normalize@^1.8.8": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.9.4.tgz#aae21cb858bbb0411949d5b7b3051f4209043f62" - integrity sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw== +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== "@babel/code-frame@^7.0.0": version "7.22.10" @@ -220,18 +220,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== - "@eth-optimism/contracts@^0.5.21": version "0.5.40" resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a" @@ -277,22 +265,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.6.4": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.4.tgz#f6e01b6ed391a505932698ecc0d9e7a99ee60362" - integrity sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@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== @@ -307,20 +280,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz#02ddce150785caf0c77fe036a0ebfcee61878c59" - integrity sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.6.1", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -333,18 +293,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz#491f07fc2cbd5da258f46ec539664713950b0b33" - integrity sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.6.2", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -355,18 +304,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" - integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.6.1", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -377,29 +315,14 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.1.tgz#2c40d8a0310c9d1606c2c37ae3092634b41d87cb" - integrity sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.6.1", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.1.tgz#badbb2f1d4a6f52ce41c9064f01eab19cc4c5305" - integrity sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.6.1", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -407,16 +330,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.2.tgz#72a0717d6163fab44c47bcc82e0c550ac0315d66" - integrity sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - bn.js "^5.2.1" - -"@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== @@ -425,50 +339,20 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" - integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.1.tgz#e2e974cac160dd101cf79fdf879d7d18e8cb1370" - integrity sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.6.1", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.2.tgz#20b52e69ebc1b74274ff8e3d4e508de971c287bc" - integrity sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g== - dependencies: - "@ethersproject/abi" "^5.6.3" - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" @@ -485,21 +369,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.1.tgz#224572ea4de257f05b4abf8ae58b03a67e99b0f4" - integrity sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.6.1", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -514,25 +384,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.2.tgz#26f3c83a3e8f1b7985c15d1db50dc2903418b2d2" - integrity sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.6.2", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -550,26 +402,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz#3f06ba555c9c0d7da46756a12ac53483fe18dd91" - integrity sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.1" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.6.1", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -588,15 +421,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.1.tgz#b867167c9b50ba1b1a92bccdd4f2d6bd168a91cc" - integrity sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - js-sha3 "0.8.0" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -604,39 +429,19 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" - integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.6.4": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.4.tgz#51296d8fec59e9627554f5a8a9c7791248c8dc07" - integrity sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.6.3", "@ethersproject/networks@^5.7.0": +"@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" -"@ethersproject/pbkdf2@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz#f462fe320b22c0d6b1d72a9920a3963b09eb82d1" - integrity sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.6.1", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -644,46 +449,13 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" - integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.6.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.6.8": - version "5.6.8" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" - integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/base64" "^5.6.1" - "@ethersproject/basex" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.3" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/web" "^5.6.1" - bech32 "1.1.4" - ws "7.4.6" - "@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" @@ -710,15 +482,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.1.tgz#66915943981bcd3e11bbd43733f5c3ba5a790255" - integrity sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.6.1", "@ethersproject/random@^5.7.0": +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -726,15 +490,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.1.tgz#df8311e6f9f24dcb03d59a2bac457a28a4fe2bd8" - integrity sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -742,16 +498,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" - integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - hash.js "1.1.7" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.6.1", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -760,19 +507,7 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.2.tgz#8a51b111e4d62e5a62aee1da1e088d12de0614a3" - integrity sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.6.2", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -784,18 +519,6 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.1.tgz#5845e71182c66d32e6ec5eefd041fca091a473e2" - integrity sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.1" - "@ethersproject/strings" "^5.6.1" - "@ethersproject/solidity@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" @@ -808,16 +531,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.1.tgz#dbc1b7f901db822b5cafd4ebf01ca93c373f8952" - integrity sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.6.1", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -826,22 +540,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.2.tgz#793a774c01ced9fe7073985bb95a4b4e57a6370b" - integrity sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q== - dependencies: - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/rlp" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -856,15 +555,6 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.1.tgz#ecc590d16d37c8f9ef4e89e2005bda7ddc6a4e6f" - integrity sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw== - dependencies: - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/constants" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" @@ -874,27 +564,6 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" - integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.1" - "@ethersproject/abstract-signer" "^5.6.2" - "@ethersproject/address" "^5.6.1" - "@ethersproject/bignumber" "^5.6.2" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/hdnode" "^5.6.2" - "@ethersproject/json-wallets" "^5.6.1" - "@ethersproject/keccak256" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.1" - "@ethersproject/signing-key" "^5.6.2" - "@ethersproject/transactions" "^5.6.2" - "@ethersproject/wordlists" "^5.6.1" - "@ethersproject/wallet@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" @@ -916,18 +585,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.1.tgz#6e2bd3ebadd033e6fe57d072db2b69ad2c9bdf5d" - integrity sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA== - dependencies: - "@ethersproject/base64" "^5.6.1" - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.6.1", "@ethersproject/web@^5.7.0": +"@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== @@ -938,18 +596,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.1.tgz#1e78e2740a8a21e9e99947e47979d72e130aeda1" - integrity sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw== - dependencies: - "@ethersproject/bytes" "^5.6.1" - "@ethersproject/hash" "^5.6.1" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.1" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.6.1", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -965,91 +612,19 @@ resolved "https://registry.yarnpkg.com/@gearbox-protocol/core-v2/-/core-v2-1.19.0-base.16.tgz#6bfd3c2d7981541a987cec3dfaf53919ff4a52ec" integrity sha512-NPV/TPhZPsq03Ke2Fb3v1DsRZS4y1mAtvR/B1z6VNfEhs0fqk/UigvgCpHFkZUxwQxljpOCe2cxlf8EPYXnVrA== -"@gearbox-protocol/core-v2@^1.16.2", "@gearbox-protocol/core-v2@^1.19.0-base.8", "@gearbox-protocol/core-v2@^1.21.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/core-v2/-/core-v2-1.21.0.tgz#5a899c4f96200a28e6516f8416cfd2d39ce20695" - integrity sha512-9pv8K2gdoGMByVkdbT9OWRnn2Xp5p+zanoOCghzTgcC245UZabEfmm3ZrWIo9rqMNZZY64W7RH1Pbt1TU7hqHw== - dependencies: - "@typechain/ethers-v5" "^10.2.1" - -"@gearbox-protocol/core-v3@^1.34.1": - version "1.36.2" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/core-v3/-/core-v3-1.36.2.tgz#dcafdf9e08bee9e5d4b43cf097c7f16cbc89d3e8" - integrity sha512-NXdb65Wdt3hdRXwLMF1+Wv1aE5/xW35980a1uMSb3MOtmr4TwQsIkYBWVpxGFsb3rv3qVFLuy6jJAaHdsYgh3A== - dependencies: - "@1inch/solidity-utils" "^2.2.27" - "@gearbox-protocol/core-v2" "^1.19.0-base.8" - "@gearbox-protocol/sdk" "^2.1.18" - -"@gearbox-protocol/eslint-config@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/eslint-config/-/eslint-config-1.6.1.tgz#315a5c0b19593e925db32de72c27964adc44d2f8" - integrity sha512-CNOjCt8fNESxnub1dXNEZWVxMQiau+fOSbRY5q7xPIv7H6iYQTxdPDefC7geStC8dzqvv2F9t/dFUzPJjbEzuQ== - dependencies: - "@typescript-eslint/eslint-plugin" "^5.33.0" - "@typescript-eslint/parser" "^5.33.0" - eslint-config-alloy "^4.6.2" - eslint-import-resolver-typescript "^3.4.1" - eslint-plugin-import "^2.26.0" - eslint-plugin-react "^7.30.1" - eslint-plugin-react-hooks "^4.6.0" - eslint-plugin-simple-import-sort "^7.0.0" - eslint-plugin-unused-imports "^2.0.0" - -"@gearbox-protocol/integrations-v3@1.7.0-legacy.7": - version "1.7.0-legacy.7" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/integrations-v3/-/integrations-v3-1.7.0-legacy.7.tgz#0613f767c97c18e36dd8bde550378131a809b9dd" - integrity sha512-N9NAqokgFN2IVRtKL4xKYnjz5LNeGMrObDN0aFjxdA5g4meWReBpgyTrkfyN7saiR/U3g91BxuJUSpnaTWoP6A== - dependencies: - "@gearbox-protocol/core-v2" "^1.16.2" - "@gearbox-protocol/sdk" "1.22.1" - axios "^1.1.3" - "@gearbox-protocol/prettier-config@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@gearbox-protocol/prettier-config/-/prettier-config-1.5.0.tgz#4df8e9fd2305fee6ab8c1417a02e31343836932a" integrity sha512-FUoprSsBdZyBjgxXCKL6mTkbeUJytaLzPJqIOoQpDmBRTX0seCc2o5I9PI9tySoRIlNnd/XXnKCXq1xHDEGbxw== -"@gearbox-protocol/sdk-gov@^1.4.6": - version "1.4.7" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/sdk-gov/-/sdk-gov-1.4.7.tgz#a6ff58b07d75a50388831126a6e0993ddad95f61" - integrity sha512-YLOXtx4AZwLWY+ycjdRpxL2NviFh9FotBRhKSiHT63V14u5PLT5K6AsVJ6PO5xCKnYPQE/huQKvvYE10Yfw76Q== - dependencies: - "@gearbox-protocol/core-v2" "^1.21.0" - "@gearbox-protocol/core-v3" "^1.34.1" - "@gearbox-protocol/eslint-config" "^1.6.1" - "@gearbox-protocol/integrations-v3" "1.7.0-legacy.7" - "@gearbox-protocol/prettier-config" "^1.5.0" - "@types/chai" "^4.3.5" - axios "^1.4.0" - chai "^4.3.7" - dotenv "^16.3.1" - ethers "5.6.9" - ts-toolbelt "^9.6.0" - tslog "^4.8.2" - web3 "^4.0.3" - -"@gearbox-protocol/sdk@1.22.1": - version "1.22.1" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/sdk/-/sdk-1.22.1.tgz#ef92774be0f3dac70f4a7b75ed69d9b6afbd4aa9" - integrity sha512-3jk/4KuyJFjJvRcX6bdI7gj03yb27e9RYvF7z6YXUCKcqyA5l+BL6Wy2TOSU/KS/X82AgCtPov7S+QkXdf35IA== - dependencies: - "@types/deep-eql" "^4.0.0" - axios "^1.2.0" - decimal.js-light "^2.5.1" - deep-eql "^4.1.0" - moment "^2.29.4" - -"@gearbox-protocol/sdk@^2.1.18": - version "2.1.27" - resolved "https://registry.yarnpkg.com/@gearbox-protocol/sdk/-/sdk-2.1.27.tgz#93cd56948d23aca7a05f9302152cd65be174dfd8" - integrity sha512-gjPPqf2AW1Bz1HmkAmPsIrDkafLF2J5BzX9Dloti6EYYXx8quxLN4f6+n/K9HbDG4yRfZOdeRJJQce9QTmTisA== - dependencies: - "@types/deep-eql" "^4.0.0" - axios "^1.2.6" - decimal.js-light "^2.5.1" - deep-eql "^4.1.0" - moment "^2.29.4" +"@gearbox-protocol/sdk-gov@^2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@gearbox-protocol/sdk-gov/-/sdk-gov-2.28.0.tgz#f858222b0d4bf2661e7213d250f96e112aee8ce3" + integrity sha512-qwvXZALpqYRAc77B6ZC0OSIDk6uEX8Z1B10yfN10ETBvftnDvMwJ6XVhVt/RyRgeW0vqh0W6T4F/y2PFiiW0bw== + dependencies: + ethers "6.12.1" + humanize-duration-ts "^2.1.1" + zod "^3.22.2" "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1100,6 +675,13 @@ dependencies: "@noble/hashes" "1.3.1" +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + "@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" @@ -1110,32 +692,16 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@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" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@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" @@ -1244,14 +810,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@typechain/ethers-v5@^10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" - integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== - dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" - "@types/bn.js@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" @@ -1259,26 +817,6 @@ dependencies: "@types/node" "*" -"@types/chai@^4.3.5": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== - -"@types/deep-eql@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.0.tgz#168e28540d077f443090fce6926ff3b5bbaec757" - integrity sha512-UkfTYLA64vGUyR4ez8ybIC01wtilS/ydOqKL1fSHOvnX1sVm1sI5btr7Q+bqpdaPGD+QNhOgBXq1HGjO+99e1A== - -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - "@types/minimist@^1.2.0": version "1.2.2" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" @@ -1289,6 +827,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + "@types/node@20.4.7": version "20.4.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.7.tgz#74d323a93f1391a63477b27b9aec56669c98b2ab" @@ -1313,102 +856,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== - -"@types/ws@8.5.3": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^5.33.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.33.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - "@uniswap/permit2-sdk@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@uniswap/permit2-sdk/-/permit2-sdk-1.2.0.tgz#ed86440a87a6c318169c8e6f161fc263ad040891" @@ -1440,6 +887,11 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + ajv@^8.11.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" @@ -1501,89 +953,11 @@ 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-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-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -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" - arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1594,32 +968,6 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -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== - -axios@^1.1.3, axios@^1.2.0, axios@^1.2.6, 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.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1652,14 +1000,6 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - 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" @@ -1717,14 +1057,6 @@ bufio@^1.0.7: resolved "https://registry.yarnpkg.com/bufio/-/bufio-1.2.0.tgz#b9ad1c06b0d9010363c387c39d2810a7086d143f" integrity sha512-UlFk8z/PwdhYQTXSQQagwGAdtRI83gib2n4uy4rQnenxUM2yQi8lBDzF230BNk+3wAoZDxYRoBwVVUPgHa9MCA== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1744,7 +1076,7 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chai@^4.3.4, chai@^4.3.7: +chai@^4.3.4: version "4.3.7" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== @@ -1845,13 +1177,6 @@ colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" @@ -1865,11 +1190,6 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - conventional-changelog-angular@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" @@ -1911,11 +1231,6 @@ cosmiconfig@^8.0.0: parse-json "^5.0.0" path-type "^4.0.0" -crc-32@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -1944,13 +1259,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1965,20 +1273,13 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -debug@4.3.4, debug@^4.3.4: +debug@4.3.4: 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@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -1992,50 +1293,18 @@ decamelize@^1.1.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js-light@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" - integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== - -deep-eql@^4.1.0, deep-eql@^4.1.2: +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" -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" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - 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== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -2043,11 +1312,6 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -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== - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -2076,14 +1340,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enhanced-resolve@^5.12.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2091,96 +1347,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2, es-abstract@^1.21.3: - 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.prototype.name "^1.1.5" - 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.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.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - 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-iterator-helpers@^1.0.12: - version "1.0.13" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz#72101046ffc19baf9996adc70e6177a26e6e8084" - integrity sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.3" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.0" - safe-array-concat "^1.0.0" - -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-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -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" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -2191,142 +1357,6 @@ 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== -eslint-config-alloy@^4.6.2: - version "4.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-alloy/-/eslint-config-alloy-4.9.0.tgz#44ed777e8eb0ee595baabeb5d6cb568c2e6461c2" - integrity sha512-4DfiN0sXByf5WuXioZrrZJdfzZw+lgdoQfFTuQyFenJ2XeIKrsXYctArLiZAoAsTxyZnmUFYqrgwUIXx26q0gg== - -eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.4.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz#36f93e1eb65a635e688e16cae4bead54552e3bbd" - integrity sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" - is-glob "^4.0.3" - -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.26.0: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - -eslint-plugin-react@^7.30.1: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-plugin-simple-import-sort@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8" - integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw== - -eslint-plugin-unused-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" - integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== - dependencies: - eslint-rule-composer "^0.3.0" - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-visitor-keys@^3.3.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -esrecurse@^4.3.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@^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.2.0, estraverse@^5.3.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" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -2379,42 +1409,6 @@ ethereumjs-util@7.1.5, ethereumjs-util@^7.1.4: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@5.6.9: - version "5.6.9" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.9.tgz#4e12f8dfcb67b88ae7a78a9519b384c23c576a4d" - integrity sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA== - dependencies: - "@ethersproject/abi" "5.6.4" - "@ethersproject/abstract-provider" "5.6.1" - "@ethersproject/abstract-signer" "5.6.2" - "@ethersproject/address" "5.6.1" - "@ethersproject/base64" "5.6.1" - "@ethersproject/basex" "5.6.1" - "@ethersproject/bignumber" "5.6.2" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.1" - "@ethersproject/contracts" "5.6.2" - "@ethersproject/hash" "5.6.1" - "@ethersproject/hdnode" "5.6.2" - "@ethersproject/json-wallets" "5.6.1" - "@ethersproject/keccak256" "5.6.1" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.4" - "@ethersproject/pbkdf2" "5.6.1" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.8" - "@ethersproject/random" "5.6.1" - "@ethersproject/rlp" "5.6.1" - "@ethersproject/sha2" "5.6.1" - "@ethersproject/signing-key" "5.6.2" - "@ethersproject/solidity" "5.6.1" - "@ethersproject/strings" "5.6.1" - "@ethersproject/transactions" "5.6.2" - "@ethersproject/units" "5.6.1" - "@ethersproject/wallet" "5.6.2" - "@ethersproject/web" "5.6.1" - "@ethersproject/wordlists" "5.6.1" - ethers@5.7.2, ethers@^5.3.1: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -2451,6 +1445,19 @@ ethers@5.7.2, ethers@^5.3.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@6.12.1: + version "6.12.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.12.1.tgz#517ff6d66d4fd5433e38e903051da3e57c87ff37" + integrity sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.5.0" + ethjs-util@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" @@ -2507,24 +1514,6 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9, fast-glob@^3.3.1: - 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" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - 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" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -2548,18 +1537,6 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -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== - -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: - is-callable "^1.1.3" - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -2568,15 +1545,6 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fs-extra@^11.0.0: version "11.1.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" @@ -2591,21 +1559,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - 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== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2616,36 +1569,11 @@ 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.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-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.5.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - git-raw-commits@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -2657,13 +1585,6 @@ git-raw-commits@^2.0.11: split2 "^3.0.0" through2 "^4.0.0" -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob@^10.2.5: version "10.3.3" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b" @@ -2682,52 +1603,16 @@ global-dirs@^0.1.1: dependencies: ini "^1.3.4" -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@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - 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.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: 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== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2738,30 +1623,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - 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.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2817,16 +1678,16 @@ human-signals@^4.3.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +humanize-duration-ts@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/humanize-duration-ts/-/humanize-duration-ts-2.1.1.tgz#5382b2789f851005a67229eaf031931d71f37ee9" + integrity sha512-TibNF2/fkypjAfHdGpWL/dmWUS0G6Qi+3mKyiB6LDCowbMy+PtzbgPTnFMNTOVAJXDau01jYrJ3tFoz5AJSqhA== + 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== -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - 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" @@ -2850,90 +1711,18 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.3, 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.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^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" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -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.11.0, is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.9.0: +is-core-module@^2.13.0, is-core-module@^2.5.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" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -2944,42 +1733,11 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -2995,26 +1753,6 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -3025,20 +1763,6 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -3046,59 +1770,11 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, 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-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -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-ws@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" - integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - -iterator.prototype@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.0.tgz#690c88b043d821f783843aaf725d7ac3b62e3b46" - integrity sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw== - dependencies: - define-properties "^1.1.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - has-tostringtag "^1.0.0" - reflect.getprototypeof "^1.0.3" - jackspeak@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.0.tgz#aa228a94de830f31d4e4f0184427ce91c4ff1493" @@ -3113,7 +1789,7 @@ js-sha3@0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3135,13 +1811,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3156,16 +1825,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - keccak@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" @@ -3298,13 +1957,6 @@ log-update@^5.0.1: strip-ansi "^7.0.1" wrap-ansi "^8.0.1" -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - loupe@^2.3.1: version "2.3.6" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" @@ -3370,17 +2022,12 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - micro-ftch@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== -micromatch@4.0.5, micromatch@^4.0.4: +micromatch@4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -3388,18 +2035,6 @@ micromatch@4.0.5, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -3425,13 +2060,6 @@ 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@^3.1.2: - 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@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -3448,7 +2076,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -3458,38 +2086,16 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== -moment@^2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - 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" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-fetch@^2.6.12: - version "2.6.13" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" - integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== - dependencies: - whatwg-url "^5.0.0" - node-gyp-build@^4.2.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" @@ -3529,76 +2135,6 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -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.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -3736,20 +2272,6 @@ prettier@^2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -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== - punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -3760,11 +2282,6 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -3777,11 +2294,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -3818,27 +2330,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reflect.getprototypeof@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz#2738fd896fcc3477ffbd4190b40c2458026b6928" - integrity sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regexp.prototype.flags@^1.4.3, 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.2.0" - functions-have-names "^1.2.3" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3866,12 +2357,7 @@ resolve-global@1.0.0, resolve-global@^1.0.0: dependencies: global-dirs "^0.1.1" -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.10.0, resolve@^1.22.4: +resolve@^1.10.0: version "1.22.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== @@ -3880,15 +2366,6 @@ resolve@^1.10.0, resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - restore-cursor@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" @@ -3897,11 +2374,6 @@ restore-cursor@^4.0.0: onetime "^5.1.0" signal-exit "^3.0.2" -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - rfdc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" @@ -3929,37 +2401,11 @@ rlp@^2.2.4: dependencies: bn.js "^5.2.0" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -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: - 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" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -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" - scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -3979,18 +2425,13 @@ secp256k1@^4.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.4, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: +semver@7.5.4, semver@^7.3.4, semver@^7.3.8: 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" -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -4016,15 +2457,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -4035,11 +2467,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" @@ -4109,47 +2536,6 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -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.20.4" - -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.20.4" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -4171,11 +2557,6 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -4219,11 +2600,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" @@ -4253,21 +2629,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -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.8.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -4287,37 +2653,10 @@ ts-node@^10.8.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -ts-toolbelt@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== - -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslog@^4.8.2: - version "4.9.1" - resolved "https://registry.yarnpkg.com/tslog/-/tslog-4.9.1.tgz#b395bf003de35ed1537bbb97d1e180280debae09" - integrity sha512-N6SkH+ApNh65tyKV7CfXmcShfw7KTnoTASQkKr+nZbhM73iwi/3a9ZJeYKRRvboLxkx3UNnNViMo1s/hNdSZLg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tweetnacl-util@^0.15.1: version "0.15.1" @@ -4354,60 +2693,11 @@ type-fest@^1.0.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -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" - "typescript@^4.6.4 || ^5.0.0": version "5.1.6" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -4425,17 +2715,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - 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" @@ -4449,280 +2728,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -web3-core@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.1.1.tgz#01bd865d25ef1d3a718e222df393fdf5b527469c" - integrity sha512-wzS01bC+ihf5DJ6mz2fz4d5yxnPEM5AYQIRihO8kUt3dil+X4V07CHks23wLbb9yk8U9+3a1Iod207WGF872rA== - dependencies: - web3-errors "^1.1.1" - web3-eth-iban "^4.0.5" - web3-providers-http "^4.0.5" - web3-providers-ws "^4.0.5" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - optionalDependencies: - web3-providers-ipc "^4.0.5" - -web3-errors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.1.1.tgz#1a73b84f4f8315945a1eb0ae0ab1f16bf5fac28a" - integrity sha512-9IEhcympCJEK3Nmkz2oE/daKnOh+3CxHceuVWWRkHWKUfuIiJQgXAv9wRkPGk63JJTP/R9jtGmP+IbkScKoTBA== - dependencies: - web3-types "^1.1.1" - -web3-eth-abi@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.1.1.tgz#08a2583cc3ea8fb77dfa33e5468dec24a9852fec" - integrity sha512-dOLwJ7Ua98WMXuxk7anYfSIqkuCdUvrvU/Um/OWPb6Gw10QciKUWXMIiRobNpWkpS8R77nDtecmQQ1OnTnLaNA== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - -web3-eth-accounts@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-4.0.5.tgz#f6597fe6ca92769ccd994a3776079ed98d5465ca" - integrity sha512-cmaAH20zFe/7Xjga7EuRXL0UV4O894i6ElEXB9Cqd9fP/CBnhQYK/TYuU37xydHhs5WY+B0hKeaoTqxLaPWAYg== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - crc-32 "^1.2.2" - ethereum-cryptography "^2.0.0" - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-eth-contract@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-4.0.5.tgz#ef18340f0272f6d5076d33985b317416850ad419" - integrity sha512-gS21liRDutWQX9i+Ru2Porzefx+7AumRvk+ZLR9wy8l9iLZxldvsvMdgbsyf9lA7UHOqPEhg/zoDyEc0N0hAVw== - dependencies: - web3-core "^4.1.1" - web3-errors "^1.1.1" - web3-eth "^4.1.1" - web3-eth-abi "^4.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-eth-ens@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-4.0.5.tgz#3ad8e6ba9e6a7a3d2855bce6e4d70fe5b96769c4" - integrity sha512-PBTCk7h3NlSKP9XWmUJbpTJfMK3IybMAjn+uKrvSbeP50/xaZ73s94nI0eaRmI2FxlSQwTsd7apxXzrE07iKJw== - dependencies: - "@adraffy/ens-normalize" "^1.8.8" - web3-core "^4.1.1" - web3-errors "^1.1.1" - web3-eth "^4.1.1" - web3-eth-contract "^4.0.5" - web3-net "^4.0.5" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-eth-iban@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-4.0.5.tgz#665e4904d5609b4b6c1656dc91687ad87be04e78" - integrity sha512-rAH4Dsk0G90W8UqQFomGNjLfxKhBJwkSnkjdG7TUCRhoFvqvrsW1YL+4a+UoODRyJ9BCdaRR71jrymmy4UTDHA== - dependencies: - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-eth-personal@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-4.0.5.tgz#28540607280b6b6143c422d786d3ecea59416e1d" - integrity sha512-cypChpAaljYtd1fOfjvhDvty7SBdUvwz5hSimwb+81IJ4MtWc7Jdbn1Ka/g0ZxwoAm46OmeV0yHef7+QyfbpsQ== - dependencies: - web3-core "^4.1.1" - web3-eth "^4.1.1" - web3-rpc-methods "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-eth@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-4.1.1.tgz#25cdc2de58d07ba0b79082c57b75a4f29422a1ba" - integrity sha512-0lftXINbeEOiYhHCWIKgeAOPnjoeHR8DTWLOjURDoz5CKbTj2wfcRQvuL6tUfvvVmrGWHEfIOncM30jhjlTxYQ== - dependencies: - setimmediate "^1.0.5" - web3-core "^4.1.1" - web3-errors "^1.1.1" - web3-eth-abi "^4.1.1" - web3-eth-accounts "^4.0.5" - web3-net "^4.0.5" - web3-providers-ws "^4.0.5" - web3-rpc-methods "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -web3-net@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-4.0.5.tgz#706560633ad86cece4c513b2b00417dfdd947557" - integrity sha512-7Ir+Da5z3I3KxUn7nmg6NcXxWADYnQAkHX7Z4u4NE3yA+gNbiwPUjVpvSgzpNoDZj+EFovvP1AuOR5idHvyE0g== - dependencies: - web3-core "^4.1.1" - web3-rpc-methods "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - -web3-providers-http@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-4.0.5.tgz#abcc7aacffa9a4024ca913abfb836d4aadd9165b" - integrity sha512-JAY0GyLqRKbKw7m92EMg84otLU6N/NmYqepPid7B8XcPkGzhK6R/FsATyi+BGe2ecW9HRyCSz9SWllTjlKhRwQ== - dependencies: - cross-fetch "^3.1.5" - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - -web3-providers-ipc@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-4.0.5.tgz#363f497936378253f19822d9398d0ec1d853dde7" - integrity sha512-1mJWqBnKbQ6UGHVxuXDJRpw4NwkpJ7NabyF2XBmzctzFHKvzE0X1dAocy3tih49J38d0vKrmubTOqxxkMpq49Q== - dependencies: - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - -web3-providers-ws@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-4.0.5.tgz#b8e42b37839c28d76b7e59e1da37692c2f771ced" - integrity sha512-v9xE16Jjczy+7jMKY7rwTuXgwGK51NKvCGdFERPPcSNJCkS5YCBq9DpzJe8mcr5QhuhnTeGeQ7XmcjTzDRkwnQ== - dependencies: - "@types/ws" "8.5.3" - isomorphic-ws "^5.0.0" - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - ws "^8.8.1" - -web3-rpc-methods@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/web3-rpc-methods/-/web3-rpc-methods-1.1.1.tgz#4ec5558db3a4de6e884ac2448eb79ee9de9db11a" - integrity sha512-aAhm1eIKPWWBRf+BrYpKcvQX5qAg1LOU6NhriY0xpXJh01hbwkz0Q8rMJfCCjlGAElYHSp2K/odyAmyKRDr0LQ== - dependencies: - web3-core "^4.1.1" - web3-types "^1.1.1" - web3-validator "^2.0.1" - -web3-types@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.1.1.tgz#d3df5e9839bf70a19b070313fd3d9ee07fbffbf3" - integrity sha512-bXmIPJi/NPed43JBcya71gT+euZSMvfQx6NYv8G97PSNxR1HWwANYBKbamTZvzBbq10QCwQLh0hZw3tyOXuPFA== - -web3-utils@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.0.5.tgz#598d0ebbe1463c56ac1e838103a728a0a6bfdad7" - integrity sha512-43xIM7rr3htYNzliVQLpWLQmEf4XX8IXgjvqLcEuC/xje14O5UQM4kamRCtz8v3JZN3X6QTfsV6Zgby67mVmCg== - dependencies: - ethereum-cryptography "^2.0.0" - web3-errors "^1.1.1" - web3-types "^1.1.1" - web3-validator "^2.0.1" - -web3-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.1.tgz#8da5b9f871c0aac7677f4a5eca46b4fee9b6d0ff" - integrity sha512-RIdZCNhceBEOQpmzcEk6K3qqLHRfDIMkg2PJe7yllpuEc0fa0cmUZgGUl1FEnioc5Rx9GBEE8eTllaneIAiiQQ== - dependencies: - ethereum-cryptography "^2.0.0" - util "^0.12.5" - web3-errors "^1.1.1" - web3-types "^1.1.1" - zod "^3.21.4" - -web3@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3/-/web3-4.1.1.tgz#df54d56b9f09d9ca29ee5a12873ce0af2774adac" - integrity sha512-vnPll2G+ZNktSu7oJVjAW0QYuY0kPHLs8LQMifml4kTR+hqhiTmzMIzO8FqkcsESLEu6H9R7Acj6EgyeU1hruQ== - dependencies: - web3-core "^4.1.1" - web3-errors "^1.1.1" - web3-eth "^4.1.1" - web3-eth-abi "^4.1.1" - web3-eth-accounts "^4.0.5" - web3-eth-contract "^4.0.5" - web3-eth-ens "^4.0.5" - web3-eth-iban "^4.0.5" - web3-eth-personal "^4.0.5" - web3-net "^4.0.5" - web3-providers-http "^4.0.5" - web3-providers-ws "^4.0.5" - web3-rpc-methods "^1.1.1" - web3-types "^1.1.1" - web3-utils "^4.0.5" - web3-validator "^2.0.1" - -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" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - 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@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -4753,10 +2758,10 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^8.8.1: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== y18n@^5.0.5: version "5.0.8" @@ -4806,7 +2811,7 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zod@^3.21.4: - version "3.22.2" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.2.tgz#3add8c682b7077c05ac6f979fea6998b573e157b" - integrity sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg== +zod@^3.22.2: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==